[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