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
This commit is contained in:
parent
830afa4b0c
commit
c6b0d21d49
|
@ -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>
|
2017-02-17 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR middle-end/79576
|
PR middle-end/79576
|
||||||
|
|
|
@ -134,9 +134,7 @@ is_maybe_undefined (const tree name, gimple *stmt, struct loop *loop)
|
||||||
if (ssa_undefined_value_p (t, true))
|
if (ssa_undefined_value_p (t, true))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
/* A PARM_DECL will not have an SSA_NAME_DEF_STMT. Parameters
|
if (ssa_defined_default_def_p (t))
|
||||||
get their initial value from function entry. */
|
|
||||||
if (SSA_NAME_VAR (t) && TREE_CODE (SSA_NAME_VAR (t)) == PARM_DECL)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
gimple *def = SSA_NAME_DEF_STMT (t);
|
gimple *def = SSA_NAME_DEF_STMT (t);
|
||||||
|
|
|
@ -1251,6 +1251,29 @@ tree_ssa_strip_useless_type_conversions (tree exp)
|
||||||
return exp;
|
return exp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return true if T, as SSA_NAME, has an implicit default defined value. */
|
||||||
|
|
||||||
|
bool
|
||||||
|
ssa_defined_default_def_p (tree t)
|
||||||
|
{
|
||||||
|
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 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 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
|
/* Return true if T, an SSA_NAME, has an undefined value. PARTIAL is what
|
||||||
should be returned if the value is only partially undefined. */
|
should be returned if the value is only partially undefined. */
|
||||||
|
@ -1259,19 +1282,8 @@ bool
|
||||||
ssa_undefined_value_p (tree t, bool partial)
|
ssa_undefined_value_p (tree t, bool partial)
|
||||||
{
|
{
|
||||||
gimple *def_stmt;
|
gimple *def_stmt;
|
||||||
tree var = SSA_NAME_VAR (t);
|
|
||||||
|
|
||||||
if (!var)
|
if (ssa_defined_default_def_p (t))
|
||||||
;
|
|
||||||
/* Parameters get their initial value from the function entry. */
|
|
||||||
else if (TREE_CODE (var) == PARM_DECL)
|
|
||||||
return false;
|
|
||||||
/* 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;
|
|
||||||
/* Hard register variables get their initial value from the ether. */
|
|
||||||
else if (VAR_P (var) && DECL_HARD_REGISTER (var))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* The value is undefined iff its definition statement is empty. */
|
/* The value is undefined iff its definition statement is empty. */
|
||||||
|
|
|
@ -50,6 +50,8 @@ extern void delete_tree_ssa (function *);
|
||||||
extern bool tree_ssa_useless_type_conversion (tree);
|
extern bool tree_ssa_useless_type_conversion (tree);
|
||||||
extern tree tree_ssa_strip_useless_type_conversions (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 ssa_undefined_value_p (tree, bool = true);
|
||||||
extern bool gimple_uses_undefined_value_p (gimple *);
|
extern bool gimple_uses_undefined_value_p (gimple *);
|
||||||
extern void execute_update_addresses_taken (void);
|
extern void execute_update_addresses_taken (void);
|
||||||
|
|
Loading…
Reference in New Issue