[Bug tree-optimization/71916] [6/7 Regression] ICE at -O3 on valid code on x86_64-linux-gnu in "maybe_record_trace_start"
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jul 19 14:39:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71916
--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
This looks like a bug in handling of __builtin_unreachable (in RTL basic blocks
without successors) during cross-jumping in jump2 pass.
In *.csa there are 2 such basic blocks in the IL, but in *.jump2 only one.
The __builtin_unreachable blocks are bb 34 and bb 39, and we have 4 bbs that
contain d = 0 memory store following to branch to one of these basic blocks
(two to bb 34, two to bb 39). Cross-jumping the d = 0 bbs that branch to the
same empty block with no successors is of course fine, the problem is with
cross-jumping the ones that branch to different empty blocks with no
successors.
For noreturn calls which is a similar case, we avoid this with
/* For noreturn calls when not accumulating outgoing args force
REG_ARGS_SIZE note to prevent crossjumping of calls with different
args sizes. */
else if (!ACCUMULATE_OUTGOING_ARGS && (ecf_flags & ECF_NORETURN) != 0)
add_reg_note (call_insn, REG_ARGS_SIZE, GEN_INT (stack_pointer_delta));
but of course for the multiple __builtin_unreachable () cases there is no
instruction to stick the REG_ARGS_SIZE to.
More information about the Gcc-bugs
mailing list