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...

Reply via email to