public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/vendors/ARM/heads/morello)] Fix more build_fold_addr_expr calls
@ 2022-05-06 14:44 Matthew Malcomson
  0 siblings, 0 replies; only message in thread
From: Matthew Malcomson @ 2022-05-06 14:44 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:36ef2e33c562b26beef4e39afb953c4646883c80

commit 36ef2e33c562b26beef4e39afb953c4646883c80
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Thu Apr 21 13:58:22 2022 +0100

    Fix more build_fold_addr_expr calls
    
    This patch tries proactively to fix other build_fold_addr_expr
    calls that might convert between CAP_ADDR_EXPR and NONCAP_ADDR_EXPR.
    I don't have test cases for any of these, the changes are just
    by inspection.

Diff:
---
 gcc/builtins.c             | 10 +++++-----
 gcc/gimple-fold.c          |  4 ++--
 gcc/gimple-low.c           |  3 ++-
 gcc/tree-affine.c          |  2 +-
 gcc/tree-data-ref.c        |  4 ++--
 gcc/tree-ssa-forwprop.c    |  9 +++++----
 gcc/tree-ssa-loop-ivopts.c |  4 ++--
 gcc/tree-ssa-pre.c         |  2 +-
 gcc/tree-ssa-sccvn.c       |  4 ++--
 gcc/tree.c                 |  3 ++-
 10 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/gcc/builtins.c b/gcc/builtins.c
index aa6307d6e0f..a52982799c2 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -1503,13 +1503,13 @@ get_memory_rtx (tree exp, tree len)
   /* If the MEM_REF has no acceptable address, try to get the base object
      from the original address we got, and build an all-aliasing
      unknown-sized access to that one.  */
