[Bug bootstrap/51860] [4.7 regression] s390 esa mode bootstrap comparison failure since transactional memory branch merge
krebbel at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jan 16 09:27:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51860
--- Comment #7 from Andreas Krebbel <krebbel at gcc dot gnu.org> 2012-01-16 08:23:56 UTC ---
Regarding the insn address the split is supposed to happen after the call_insn
3059.
But the code I've added to keep the call_arg_location note after the call insn
prevents that:
/* Make sure we do not split between a call and its
corresponding CALL_ARG_LOCATION note. */
if (CALL_P (insn))
{
rtx next = NEXT_INSN (insn);
if (next && NOTE_P (next)
&& NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
continue;
}
Then the split should occur just after the call_arg_location note but that code
prevents that:
/* We can insert the barrier only after a 'real' insn. */
if (GET_CODE (insn) != INSN && GET_CODE (insn) != CALL_INSN)
continue;
So the split in fact occurs after the next real insn which is the load zero.
(call_insn 3059 39956 39958 (parallel [
(set (reg:SI 2 %r2)
(call (mem:QI (reg/f:SI 11 %r11 [15205]) [0
identifier_global_value S1 A8])
(const_int 0 [0])))
(clobber (reg:SI 14 %r14))
]) /build/gcc-head/gcc/c-family/c-common.c:5045 576 {*basr_r}
(nil)
(expr_list:REG_CFA_RESTORE (use (reg:SI 2 %r2))
(nil)))
(note 39958 3059 37799 (nil) NOTE_INSN_CALL_ARG_LOCATION)
(insn 37799 39958 44088 (set (reg:SI 1 %r1 [5752])
(const_int 0 [0])) /build/gcc-head/gcc/c-family/c-common.c:5045 67
{*movsi_esa}
(nil))
(jump_insn 44088 37799 44089 (set (pc)
(label_ref 44090)) /build/gcc-head/gcc/c-family/c-common.c:5045 561
{*jump31}
(nil)
More information about the Gcc-bugs
mailing list