https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102356
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |x86_64-*-* Last reconfirmed| |2021-09-16 Status|UNCONFIRMED |NEW Component|c |rtl-optimization Summary|compile-time explosion at |compile-time explosion at |-O3 |-O3 -g in var-tracking Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. We hang in #0 0x000000000109ceeb in HONOR_NANS (m=E_SImode) at ../../src/gcc-11-branch/gcc/real.c:5436 #1 0x00000000011529b2 in simplify_context::simplify_binary_operation_1 ( this=0x7fffffffce4c, code=MULT, mode=E_SImode, op0=0x7ffff671f740, op1=0x7ffff66e0cc0, trueop0=0x7ffff671f740, trueop1=0x7ffff66e0cc0) at ../../src/gcc-11-branch/gcc/simplify-rtx.c:3043 #2 0x000000000114fbf5 in simplify_context::simplify_binary_operation ( this=0x7fffffffce4c, code=MULT, mode=E_SImode, op0=0x7ffff671f740, op1=0x7ffff66e0cc0) at ../../src/gcc-11-branch/gcc/simplify-rtx.c:2423 #3 0x000000000114f312 in simplify_context::simplify_associative_operation ( this=0x7fffffffce4c, code=MULT, mode=E_SImode, op0=0x7ffff63e6768, op1=0x7ffff66e0cc0) at ../../src/gcc-11-branch/gcc/simplify-rtx.c:2154 #4 0x0000000001152ede in simplify_context::simplify_binary_operation_1 ( this=0x7fffffffce4c, code=MULT, mode=E_SImode, op0=0x7ffff63e6768, op1=0x7ffff66e0cc0, trueop0=0x7ffff63e6768, trueop1=0x7ffff66e0cc0) at ../../src/gcc-11-branch/gcc/simplify-rtx.c:3101 ... #2678 0x0000000000cd0e36 in simplify_binary_operation (code=MULT, mode=E_SImode, op0=0x7ffff63b0030, op1=0x7ffff63b0030) at ../../src/gcc-11-branch/gcc/rtl.h:3457 #2679 0x0000000001166284 in simplify_rtx (x=0x7ffff63b0090) at ../../src/gcc-11-branch/gcc/simplify-rtx.c:7431 #2680 0x0000000000c17b3d in cselib_expand_value_rtx_1 (orig=0x7ffff67290f0, evd=0x7fffffffcf80, max_depth=2147483647) at ../../src/gcc-11-branch/gcc/cselib.c:2025 #2681 0x0000000000c171b5 in cselib_expand_value_rtx_cb (orig=0x7ffff67290f0, regs_active=0x32c1470, max_depth=2147483647, cb=0x15433ec <vt_expand_loc_callback(rtx, bitmap, int, void*)>, data=0x7fffffffd2c0) at ../../src/gcc-11-branch/gcc/cselib.c:1732 #2682 0x0000000001543222 in vt_expand_var_loc_chain (var=0x3493748, regs=0x32c1470, data=0x7fffffffd2c0, pendrecp=0x7fffffffd087) at ../../src/gcc-11-branch/gcc/var-tracking.c:8421 #2683 0x0000000001543623 in vt_expand_loc_callback (x=0x33e6128, regs=0x32c1470, max_depth=2147483647, data=0x7fffffffd2c0) at ../../src/gcc-11-branch/gcc/var-tracking.c:8584 #2684 0x0000000000c1765e in cselib_expand_value_rtx_1 (orig=0x33e6128, evd=0x7fffffffd1c0, max_depth=2147483647) at ../../src/gcc-11-branch/gcc/cselib.c:1885 #2685 0x0000000000c171b5 in cselib_expand_value_rtx_cb (orig=0x33e6128, --Type <RET> for more, q to quit, c to continue without paging-- regs_active=0x32c1470, max_depth=2147483647, cb=0x15433ec <vt_expand_loc_callback(rtx, bitmap, int, void*)>, data=0x7fffffffd2c0) at ../../src/gcc-11-branch/gcc/cselib.c:1732 #2686 0x0000000001543222 in vt_expand_var_loc_chain (var=0x3493680, regs=0x32c1470, data=0x7fffffffd2c0, pendrecp=0x0) at ../../src/gcc-11-branch/gcc/var-tracking.c:8421 #2687 0x00000000015438b2 in vt_expand_1pvar (var=0x3493680, vars=0x34bc6f0) at ../../src/gcc-11-branch/gcc/var-tracking.c:8697 #2688 0x0000000001543b2a in emit_note_insn_var_location (varp=0x342e100, data=0x7fffffffd650) at ../../src/gcc-11-branch/gcc/var-tracking.c:8751 #2689 0x000000000154b4af in hash_table<variable_hasher, false, xcallocator>::traverse_noresize<emit_note_data*, &(emit_note_insn_var_location(variable**, emit_note_data*))> (this=0x3431620, argument=0x7fffffffd650) at ../../src/gcc-11-branch/gcc/hash-table.h:1081 #2690 0x0000000001549f2f in hash_table<variable_hasher, false, xcallocator>::traverse<emit_note_data*, &(emit_note_insn_var_location(variable**, emit_note_data*))> (this=0x3431620, argument=0x7fffffffd650) at ../../src/gcc-11-branch/gcc/hash-table.h:1102 #2691 0x0000000001544e40 in emit_notes_for_changes (insn=0x7ffff670cb00, where=EMIT_NOTE_BEFORE_INSN, vars=0x328d7b0) at ../../src/gcc-11-branch/gcc/var-tracking.c:9111 #2692 0x0000000001545d18 in emit_notes_in_bb ( bb=<basic_block 0x7ffff66f4340 (11)>, set=0x7fffffffd7b0) --Type <RET> for more, q to quit, c to continue without paging-- at ../../src/gcc-11-branch/gcc/var-tracking.c:9483 #2693 0x00000000015461ae in vt_emit_notes () at ../../src/gcc-11-branch/gcc/var-tracking.c:9604 #2694 0x0000000001548814 in variable_tracking_main_1 () at ../../src/gcc-11-branch/gcc/var-tracking.c:10552 #2695 0x000000000154884a in variable_tracking_main () at ../../src/gcc-11-branch/gcc/var-tracking.c:10566 #2696 0x00000000015488d7 in (anonymous namespace)::pass_variable_tracking::execute (this=0x326d380) at ../../src/gcc-11-branch/gcc/var-tracking.c:10603 #2697 0x000000000105944a in execute_one_pass ( pass=<opt_pass* 0x326d380 "vartrack"(325)>) at ../../src/gcc-11-branch/gcc/passes.c:2567 and at the toplevel we simplify a _very_ _very_ deep recursive RTX. We're passing in /* This is the value used during expansion of locations. We want it to be unbounded, so that variables expanded deep in a recursion nest are fully evaluated, so that their values are cached correctly. We avoid recursion cycles through other means, and we don't unshare RTL, so excess complexity is not a problem. */ #define EXPR_DEPTH (INT_MAX) which might be the problem. The debug_insns themselves are nicely flat but the testcase results in movzbl uc_9(%rip), %eax imull %edi, %eax imull %eax, %eax testl %eax, %eax je .L20 imull %eax, %eax testl %eax, %eax je .L21 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L37 imull %eax, %eax testl %eax, %eax je .L11 imull %eax, %eax testl %eax, %eax je .L11 imull %eax, %eax testl %eax, %eax je .L11 imull %eax, %eax testl %eax, %eax je .L11 imull %eax, %eax testl %eax, %eax je .L53 where we might be tempted to pick up the whole x*x*x*x*x... chain N times.