-  if (is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
+  tree mem_ref_addr = TREE_OPERAND (exp, 0);
+  if (is_gimple_mem_ref_addr (mem_ref_addr))
     set_mem_attributes (mem, exp, 0);
-  else if (ADDR_EXPR_P (TREE_OPERAND (exp, 0))
-	   && (exp = get_base_address (TREE_OPERAND (TREE_OPERAND (exp, 0),
-						     0))))
+  else if (ADDR_EXPR_P (mem_ref_addr)
+	   && (exp = get_base_address (TREE_OPERAND (mem_ref_addr, 0))))
     {
-      exp = build_fold_addr_expr (exp);
+      exp = build_fold_addr_expr (TREE_CODE (mem_ref_addr), exp);
       exp = fold_build2 (MEM_REF,
 			 build_array_type (char_type_node,
 					   build_range_type (sizetype,
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 5a57fcd97f4..80a1f217fb9 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -256,7 +256,7 @@ canonicalize_constructor_val (tree cval, tree from_decl)
 	}
       /* Fixup types in global initializers.  */
       if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
-	cval = build_fold_addr_expr (TREE_OPERAND (cval, 0));
+	cval = build_fold_addr_expr (TREE_CODE (cval), TREE_OPERAND (cval, 0));
 
       if (!useless_type_conversion_p (TREE_TYPE (orig_cval), TREE_TYPE (cval)))
 	cval = fold_convert (TREE_TYPE (orig_cval), cval);
@@ -4959,7 +4959,7 @@ maybe_canonicalize_mem_ref_addr (tree *t, bool is_debug = false)
 	      gcc_unreachable ();
 	    }
 
-	  TREE_OPERAND (*t, 0) = build_fold_addr_expr (base);
+	  TREE_OPERAND (*t, 0) = build_fold_addr_expr (TREE_CODE (addr), base);
 	  TREE_OPERAND (*t, 1) = maybe_cap_int_const_binop (PLUS_EXPR,
 							   TREE_OPERAND (*t, 1),
 							   size_int (coffset));
diff --git a/gcc/gimple-low.c b/gcc/gimple-low.c
index ba34884f1ac..da82821820f 100644
--- a/gcc/gimple-low.c
+++ b/gcc/gimple-low.c
@@ -879,9 +879,10 @@ lower_builtin_posix_memalign (gimple_stmt_iterator *gsi)
   tree ptr = create_tmp_reg (ptr_type_node);
   if (ADDR_EXPR_P (pptr))
     {
+      tree_code addr_expr = TREE_CODE (pptr);
       tree tem = create_tmp_var (ptr_type_node);
       TREE_ADDRESSABLE (tem) = 1;
-      gimple_call_set_arg (call, 0, build_fold_addr_expr (tem));
+      gimple_call_set_arg (call, 0, build_fold_addr_expr (addr_expr, tem));
       stmt = gimple_build_assign (ptr, tem);
     }
   else
diff --git a/gcc/tree-affine.c b/gcc/tree-affine.c
index c432fd27c43..cab7804f578 100644
--- a/gcc/tree-affine.c
+++ b/gcc/tree-affine.c
@@ -464,7 +464,7 @@ tree_to_aff_combination (tree expr, tree type, aff_tree *comb)
 	  core = TREE_OPERAND (core, 0);
 	}
       else
-	core = build_fold_addr_expr (core);
+	core = build_fold_addr_expr (code, core);
 
       if (ADDR_EXPR_P (core))
 	aff_combination_add_elt (comb, core, 1);
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index 4157919a398..54c260e1761 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -653,7 +653,7 @@ split_constant_offset_1 (tree type, tree op0, enum tree_code code, tree op1,
 
 	if (!multiple_p (pbitpos, BITS_PER_UNIT, &pbytepos))
 	  return false;
-	base = build_fold_addr_expr (base);
+	base = build_fold_addr_expr (code, base);
 	off0 = ssize_int (pbytepos);
 
 	if (poffset)
@@ -864,7 +864,7 @@ canonicalize_base_object_address (tree addr)
   if (!ADDR_EXPR_P (addr))
     return addr;
 
-  return build_fold_addr_expr (TREE_OPERAND (addr, 0));
+  return build_fold_addr_expr (TREE_CODE (addr), TREE_OPERAND (addr, 0));
 }
 
 /* Analyze the behavior of memory reference REF within STMT.
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index 893f1626202..6dee66a5322 100644
--- a/gcc/tree-ssa-forwprop.c
+++ b/gcc/tree-ssa-forwprop.c
@@ -672,6 +672,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
 
   gcc_assert (ADDR_EXPR_P (def_rhs));
 
+  tree_code addr_expr = TREE_CODE (def_rhs);
   lhs = gimple_assign_lhs (use_stmt);
   rhs_code = gimple_assign_rhs_code (use_stmt);
   rhs = gimple_assign_rhs1 (use_stmt);
@@ -782,7 +783,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
 	      new_ptr = TREE_OPERAND (def_rhs_base, 0);
 	    }
 	  else
-	    new_ptr = build_fold_addr_expr (def_rhs_base);
+	    new_ptr = build_fold_addr_expr (addr_expr, def_rhs_base);
 	  TREE_OPERAND (lhs, 0) = new_ptr;
 	  TREE_OPERAND (lhs, 1)
 	    = wide_int_to_tree (TREE_TYPE (TREE_OPERAND (lhs, 1)), off);
@@ -819,7 +820,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
 	    }
 	  else
 	    {
-	      new_base = build_fold_addr_expr (*def_rhs_basep);
+	      new_base = build_fold_addr_expr (addr_expr, *def_rhs_basep);
 	      new_offset = TREE_OPERAND (lhs, 1);
 	    }
 	  *def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
@@ -873,7 +874,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
 	      new_ptr = TREE_OPERAND (def_rhs_base, 0);
 	    }
 	  else
-	    new_ptr = build_fold_addr_expr (def_rhs_base);
+	    new_ptr = build_fold_addr_expr (addr_expr, def_rhs_base);
 	  TREE_OPERAND (rhs, 0) = new_ptr;
 	  TREE_OPERAND (rhs, 1)
 	    = wide_int_to_tree (TREE_TYPE (TREE_OPERAND (rhs, 1)), off);
@@ -905,7 +906,7 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
 	    }
 	  else
 	    {
-	      new_base = build_fold_addr_expr (*def_rhs_basep);
+	      new_base = build_fold_addr_expr (addr_expr, *def_rhs_basep);
 	      new_offset = TREE_OPERAND (rhs, 1);
 	    }
 	  *def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index 7ed1c649243..2e6323a3c79 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -1101,7 +1101,7 @@ determine_base_object_1 (tree *tp, int *walk_subtrees, void *wdata)
       if (!base)
 	obj = *tp;
       else if (TREE_CODE (base) != MEM_REF)
-	obj = fold_convert (ptr_type_node, build_fold_addr_expr (base));
+	obj = fold_convert (ptr_type_node, build_fold_addr_expr (code, base));
     }
   else if (code == SSA_NAME && POINTER_TYPE_P (TREE_TYPE (*tp)))
 	obj = fold_convert (ptr_type_node, *tp);
@@ -2907,7 +2907,7 @@ strip_offset_1 (tree expr, bool inside_addr, bool top_compref,
       if (op0 == TREE_OPERAND (expr, 0))
 	return orig_expr;
 
-      expr = build_fold_addr_expr (op0);
+      expr = build_fold_addr_expr (code, op0);
       return fold_convert (orig_type, expr);
 
     case MEM_REF:
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 4bad811c659..314a4d447aa 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -2483,7 +2483,7 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
 	    offset = int_const_binop (PLUS_EXPR, offset,
 				      build_int_cst (TREE_TYPE (offset),
 						     off));
-	    baseop = build_fold_addr_expr (base);
+	    baseop = build_fold_addr_expr (TREE_CODE (baseop), base);
 	  }
 	genop = build2 (MEM_REF, currop->type, baseop, offset);
 	MR_DEPENDENCE_CLIQUE (genop) = currop->clique;
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 91d085b0adc..bcf2701d478 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -3296,7 +3296,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_,
 	      lhs_offset += mem_offset;
 	    }
 	  else if (DECL_P (tem))
-	    lhs = build_fold_addr_expr (tem);
+	    lhs = build_fold_addr_expr (TREE_CODE (lhs), tem);
 	  else
 	    return (void *)-1;
 	}
@@ -3326,7 +3326,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_,
 	    }
 	  else if (DECL_P (tem)
 		   || TREE_CODE (tem) == STRING_CST)
-	    rhs = build_fold_addr_expr (tem);
+	    rhs = build_fold_addr_expr (TREE_CODE (rhs), tem);
 	  else
 	    return (void *)-1;
 	}
diff --git a/gcc/tree.c b/gcc/tree.c
index 95f9b82a454..c5d2ecb9959 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5028,6 +5028,7 @@ build_simple_mem_ref_loc (location_t loc, tree ptr)
       && (handled_component_p (TREE_OPERAND (ptr, 0))
 	  || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
     {
+      tree_code addr_expr = TREE_CODE (ptr);
       ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
       gcc_assert (ptr);
       if (TREE_CODE (ptr) == MEM_REF)
@@ -5036,7 +5037,7 @@ build_simple_mem_ref_loc (location_t loc, tree ptr)
 	  ptr = TREE_OPERAND (ptr, 0);
 	}
       else
-	ptr = build_fold_addr_expr (ptr);
+	ptr = build_fold_addr_expr (addr_expr, ptr);
       gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
     }
   tem = build2 (MEM_REF, TREE_TYPE (ptype),


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-06 14:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-06 14:44 [gcc(refs/vendors/ARM/heads/morello)] Fix more build_fold_addr_expr calls Matthew Malcomson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).