Remove COMPONENT_REF limitation in SCoP detection.
2010-01-08 Sebastian Pop <sebastian.pop@amd.com> * graphite-scop-detection.c (exclude_component_ref): Removed. (is_simple_operand): Removed. (stmt_simple_for_scop_p): Remove use of is_simple_operand. From-SVN: r155739
This commit is contained in:
parent
79667f82ad
commit
c8ae061371
@ -1,3 +1,9 @@
|
|||||||
|
2010-01-08 Sebastian Pop <sebastian.pop@amd.com>
|
||||||
|
|
||||||
|
* graphite-scop-detection.c (exclude_component_ref): Removed.
|
||||||
|
(is_simple_operand): Removed.
|
||||||
|
(stmt_simple_for_scop_p): Remove use of is_simple_operand.
|
||||||
|
|
||||||
2010-01-07 Sebastian Pop <sebastian.pop@amd.com>
|
2010-01-07 Sebastian Pop <sebastian.pop@amd.com>
|
||||||
|
|
||||||
PR middle-end/42221
|
PR middle-end/42221
|
||||||
|
@ -297,41 +297,6 @@ stmt_has_simple_data_refs_p (loop_p outermost_loop, gimple stmt)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return false if the TREE_CODE of the operand OP or any of its operands
|
|
||||||
is a COMPONENT_REF. */
|
|
||||||
|
|
||||||
static bool
|
|
||||||
exclude_component_ref (tree op)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
if (!op)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (TREE_CODE (op) == COMPONENT_REF)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
len = TREE_OPERAND_LENGTH (op);
|
|
||||||
for (i = 0; i < len; ++i)
|
|
||||||
if (!exclude_component_ref (TREE_OPERAND (op, i)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return true if the operand OP used in STMT is simple in regards to
|
|
||||||
OUTERMOST_LOOP. */
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
is_simple_operand (tree op)
|
|
||||||
{
|
|
||||||
/* It is not a simple operand when it is a declaration or a
|
|
||||||
structure. */
|
|
||||||
return !DECL_P (op) && !AGGREGATE_TYPE_P (TREE_TYPE (op))
|
|
||||||
&& exclude_component_ref (op);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return true only when STMT is simple enough for being handled by
|
/* Return true only when STMT is simple enough for being handled by
|
||||||
Graphite. This depends on SCOP_ENTRY, as the parameters are
|
Graphite. This depends on SCOP_ENTRY, as the parameters are
|
||||||
initialized relatively to this basic block, the linear functions
|
initialized relatively to this basic block, the linear functions
|
||||||
@ -395,42 +360,8 @@ stmt_simple_for_scop_p (basic_block scop_entry, loop_p outermost_loop,
|
|||||||
}
|
}
|
||||||
|
|
||||||
case GIMPLE_ASSIGN:
|
case GIMPLE_ASSIGN:
|
||||||
{
|
|
||||||
enum tree_code code = gimple_assign_rhs_code (stmt);
|
|
||||||
|
|
||||||
switch (get_gimple_rhs_class (code))
|
|
||||||
{
|
|
||||||
case GIMPLE_UNARY_RHS:
|
|
||||||
case GIMPLE_SINGLE_RHS:
|
|
||||||
return (is_simple_operand (gimple_assign_lhs (stmt))
|
|
||||||
&& is_simple_operand (gimple_assign_rhs1 (stmt)));
|
|
||||||
|
|
||||||
case GIMPLE_BINARY_RHS:
|
|
||||||
return (is_simple_operand (gimple_assign_lhs (stmt))
|
|
||||||
&& is_simple_operand (gimple_assign_rhs1 (stmt))
|
|
||||||
&& is_simple_operand (gimple_assign_rhs2 (stmt)));
|
|
||||||
|
|
||||||
case GIMPLE_INVALID_RHS:
|
|
||||||
default:
|
|
||||||
gcc_unreachable ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case GIMPLE_CALL:
|
case GIMPLE_CALL:
|
||||||
{
|
return true;
|
||||||
size_t i;
|
|
||||||
size_t n = gimple_call_num_args (stmt);
|
|
||||||
tree lhs = gimple_call_lhs (stmt);
|
|
||||||
|
|
||||||
if (lhs && !is_simple_operand (lhs))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
if (!is_simple_operand (gimple_call_arg (stmt, i)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* These nodes cut a new scope. */
|
/* These nodes cut a new scope. */
|
||||||
|
Loading…
Reference in New Issue
Block a user