diff mbox series

[2/2] ipa/94217 simplify offsetted address build

Message ID nycvar.YFH.7.76.2003190833550.5137@zhemvz.fhfr.qr
State New
Headers show
Series [1/2] middle-end/94216 fix another build_fold_addr_expr use | expand

Commit Message

Richard Biener March 19, 2020, 7:34 a.m. UTC
This avoids using build_ref_for_offset and build_fold_addr_expr
where type mixup easily results in something not IP invariant.

Bootstrap and regtest on x86_64-unknown-linux-gnu in progress.

Richard.

2020-03-19  Richard Biener  <rguenther@suse.de>

	PR ipa/94217
	* ipa-cp.c (ipa_get_jf_ancestor_result): Avoid build_fold_addr_expr
	and build_ref_for_offset.
---
 gcc/ipa-cp.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
diff mbox series

Patch

diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index 27c020b8199..1c17010e369 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -1352,11 +1352,13 @@  ipa_get_jf_ancestor_result (struct ipa_jump_func *jfunc, tree input)
   gcc_checking_assert (TREE_CODE (input) != TREE_BINFO);
   if (TREE_CODE (input) == ADDR_EXPR)
     {
-      tree t = TREE_OPERAND (input, 0);
-      t = build_ref_for_offset (EXPR_LOCATION (t), t,
-				ipa_get_jf_ancestor_offset (jfunc), false,
-				ptr_type_node, NULL, false);
-      return build_fold_addr_expr (t);
+      gcc_checking_assert (is_gimple_ip_invariant_address (input));
+      poly_int64 off = ipa_get_jf_ancestor_offset (jfunc);
+      if (known_eq (off, 0))
+	return input;
+      return build1 (ADDR_EXPR, TREE_TYPE (input),
+		     fold_build2 (MEM_REF, TREE_TYPE (TREE_TYPE (input)),
+				  input, build_int_cst (ptr_type_node, off)));
     }
   else
     return NULL_TREE;