[PATCH] Load PRE for Array References
Daniel Berlin
dberlin@dberlin.org
Sat Mar 18 17:36:00 GMT 2006
On Fri, 2006-03-17 at 11:10 -0500, Andrew Pinski wrote:
>
> @@ -1525,13 +1571,39 @@ valid_in_set (value_set_t set, tree expr
> case tcc_reference:
> {
> if (TREE_CODE (expr) == INDIRECT_REF
> - || TREE_CODE (expr) == COMPONENT_REF)
> + || TREE_CODE (expr) == COMPONENT_REF
> + || TREE_CODE (expr) == ARRAY_REF)
> {
> tree op0 = TREE_OPERAND (expr, 0);
> if (is_gimple_min_invariant (op0)
> || TREE_CODE (op0) == VALUE_HANDLE)
> {
> bool retval = set_contains_value (set, op0);
> + if (retval && TREE_CODE (expr) == ARRAY_REF)
> + {
> + tree op1 = TREE_OPERAND (expr, 1);
> + tree op2 = TREE_OPERAND (expr, 2);
> + tree op3 = TREE_OPERAND (expr, 3);
> + if (is_gimple_min_invariant (op1)
> + || TREE_CODE (op1) == VALUE_HANDLE)
> + {
> + if (!set_contains_value (set, op1))
> + return false;
> + if (op2
> + && (is_gimple_min_invariant (op2)
> + || TREE_CODE (op2) == VALUE_HANDLE)
> + && !set_contains_value (set, op2))
> + return false;
> + if (op3
> + && (is_gimple_min_invariant (op3)
> + || TREE_CODE (op3) == VALUE_HANDLE)
> + && !set_contains_value (set, op3))
> + return false;
> + }
> + else
> + return false;
> + }
> +
> if (retval)
> {
I forget why i originally wrote it as
tree op0 = TREE_OPERAND (expr, 0);
if (is_gimple_min_invariant (op0)
|| TREE_CODE (op0) == VALUE_HANDLE)
{
bool retval = set_contains_value (set, op0);
if (retval)
I'm pretty sure op0 should always be is_gimple_min_invariant || a
VALUE_HANDLE.
Can you see if the checks are still necessary?
Other than that, it looks fine.
More information about the Gcc-patches
mailing list