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:
parent
a6149853c3
commit
fa70c22141
3 changed files with 30 additions and 12 deletions
|
@ -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
|
||||
|
|
12
gcc/alias.c
12
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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue