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

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I think the bug is visible in -fdump-rtl-expand-details dump:
Partition 2: size 40 align 16
        c
Partition 1: size 8 align 8
        b
Partition 0: size 4 align 4
        a_1
Partition 3: size 4 align 8
        d
Flushing rzbuffer at offset -160 with: f1 f1 f1 f1
Flushing rzbuffer at offset -128 with: 04 f2 00 00
Flushing rzbuffer at offset -128 with: 00 00 00 f2
Flushing rzbuffer at offset -96 with: f2 f2 00 00
Flushing rzbuffer at offset -64 with: 00 00 00 f3
Flushing rzbuffer at offset -32 with: f3 f3 f3 f3

There is a wrong flush such that the store of what I think should be
04 f2 00 f2 is done in 2 separate overlapping stores.
Because the first var is just 4 bytes, after f1 f1 f1 f1 there should be
04 to indicate that only first 4 bytes of the 8 are valid, then f2 for the
inter-var gap, then 00 for the 8 byte b variable, then 3 f2 bytes for 24 bytes
of gap and then 5 00 bytes for 40 bytes of c and then f3s till end of the
frame.

Reply via email to