aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-03-31 08:20:43 +0200
committerRichard Biener <rguenther@suse.de>2022-03-31 09:18:42 +0200
commitb75f996e846d079251f3a6134617f0405c3ed535 (patch)
tree43ba939a6adf42a6a7b6a55526cffee008dda79b
parentb8207ad367174df5f2e2fdf3305c97ed227d8f78 (diff)
downloadgcc-b75f996e846d079251f3a6134617f0405c3ed535.zip
gcc-b75f996e846d079251f3a6134617f0405c3ed535.tar.gz
gcc-b75f996e846d079251f3a6134617f0405c3ed535.tar.bz2
rtl-optimization/105091 - wrong DSE with missed TREE_ADDRESSABLE
When expanding an aggregate copy into a memcpy call RTL expansion uses mark_addressable to ensure the base object is addressable but that function doesn't handle TARGET_MEM_REF bases. Fixed as follows. 2022-03-31 Richard Biener <rguenther@suse.de> PR rtl-optimization/105091 * gimple-expr.cc (mark_addressable): Handle TARGET_MEM_REF bases.
-rw-r--r--gcc/gimple-expr.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/gimple-expr.cc b/gcc/gimple-expr.cc
index f9a650b..5faaf43 100644
--- a/gcc/gimple-expr.cc
+++ b/gcc/gimple-expr.cc
@@ -910,7 +910,8 @@ mark_addressable (tree x)
x = TREE_OPERAND (x, 0);
while (handled_component_p (x))
x = TREE_OPERAND (x, 0);
- if (TREE_CODE (x) == MEM_REF
+ if ((TREE_CODE (x) == MEM_REF
+ || TREE_CODE (x) == TARGET_MEM_REF)
&& TREE_CODE (TREE_OPERAND (x, 0)) == ADDR_EXPR)
x = TREE_OPERAND (TREE_OPERAND (x, 0), 0);
if (!VAR_P (x)