[Bug rtl-optimization/77499] [7 Regression] Regression after code-hoisting, due to combine pass failing to evaluate known value range

avieira at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Sep 8 08:43:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77499

--- Comment #11 from avieira at gcc dot gnu.org ---
(In reply to Segher Boessenkool from comment #10)
> That is what nonzero_bits etc. is about.  We could do much better nowadays
> with the generic DF framework.
> 
I am not familiar with the generic DF framework, could you point me to it?


> Is code hoisting making the code better at all here?  (At RTL level)

Not as is, but I was hoping that if the zero_extend gets removed, we could end
up with:

        movw    r6, #45345
.L4:
        smull   r5, r4, r7, r1
        lsrs    r0, r0, #1
        sub     r4, r4, r1, asr #31
-        eor     r5, r0, r6
        add     r4, r4, r4, lsl #1
        cmp     r1, r4
        sub     r1, r1, r3
        it      ne
-        uxthne  r0, r5
+        eorne     r0, r0, r6
        cmp     r2, r1
        blt     .L4

So compared to the no-code-hoisting case it would realize it needs to do the
same shift in both cases and only do it once.


More information about the Gcc-bugs mailing list