Introduce ssa_defined_default_def_p function (PR tree-optimization/79529).
authorMartin Liska <mliska@suse.cz>
Fri, 17 Feb 2017 14:36:08 +0000 (15:36 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 17 Feb 2017 14:36:08 +0000 (14:36 +0000)
2017-02-17  Martin Liska  <mliska@suse.cz>

PR tree-optimization/79529
* tree-ssa-loop-unswitch.c (is_maybe_undefined): Use
ssa_defined_default_def_p to handle cases which are implicitly
defined.
* tree-ssa.c (ssa_defined_default_def_p): New function.
(ssa_undefined_value_p): Use ssa_defined_default_def_p to handle cases
which are implicitly defined.
* tree-ssa.h (ssa_defined_default_def_p): Declare.

From-SVN: r245530

gcc/ChangeLog
gcc/tree-ssa-loop-unswitch.c
gcc/tree-ssa.c
gcc/tree-ssa.h

index c7c6d59874fbf363c91d764469759e9ad3f9b4b8..defd5431ef15cd20c2d9442b0de9efd602000b2a 100644 (file)
@@ -1,3 +1,14 @@
+2017-02-17  Martin Liska  <mliska@suse.cz>
+
+       PR tree-optimization/79529
+       * tree-ssa-loop-unswitch.c (is_maybe_undefined): Use
+       ssa_defined_default_def_p to handle cases which are implicitly
+       defined.
+       * tree-ssa.c (ssa_defined_default_def_p): New function.
+       (ssa_undefined_value_p): Use ssa_defined_default_def_p to handle cases
+       which are implicitly defined.
+       * tree-ssa.h (ssa_defined_default_def_p): Declare.
+
 2017-02-17  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/79576
index afa04e9d110f1d0d609665cf7d43faaa1d2a5453..1845148666db39e87663171e43b6c88929431f60 100644 (file)
@@ -134,9 +134,7 @@ is_maybe_undefined (const tree name, gimple *stmt, struct loop *loop)
       if (ssa_undefined_value_p (t, true))
        return true;
 
-      /* A PARM_DECL will not have an SSA_NAME_DEF_STMT.  Parameters
-        get their initial value from function entry.  */
-      if (SSA_NAME_VAR (t) && TREE_CODE (SSA_NAME_VAR (t)) == PARM_DECL)
+      if (ssa_defined_default_def_p (t))
        continue;
 
       gimple *def = SSA_NAME_DEF_STMT (t);
index 28020b003f83375ba91f3542c67d9eec9ffc5902..831fd61e15f8e99fce6d3f888cafdcef6d87889e 100644 (file)
@@ -1251,27 +1251,39 @@ tree_ssa_strip_useless_type_conversions (tree exp)
   return exp;
 }
 
-
-/* Return true if T, an SSA_NAME, has an undefined value.  PARTIAL is what
-   should be returned if the value is only partially undefined.  */
+/* Return true if T, as SSA_NAME, has an implicit default defined value.  */
 
 bool
-ssa_undefined_value_p (tree t, bool partial)
+ssa_defined_default_def_p (tree t)
 {
-  gimple *def_stmt;
   tree var = SSA_NAME_VAR (t);
 
   if (!var)
     ;
   /* Parameters get their initial value from the function entry.  */
   else if (TREE_CODE (var) == PARM_DECL)
-    return false;
+    return true;
   /* When returning by reference the return address is actually a hidden
      parameter.  */
   else if (TREE_CODE (var) == RESULT_DECL && DECL_BY_REFERENCE (var))
-    return false;
+    return true;
   /* Hard register variables get their initial value from the ether.  */
   else if (VAR_P (var) && DECL_HARD_REGISTER (var))
+    return true;
+
+  return false;
+}
+
+
+/* Return true if T, an SSA_NAME, has an undefined value.  PARTIAL is what
+   should be returned if the value is only partially undefined.  */
+
+bool
+ssa_undefined_value_p (tree t, bool partial)
+{
+  gimple *def_stmt;
+
+  if (ssa_defined_default_def_p (t))
     return false;
 
   /* The value is undefined iff its definition statement is empty.  */
index 6d16ba9f6a0c5ff5621090f4aec4122de1d116f1..c99b5eaee82e478131fad66c2553a9f6567827c5 100644 (file)
@@ -50,6 +50,8 @@ extern void delete_tree_ssa (function *);
 extern bool tree_ssa_useless_type_conversion (tree);
 extern tree tree_ssa_strip_useless_type_conversions (tree);
 
+
+extern bool ssa_defined_default_def_p (tree t);
 extern bool ssa_undefined_value_p (tree, bool = true);
 extern bool gimple_uses_undefined_value_p (gimple *);
 extern void execute_update_addresses_taken (void);