Patchwork Tweak gimple-ssa-strength-reduction.c:backtrace_base_for_ref () to cover different cases as seen on AArch64

login
register
mail settings
Submitter Yufeng Zhang
Date Sept. 10, 2013, 3:53 p.m.
Message ID <522F4092.1040100@arm.com>
Download mbox | patch
Permalink /patch/273920/
State New
Headers show

Comments

Yufeng Zhang - Sept. 10, 2013, 3:53 p.m.
Hi,

Following Bin's patch in 
http://gcc.gnu.org/ml/gcc-patches/2013-09/msg00695.html, this patch 
tweaks backtrace_base_for_ref () to strip of any widening conversion 
after the first TREE_CODE check fails.  Without this patch, the test 
(gcc.dg/tree-ssa/slsr-39.c) in Bin's patch will fail on AArch64, as 
backtrace_base_for_ref () will stop if not seeing an ssa_name since the 
tree code can be nop_expr instead.

Regtested on arm and aarch64; still bootstrapping x86_64.

OK for the trunk if the x86_64 bootstrap succeeds?

Thanks,
Yufeng

gcc/

	* gimple-ssa-strength-reduction.c (backtrace_base_for_ref): Call
	get_unwidened and check 'base_in' again.
Richard Guenther - Sept. 11, 2013, 8:32 a.m.
On Tue, Sep 10, 2013 at 5:53 PM, Yufeng Zhang <Yufeng.Zhang@arm.com> wrote:
> Hi,
>
> Following Bin's patch in
> http://gcc.gnu.org/ml/gcc-patches/2013-09/msg00695.html, this patch tweaks
> backtrace_base_for_ref () to strip of any widening conversion after the
> first TREE_CODE check fails.  Without this patch, the test
> (gcc.dg/tree-ssa/slsr-39.c) in Bin's patch will fail on AArch64, as
> backtrace_base_for_ref () will stop if not seeing an ssa_name since the tree
> code can be nop_expr instead.
>
> Regtested on arm and aarch64; still bootstrapping x86_64.
>
> OK for the trunk if the x86_64 bootstrap succeeds?

Please add a testcase.

Richard.

> Thanks,
> Yufeng
>
> gcc/
>
>         * gimple-ssa-strength-reduction.c (backtrace_base_for_ref): Call
>         get_unwidened and check 'base_in' again.
William J. Schmidt - Sept. 11, 2013, 12:39 p.m.
On Wed, 2013-09-11 at 10:32 +0200, Richard Biener wrote:
> On Tue, Sep 10, 2013 at 5:53 PM, Yufeng Zhang <Yufeng.Zhang@arm.com> wrote:
> > Hi,
> >
> > Following Bin's patch in
> > http://gcc.gnu.org/ml/gcc-patches/2013-09/msg00695.html, this patch tweaks
> > backtrace_base_for_ref () to strip of any widening conversion after the
> > first TREE_CODE check fails.  Without this patch, the test
> > (gcc.dg/tree-ssa/slsr-39.c) in Bin's patch will fail on AArch64, as
> > backtrace_base_for_ref () will stop if not seeing an ssa_name since the tree
> > code can be nop_expr instead.
> >
> > Regtested on arm and aarch64; still bootstrapping x86_64.
> >
> > OK for the trunk if the x86_64 bootstrap succeeds?
> 
> Please add a testcase.

Also, the comment "Strip of" should read "Strip off".  Otherwise I have
no comments.

Thanks,
Bill

> 
> Richard.
> 
> > Thanks,
> > Yufeng
> >
> > gcc/
> >
> >         * gimple-ssa-strength-reduction.c (backtrace_base_for_ref): Call
> >         get_unwidened and check 'base_in' again.
>

Patch

diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c
index fea5741..7585164 100644
--- a/gcc/gimple-ssa-strength-reduction.c
+++ b/gcc/gimple-ssa-strength-reduction.c
@@ -769,7 +769,14 @@  backtrace_base_for_ref (tree *pbase)
 
   STRIP_NOPS (base_in);
   if (TREE_CODE (base_in) != SSA_NAME)
-    return tree_to_double_int (integer_zero_node);
+    {
+      /* Strip of widening conversion(s) to handle cases where
+	 e.g. 'B' is widened from an 'int' in order to calculate
+	 a 64-bit address.  */
+      base_in = get_unwidened (base_in, NULL_TREE);
+      if (TREE_CODE (base_in) != SSA_NAME)
+	return tree_to_double_int (integer_zero_node);
+    }
 
   base_cand = base_cand_from_table (base_in);