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

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
I can't confirm a regression (testing r14-8925-g1e3f78dbb328a2 with the
offending rev reverted vs bare).

462.libquantum  20720       61.9        335 S   20720       62.6        331 *
462.libquantum  20720       62.2        333 *   20720       61.9        335 S
462.libquantum  20720       62.4        332 S   20720       62.7        330 S

so the "best" run with the change is faster than the best run with it reverted
while the worst runs are the same.

There's only code-gen changes in quantum_bmeasure.part.0 and we can see
it's likely

{component_ref<node>,mem_ref<0B>,reg_3(D)}@.MEM_166 (0030)

vs

{component_ref<hash>,mem_ref<0B>,reg_3(D)}@.MEM_9 (0022)

where once the size is 256 and once 64.  The types are

 <record_type 0x7ffff6a753f0 quantum_reg BLK
    size <integer_cst 0x7ffff6c29138 type <integer_type 0x7ffff6c250a8
bitsizetype> constant 256>
    unit-size <integer_cst 0x7ffff6c29228 type <integer_type 0x7ffff6c25000
sizetype> constant 32>

vs.

 <pointer_type 0x7ffff6a813f0
    type <record_type 0x7ffff6a81348 quantum_reg_node TI
        size <integer_cst 0x7ffff6c0be10 constant 128>
        unit-size <integer_cst 0x7ffff6c0be28 constant 16>

the former is subsetted by a COMPONENT_REF to eventually

 <pointer_type 0x7ffff6e752a0
    type <record_type 0x7ffff6e751f8 quantum_reg_node VOID
        align:8 warn_if_not_align:0 symtab:0 alias-set -1 structural-equality
        pointer_to_this <pointer_type 0x7ffff6e752a0>>
    unsigned DI

so we have basically MEM<ptr + off> vs. MEM<ptr>.member-with-off.

That's indeed a case where we maybe like to avoid applying this fix, but
maybe only when strict-aliasing is in effect.

Reply via email to