https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108463
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Ah, the difference is that in the -g0 case, value 3:3946 has 2 locs still at the true_dependence spot of 1204 vs. 1116 instructions, one (reg/f:DI 7 sp) like in the -g case, but also (plus:DI (value/c:DI 2:2 @0x39559d8/0x39359d0) (const_int -384 [0xfffffffffffffe80])) which is what makes it through the r10-7515 logic map back to 2:2 + optional offset based address. In the -g case it is there initially too, but removed in: #0 unchain_one_elt_loc_list (pl=0x3968820) at ../../gcc/cselib.cc:427 #1 0x00000000006dc6e9 in discard_useless_locs (x=0x39e24b8, info=0x0) at ../../gcc/cselib.cc:675 #2 0x00000000006e5624 in hash_table<cselib_hasher, false, xcallocator>::traverse_noresize<void*, &(discard_useless_locs(cselib_val**, void*))> (this=0x38edbc0, argument=0x0) at ../../gcc/hash-table.h:1173 #3 0x00000000006e4749 in hash_table<cselib_hasher, false, xcallocator>::traverse<void*, &(discard_useless_locs(cselib_val**, void*))> (this=0x38edbc0, argument=0x0) at ../../gcc/hash-table.h:1194 #4 0x00000000006dc83f in remove_useless_values () at ../../gcc/cselib.cc:725 #5 0x00000000006e353c in cselib_process_insn (insn=0x7fffea3272c0) at ../../gcc/cselib.cc:3195 #6 0x0000000002617521 in deps_analyze_insn (deps=0x7fffffffd890, insn=0x7fffea3272c0) at ../../gcc/sched-deps.cc:3801 #7 0x00000000026177b2 in sched_analyze (deps=0x7fffffffd890, head=0x7fffe9f3e440, tail=0x7fffea31bf30) at ../../gcc/sched-deps.cc:3858 #8 0x000000000261ba36 in schedule_ebb (head=0x7fffe9f3e440, tail=0x7fffea31bf30, modulo_scheduling=false) at ../../gcc/sched-ebb.cc:505 #9 0x000000000261bf02 in schedule_ebbs () at ../../gcc/sched-ebb.cc:655 when processing insn 1116. Now, remove_useless_values is guarded: 3189 if (n_useless_values > MAX_USELESS_VALUES 3190 /* remove_useless_values is linear in the hash table size. Avoid 3191 quadratic behavior for very large hashtables with very few 3192 useless elements. */ 3193 && ((unsigned int)n_useless_values 3194 > (cselib_hash_table->elements () - n_debug_values) / 4)) 3195 remove_useless_values (); On that particular insn 1116, I see: -g0 -g n_useless_values 30 33 cselib_hash_table->elements () 113 147 n_debug_values 0 31 #define MAX_USELESS_VALUES 32 147 - 31 is 116, so even that one is 3 larger than in the -g0 case.