I think PATCH[2/5],  PATCH[3/5], PATCH[5/5] are fine to continue with.

On Fri, 7 Aug 2026 at 16:32, Richard Earnshaw <[email protected]>
wrote:

> On 13/07/2026 11:22, Richard Earnshaw wrote:
> > On 12/07/2026 00:07, Dominic P wrote:
> >> store_fixed_bit_field_1 implements a bit-field store as a read-modify-
> >> write: it reads the destination storage unit into a register, masks out
> >> the field's bits and ors in the new value, then writes it back.  When
> the
> >> field occupies the whole unit there are no surrounding bits to preserve,
> >> yet the read is still emitted.  For a non-volatile destination the read
> is
> >> dead and later removed, but a volatile read cannot be removed and
> survives
> >> as a spurious extra memory access.
> >>
> >> On a strict-alignment target a misaligned volatile store is decomposed
> >> into per-unit stores, so e.g.
> >>
> >>    struct __attribute__((packed)) {
> >>      unsigned char pad; volatile unsigned v;
> >>    } *p;
> >>    p->v = x;
> >>
> >> emits a dead volatile load before every byte/half-word store of the
> value.
> >> For a memory-mapped I/O register with read side effects (read-to-clear,
> >> FIFO pop, W1C) this is a wrong-code bug.
> >>
> >> When OP0 is in memory and the store fills the whole unit, store VALUE
> >> directly with no read.  This is deliberately restricted to memory: for a
> >> register destination the read-modify-write is how a lowpart insertion is
> >> expressed, which a target may match with a dedicated pattern (e.g. x86
> >> bswaphisi2_lowpart), and the redundant read is eliminated later anyway.
> >>
> >> Genuine volatile bit-fields are unaffected.  Under
> >> -fstrict-volatile-bitfields (the Arm default) a bit-field that fills its
> >> container is written through the container-width access path in
> >> store_bit_field_1 and never reaches this code, so it already stores once
> >> with no read.  This was verified to give byte-identical output for byte,
> >> half-word and word volatile bit-fields, both aligned and in a packed
> >> struct, with and without -fstrict-volatile-bitfields.  The only stores
> >> this shortcut changes are the decomposed per-unit writes of a misaligned
> >> volatile scalar -- the motivating case -- which are not bit-fields and
> >> carry no container-access contract.
> >>
> >> The fix is size-neutral -- it removes only the dead volatile read a rare
> >> whole-unit volatile bit-field store would emit.  On five freestanding /
> >> bare-metal code bases at -O2, .text over the translation units that
> build
> >> with both an unpatched and a patched compiler:
> >>
> >>    Linux kernel (arch/arm)        408 TUs   2,696,101 B       -28
> (-0.001%)
> >>    SQLite amalgamation (arm1176)    1 TUs     853,260 B       -48
> (-0.006%)
> >>    Pico SDK (Cortex-M0+)           74 TUs      62,682 B        +0
> (+0.000%)
> >>    Circle (arm1176, C++)           77 TUs     140,537 B       -12
> (-0.009%)
> >>    PiTubeDirect (arm1176)          88 TUs     966,021 B       -20
> (-0.002%)
> >>
> >> Bootstrapped and regression-tested on x86_64-pc-linux-gnu with no new
> >> failures (this is a generic expmed.cc change); also cross-tested on
> >> arm-none-eabi, where gcc.target/arm (arm.exp) is unchanged against
> master
> >> and the gcc.c-torture execute suite gives identical results under QEMU
> >> between an unpatched and a patched compiler.  The new test
> >> gcc.target/arm/pr71048.c passes.
> >>
> >> gcc/ChangeLog:
> >>
> >>     PR middle-end/71048
> >>     * expmed.cc (store_fixed_bit_field_1): When OP0 is a memory
> >>     reference that the field fills entirely, store VALUE directly
> >>     instead of doing a read-modify-write, so that no read of OP0 is
> >>     emitted.
> >>
> >> gcc/testsuite/ChangeLog:
> >>
> >>     * gcc.target/arm/pr71048.c: New test.
> >>     * gcc.dg/torture/pr71048-1.c: New test.
> >>
> >> Signed-off-by: Dominic P <[email protected]>
> >> ---
> >>
> >> This patch was prepared with the assistance of an AI coding tool.
> Every line of
> >> code, every test and every measurement was written, reviewed and
> verified by the
> >> author, who takes responsibility for the patch; the Signed-off-by above
> certifies
> >> the Developer Certificate of Origin.
> >
> > Hi Dominic,
> >
> > This reply applies to all of your recent patches.
> >
> > The GCC Steering Committee is currently discussing how they wish to
> handle contributions generated with AI assistance.  Until that is complete,
> I don't think we can process these patches.
> >
>
> Dominic,
>
> The AI policy has now been published: https://gcc.gnu.org/ai-policy.html
>
> Are your patches in compliance with that and still suitable for inclusion
> in GCC?
>
> R.
>
>

Reply via email to