https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113597
--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
In DSE the only differences is
fbt (0x7ffff51a1a50: (plus:DI (reg/v/f:DI 117 [ u ])
- (reg:DI 146 [ _44 ]))) == (address 0)
+ (reg:DI 146 [ _44 ]))) == (nil)
fbt (0x7ffff700b3c0: (reg/f:DI 64 sfp)) == (address:DI -3)
-bac false
+bac true
that's for
(mem:BLK (reg/f:DI 64 sfp) [0 A8])
vs
(mem:V4SF (plus:DI (reg/v/f:DI 117 [ u ])
(reg:DI 146 [ _44 ])) [0 MEM <__Float32x4_t> [(float * {ref-all})_42]+0
S16 A32])
from
#0 0x0000000002ff3796 in scan_reads (insn_info=0x5e5b680, gen=0x5ec2338,
kill=0x5ec2358) at /space/rguenther/src/gcc/gcc/dse.cc:3156
#1 0x0000000002ff39b1 in dse_step3_scan (bb=<basic_block 0x7ffff5160060 (5)>)
at /space/rguenther/src/gcc/gcc/dse.cc:3238
processing
(insn 62 61 64 5 (set (reg:V4SF 147 [ MEM <__Float32x4_t> [(float *
{ref-all})_42] ])
(mem:V4SF (plus:DI (reg/v/f:DI 117 [ u ])
(reg:DI 146 [ _44 ])) [0 MEM <__Float32x4_t> [(float *
{ref-all})_42]+0 S16 A32])) "include/arm_neon.h":12531:36 1274
{*aarch64_simd_movv4sf}
(expr_list:REG_DEAD (reg:DI 146 [ _44 ])
(nil)))
in this case we have _44 point to NONLOCAL only. It got arg_base_value
as base value (from the MEM_EXPR and that points-to set we could
eventually derive this very same base term as well).
But I'll note that (mem:BLK (reg/f:DI 64 sfp) [0 A8]) is artificial,
generated by DSE get_group_info via record_store on
(insn 13 12 14 2 (set (mem/c:V2x16QI (reg/f:DI 119) [0 +0 S32 A128])
(unspec:V2x16QI [
(reg:V16QI 121) repeated x2
] UNSPEC_STP)) "t.cc":12:10 discrim 1 92 {*store_pair_16}
(nil))
which is figured to be const_or_frame_p () based. That notably
lacks a MEM_EXPR (though the bare MEM means only base_alias_check would
ever be able to disambiguate here).