[Bug target/102239] powerpc suboptimal boolean test of contiguous bits

segher at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Sep 9 19:40:54 GMT 2021


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

Segher Boessenkool <segher at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-09-09
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Confirmed.

So the relevant insn

(parallel [(set (reg:CC 123)
                (compare:CC (and:DI (reg:DI 124)
                                    (const_int 25769803776 [0x600000000]))
                            (const_int 0 [0])))
           (clobber (scratch:DI))])

is matched by *and<mode>3_2insn but not by any pattern that ends up as just
one insn.  Not *and<mode>3_mask_dot, because that doesn't do a shift first,
is just an AND and there are no machine insns to do that; but there is no
pattern for what we can do.

*rotl<mode>3_mask_dot cannot do this either; the base and the dot2 of that
cannot be done, they return a shifted result, but that doesn't matter for
comparing it to 0.  So we should add a specialised version.


More information about the Gcc-bugs mailing list