re PR target/69345 (459.GemsFDTD regression)
authorRichard Biener <rguenther@suse.de>
Wed, 20 Jan 2016 08:36:32 +0000 (08:36 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 20 Jan 2016 08:36:32 +0000 (08:36 +0000)
2016-01-20  Richard Biener  <rguenther@suse.de>

PR tree-optimization/69345
* tree-ssa-sccvn.h (VN_INFO_RANGE_INFO): New inline function.
(VN_INFO_PTR_INFO): Likewise.
* tree-ssa-sccvn.c (set_ssa_val_to): Avoid clearing points-to
info when it is equal between non-dominating SSA names.
* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
Make sure to look at original SSA infos.

From-SVN: r232603

gcc/ChangeLog
gcc/tree-ssa-pre.c
gcc/tree-ssa-sccvn.c
gcc/tree-ssa-sccvn.h

index 53096804195080e2a53825df50f754b981e5db4a..d67503867856bf9a9e33fefc01cdef99e113512a 100644 (file)
@@ -1,3 +1,13 @@
+2016-01-20  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/69345
+       * tree-ssa-sccvn.h (VN_INFO_RANGE_INFO): New inline function.
+       (VN_INFO_PTR_INFO): Likewise.
+       * tree-ssa-sccvn.c (set_ssa_val_to): Avoid clearing points-to
+       info when it is equal between non-dominating SSA names.
+       * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
+       Make sure to look at original SSA infos.
+
 2016-01-20  Jeff Law  <law@redhat.com>
 
        PR target/25114
index 1f1b0559d08bb23a43147baad7b50639c322596f..311663d80a2392ab1044d7c07e66559fb7e9ccfd 100644 (file)
@@ -4033,22 +4033,22 @@ eliminate_dom_walker::before_dom_children (basic_block b)
            {
              basic_block sprime_b = gimple_bb (SSA_NAME_DEF_STMT (sprime));
              if (POINTER_TYPE_P (TREE_TYPE (lhs))
-                 && SSA_NAME_PTR_INFO (lhs)
-                 && !SSA_NAME_PTR_INFO (sprime))
+                 && VN_INFO_PTR_INFO (lhs)
+                 && ! VN_INFO_PTR_INFO (sprime))
                {
                  duplicate_ssa_name_ptr_info (sprime,
-                                              SSA_NAME_PTR_INFO (lhs));
+                                              VN_INFO_PTR_INFO (lhs));
                  if (b != sprime_b)
                    mark_ptr_info_alignment_unknown
                        (SSA_NAME_PTR_INFO (sprime));
                }
-             else if (!POINTER_TYPE_P (TREE_TYPE (lhs))
-                      && SSA_NAME_RANGE_INFO (lhs)
-                      && !SSA_NAME_RANGE_INFO (sprime)
+             else if (INTEGRAL_TYPE_P (TREE_TYPE (lhs))
+                      && VN_INFO_RANGE_INFO (lhs)
+                      && ! VN_INFO_RANGE_INFO (sprime)
                       && b == sprime_b)
                duplicate_ssa_name_range_info (sprime,
                                               SSA_NAME_RANGE_TYPE (lhs),
-                                              SSA_NAME_RANGE_INFO (lhs));
+                                              VN_INFO_RANGE_INFO (lhs));
            }
 
          /* Inhibit the use of an inserted PHI on a loop header when
index a6ee501892b1d38bdffab9f3940ff8c15d52b462..e7bac420dbb1c1361bfc35ee56cb23dd63fe59e7 100644 (file)
@@ -3092,7 +3092,11 @@ set_ssa_val_to (tree from, tree to)
                  /* Use that from the dominator.  */
                  SSA_NAME_PTR_INFO (to) = SSA_NAME_PTR_INFO (from);
                }
-             else
+             else if (! SSA_NAME_PTR_INFO (from)
+                      /* Handle the case of trivially equivalent info.  */
+                      || memcmp (SSA_NAME_PTR_INFO (to),
+                                 SSA_NAME_PTR_INFO (from),
+                                 sizeof (ptr_info_def)) != 0)
                {
                  /* Save old info.  */
                  if (! VN_INFO (to)->info.ptr_info)
index d94bc1c095055999be97fde8a6db9b40908f3acb..14093ddca44f6218d9e5ef7682eabe0ed2b208ec 100644 (file)
@@ -243,4 +243,24 @@ vn_valueize (tree name)
   return name;
 }
 
+/* Get at the original range info for NAME.  */
+
+inline range_info_def *
+VN_INFO_RANGE_INFO (tree name)
+{
+  return (VN_INFO (name)->info.range_info
+         ? VN_INFO (name)->info.range_info
+         : SSA_NAME_RANGE_INFO (name));
+}
+
+/* Get at the original pointer info for NAME.  */
+
+inline ptr_info_def *
+VN_INFO_PTR_INFO (tree name)
+{
+  return (VN_INFO (name)->info.ptr_info
+         ? VN_INFO (name)->info.ptr_info
+         : SSA_NAME_PTR_INFO (name));
+}
+
 #endif /* TREE_SSA_SCCVN_H  */