[Bug target/112573] Suboptimal code generation with `-fdata-sections` on aarch64

wilco at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Nov 20 19:28:15 GMT 2023


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

Wilco <wilco at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2023-11-20
     Ever confirmed|0                           |1
                 CC|                            |wilco at gcc dot gnu.org
             Status|UNCONFIRMED                 |NEW

--- Comment #3 from Wilco <wilco at gcc dot gnu.org> ---
We should reassociate the immediate last for more optimal addressing like LLVM:

        adrp    x8, a
        add     x8, x8, :lo12:a
        lsr     w9, w0, #8
        add     x8, x8, w1, sxtw
        strb    w9, [x8, #1]
        lsr     w9, w0, #16
        strb    w0, [x8, #3]
        strb    w9, [x8, #2]
        lsr     w9, w0, #24
        strb    w9, [x8]
        ret

However GCC's reassociation is incorrect - it has been for many years and
things got much worse in GCC12...

As a result we may merge the immediate offset into the base address like in
'h'. Using -fdata-sections behaves like -fno-section-anchors, so it works as
expected (and 'extern' is the same as well). We could block merging offsets to
get more address CSEs if that ends up better overall.


More information about the Gcc-bugs mailing list