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.
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);
 

Reply via email to