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
This commit is contained in:
Richard Biener 2019-05-22 11:52:19 +00:00 committed by Richard Biener
parent a6149853c3
commit fa70c22141
3 changed files with 30 additions and 12 deletions

View file

@ -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

View file

@ -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

View file

@ -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;