middle-end/114734 - wrong code with expand_call_mem_ref

Message ID 20240426135030.020A5136DB@imap1.dmz-prg2.suse.org
State New
Headers
Series middle-end/114734 - wrong code with expand_call_mem_ref |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 fail Patch failed to apply

Commit Message

Richard Biener April 26, 2024, 1:50 p.m. UTC
  When expand_call_mem_ref looks at the definition of the address
argument to eventually expand a &TARGET_MEM_REF argument together
with a masked load it fails to honor constraints imposed by SSA
coalescing decisions.  The following fixes this.

Boostrap and regtest running on x86_64-unknown-linux-gnu.

 	PR middle-end/114734
 	* internal-fn.cc (expand_call_mem_ref): Use
 	get_gimple_for_ssa_name to get at the def stmt of the address
 	argument to honor SSA coalescing constraints.
---
  gcc/internal-fn.cc | 6 ++++--
  1 file changed, 4 insertions(+), 2 deletions(-)
  

Patch

diff --git a/gcc/internal-fn.cc b/gcc/internal-fn.cc
index 2c764441cde..0a7053c2286 100644
--- a/gcc/internal-fn.cc
+++ b/gcc/internal-fn.cc
@@ -53,6 +53,8 @@  along with GCC; see the file COPYING3.  If not see
  #include "rtl-iter.h"
  #include "gimple-range.h"
  #include "fold-const-call.h"
+#include "tree-ssa-live.h"
+#include "tree-outof-ssa.h"

  /* For lang_hooks.types.type_for_mode.  */
  #include "langhooks.h"
@@ -2964,8 +2966,8 @@  expand_call_mem_ref (tree type, gcall *stmt, int index)
    tree tmp = addr;
    if (TREE_CODE (tmp) == SSA_NAME)
      {
-      gimple *def = SSA_NAME_DEF_STMT (tmp);
-      if (gimple_assign_single_p (def))
+      gimple *def = get_gimple_for_ssa_name (tmp);
+      if (def && gimple_assign_single_p (def))
  	tmp = gimple_assign_rhs1 (def);
      }