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).