aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-05-22 11:52:19 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-05-22 11:52:19 +0000
commitfa70c22141f5075ad4a9a3a6630f083c92755799 (patch)
treeafc708401f7b33651371ed0a0acb4844cef27279 /gcc
parenta6149853c3b57be410fa3316448532f609300aa8 (diff)
downloadgcc-fa70c22141f5075ad4a9a3a6630f083c92755799.zip
gcc-fa70c22141f5075ad4a9a3a6630f083c92755799.tar.gz
gcc-fa70c22141f5075ad4a9a3a6630f083c92755799.tar.bz2
alias.c (ao_ref_from_mem): Move stack-slot sharing rewrite ...
2019-05-22 Richard Biener <rguenther@suse.de> * alias.c (ao_ref_from_mem): Move stack-slot sharing rewrite ... * emit-rtl.c (set_mem_attributes_minus_bitpos): ... here. From-SVN: r271510
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/alias.c12
-rw-r--r--gcc/emit-rtl.c24
3 files changed, 30 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d31ac86..c043e9b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-05-22 Richard Biener <rguenther@suse.de>
+
+ * alias.c (ao_ref_from_mem): Move stack-slot sharing
+ rewrite ...
+ * emit-rtl.c (set_mem_attributes_minus_bitpos): ... here.
+
2019-05-22 Martin Liska <mliska@suse.cz>
PR lto/90500
diff --git a/gcc/alias.c b/gcc/alias.c
index b64e3ea..d3cc07c 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -307,18 +307,6 @@ ao_ref_from_mem (ao_ref *ref, const_rtx mem)
&& TREE_CODE (TMR_BASE (base)) == SSA_NAME)))
return false;
- /* If this is a reference based on a partitioned decl replace the
- base with a MEM_REF of the pointer representative we
- created during stack slot partitioning. */
- if (VAR_P (base)
- && ! is_global_var (base)
- && cfun->gimple_df->decls_to_pointers != NULL)
- {
- tree *namep = cfun->gimple_df->decls_to_pointers->get (base);
- if (namep)
- ref->base = build_simple_mem_ref (*namep);
- }
-
ref->ref_alias_set = MEM_ALIAS_SET (mem);
/* If MEM_OFFSET or MEM_SIZE are unknown what we got from MEM_EXPR
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 15dffa5..58286f7 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -61,6 +61,9 @@ along with GCC; see the file COPYING3. If not see
#include "opts.h"
#include "predict.h"
#include "rtx-vector-builder.h"
+#include "gimple.h"
+#include "gimple-ssa.h"
+#include "gimplify.h"
struct target_rtl default_target_rtl;
#if SWITCHABLE_TARGET
@@ -2128,6 +2131,27 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
apply_bitpos = bitpos;
}
+ /* If this is a reference based on a partitioned decl replace the
+ base with a MEM_REF of the pointer representative we created
+ during stack slot partitioning. */
+ if (attrs.expr
+ && VAR_P (base)
+ && ! is_global_var (base)
+ && cfun->gimple_df->decls_to_pointers != NULL)
+ {
+ tree *namep = cfun->gimple_df->decls_to_pointers->get (base);
+ if (namep)
+ {
+ attrs.expr = unshare_expr (attrs.expr);
+ tree *orig_base = &attrs.expr;
+ while (handled_component_p (*orig_base))
+ orig_base = &TREE_OPERAND (*orig_base, 0);
+ tree aptrt = reference_alias_ptr_type (*orig_base);
+ *orig_base = build2 (MEM_REF, TREE_TYPE (*orig_base), *namep,
+ build_int_cst (aptrt, 0));
+ }
+ }
+
/* Compute the alignment. */
unsigned int obj_align;
unsigned HOST_WIDE_INT obj_bitpos;