https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66312
--- Comment #20 from Oleg Endo <olegendo at gcc dot gnu.org> --- (In reply to John Paul Adrian Glaubitz from comment #12) > Created attachment 36224 [details] > Stage 3 compiled version of ctfeexpr.dmd.o (unstripped) (In reply to John Paul Adrian Glaubitz from comment #11) > Created attachment 36223 [details] > Stage 2 compiled version of ctfeexpr.dmd.o (unstripped) I could spot only one difference: stage2: cmp/pz r1 // T = r1 >= 0 stage3: not r1,r0 shll r0 // T = ~r0 >> 31 Both versions are functionally equivalent. The increase from 1 insn to 2 insns then seems to cause other differences, which are mainly only offsets. Sometimes register allocation could also be affected. The question is why this is happening...