[gcc(refs/vendors/redhat/heads/gcc-10-branch)] ipa/94217 simplify offsetted address build

Jakub Jelinek jakub@gcc.gnu.org
Wed Mar 25 10:05:45 GMT 2020


https://gcc.gnu.org/g:f3280e4c0c98e103603bafc466ea49651fe0b7f2

commit f3280e4c0c98e103603bafc466ea49651fe0b7f2
Author: Richard Biener <rguenther@suse.de>
Date:   Thu Mar 19 10:19:24 2020 +0100

    ipa/94217 simplify offsetted address build
    
    This avoids using build_ref_for_offset and build_fold_addr_expr
    where type mixup easily results in something not IP invariant.
    
    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.

Diff:
---
 gcc/ChangeLog |  6 ++++++
 gcc/ipa-cp.c  | 12 +++++++-----
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f015a55a870..c91c73a6639 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+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.
+
 2020-03-19  Richard Biener  <rguenther@suse.de>
 
 	PR middle-end/94216
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;


More information about the Gcc-cvs mailing list