aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2017-02-17 15:36:08 +0100
committerMartin Liska <marxin@gcc.gnu.org>2017-02-17 14:36:08 +0000
commitc6b0d21d49a2605b2c667cec37b31140133b1fd5 (patch)
tree2d644d831748550bdfe21bd8444f49d2c62f5768 /gcc
parent830afa4b0c8f2012b91c639f18a426d18aa36af2 (diff)
downloadgcc-c6b0d21d49a2605b2c667cec37b31140133b1fd5.zip
gcc-c6b0d21d49a2605b2c667cec37b31140133b1fd5.tar.gz
gcc-c6b0d21d49a2605b2c667cec37b31140133b1fd5.tar.bz2
Introduce ssa_defined_default_def_p function (PR tree-optimization/79529).
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/tree-ssa-loop-unswitch.c4
-rw-r--r--gcc/tree-ssa.c26
-rw-r--r--gcc/tree-ssa.h2
4 files changed, 33 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c7c6d59..defd543 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/tree-ssa-loop-unswitch.c b/gcc/tree-ssa-loop-unswitch.c
index afa04e9..1845148 100644
--- a/gcc/tree-ssa-loop-unswitch.c
+++ b/gcc/tree-ssa-loop-unswitch.c
@@ -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);
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 28020b0..831fd61 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -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. */
diff --git a/gcc/tree-ssa.h b/gcc/tree-ssa.h
index 6d16ba9..c99b5ea 100644
--- a/gcc/tree-ssa.h
+++ b/gcc/tree-ssa.h
@@ -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);