[Bug target/71153] aarch64 LSE __atomic_fetch_and() generates inversion for constants

ktkachov at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue May 17 14:01:00 GMT 2016


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

--- Comment #5 from ktkachov at gcc dot gnu.org ---
In the foo_clear_bit_unlock case combine tries to match:
(parallel [
        (set (mem/v:DI (reg:DI 88) [-1  S8 A64])
            (unspec_volatile:DI [
                    (and:DI (not:DI (reg:DI 85 [ mask ]))
                        (mem/v:DI (reg:DI 88) [-1  S8 A64]))
                    (const_int 3 [0x3])
                ] UNSPECV_ATOMIC_OP))
        (clobber (scratch:DI))
    ])

which are exactly the semantics of ldclrl but our patterns don't match that


More information about the Gcc-bugs mailing list