On Wed, Jan 29, 2025 at 06:46:30PM +0000, Richard Sandiford wrote:
> As Andrew says in the bugzilla comments, this PR is about a case where
> we tried to fuse two stores of x0, one in which x0 was defined and one
> in which it was undefined.  merge_access_arrays failed on the conflict,
> but the failure wasn't caught.
> 
> Normally the hazard detection code would fail if the instructions
> had incompatible uses.  However, an undefined use doesn't impose
> many restrictions on movements.  I think this is likely to be the
> only case where hazard detection isn't enough.
> 
> As Andrew notes in bugzilla, it might be possible to allow uses
> of defined and undefined values to be merged to the defined value.
> But that sounds dangerous in the general case, as an rtl-ssa-level
> decision.  We might run the risk of turning conditional UB into
> unconditional UB.  And LLVM proves that the definition of "undef"
> isn't simple.
> 
> Tested on aarch64-linux-gnu.  OK to install?
> 
> Richard
> 
> 
> gcc/
>       PR rtl-optimization/118320
>       * pair-fusion.cc (pair_fusion_bb_info::fuse_pair): Commonize
>       the merge of input_uses and return early if it fails.
> 
> gcc/testsuite/
>       PR rtl-optimization/118320
>       * g++.dg/torture/pr118320.C: New test.

Ok.

        Jakub

Reply via email to