[Bug target/67002] [5] [SH]: Bootstrap stage 2/3 comparison failure - gcc/real.o differs
kkojima at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Aug 6 11:57:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67002
--- Comment #19 from Kazumoto Kojima <kkojima at gcc dot gnu.org> ---
(In reply to Kazumoto Kojima from comment #18)
In the problematic situation, get_max_insn_count returns the false
value after
if (MAY_HAVE_DEBUG_INSNS)
expand_debug_locations ();
in pass_expand::execute (function *fun). expand_debug_locations
calls sh_recog_treg_set_expr indirectly at this very early stage
to compute rtx costs. sh_recog_treg_set_expr makes some set insns
and they cause the differences of cur_insn_uid with -g. Oleg, how
about the patch below? My first trial was --cur_insn_uid just
after make_insn_raw there but I'm afraid that it will make another
surprise.
diff --git a/config/sh/sh.c b/config/sh/sh.c
index f429193..450d634 100644
--- a/config/sh/sh.c
+++ b/config/sh/sh.c
@@ -14165,6 +14165,12 @@ sh_recog_treg_set_expr (rtx op, machine_mode mode)
if (!can_create_pseudo_p ())
return false;
+ /* expand_debug_locations may call this to compute rtx costs at
+ very early stage. In that case, don't make new insns here to
+ avoid codegen differences with -g. */
+ if (currently_expanding_to_rtl)
+ return false;
+
/* We are going to invoke recog in a re-entrant way and thus
have to capture its current state and restore it afterwards. */
recog_data_d prev_recog_data = recog_data;
More information about the Gcc-bugs
mailing list