gimple-fold: Recompute ADDR_EXPR flags after folding a TMR [PR98268]
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 31 Mar 2021 18:34:01 +0000 (19:34 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Wed, 31 Mar 2021 18:34:01 +0000 (19:34 +0100)
commitc778968339afd140380a46edbade054667c7dce2
treee6d75a82dea4daa295a0fb3d5821df7bb876c42d
parentb5c7accfb56a7347008f629be4c7344dd849b1b1
gimple-fold: Recompute ADDR_EXPR flags after folding a TMR [PR98268]

The gimple verifier picked up that an ADDR_EXPR of a MEM_REF was not
marked TREE_CONSTANT even though the address was in fact invariant.
This came from folding a &TARGET_MEM_REF with constant operands to
a &MEM_REF; &TARGET_MEM_REF is never treated as TREE_CONSTANT
but &MEM_REF can be.

gcc/
PR tree-optimization/98268
* gimple-fold.c (maybe_canonicalize_mem_ref_addr): Call
recompute_tree_invariant_for_addr_expr after successfully
folding a TARGET_MEM_REF that occurs inside an ADDR_EXPR.

gcc/testsuite/
PR tree-optimization/98268
* gcc.target/aarch64/sve/pr98268-1.c: New test.
* gcc.target/aarch64/sve/pr98268-2.c: Likewise.
gcc/gimple-fold.c
gcc/testsuite/gcc.target/aarch64/sve/pr98268-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/pr98268-2.c [new file with mode: 0644]