From: Richard Biener Date: Thu, 31 Mar 2022 06:20:43 +0000 (+0200) Subject: rtl-optimization/105091 - wrong DSE with missed TREE_ADDRESSABLE X-Git-Tag: basepoints/gcc-13~381 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b75f996e846d079251f3a6134617f0405c3ed535;p=thirdparty%2Fgcc.git 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 PR rtl-optimization/105091 * gimple-expr.cc (mark_addressable): Handle TARGET_MEM_REF bases. --- diff --git a/gcc/gimple-expr.cc b/gcc/gimple-expr.cc index f9a650b5dafb..5faaf43eaf50 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)