rtl-optimization/105091 - wrong DSE with missed TREE_ADDRESSABLE
authorRichard Biener <rguenther@suse.de>
Thu, 31 Mar 2022 06:20:43 +0000 (08:20 +0200)
committerRichard Biener <rguenther@suse.de>
Thu, 31 Mar 2022 07:18:42 +0000 (09:18 +0200)
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.

gcc/gimple-expr.cc

index f9a650b..5faaf43 100644 (file)
@@ -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)