gimplify.c (gimplify_array_ref_to_plus): Delete.
authorRichard Henderson <rth@redhat.com>
Tue, 24 Aug 2004 15:46:38 +0000 (08:46 -0700)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 24 Aug 2004 15:46:38 +0000 (08:46 -0700)
2004-08-24  Richard Henderson  <rth@redhat.com>
            Andrew Pinski  <apinski@apple.com>

        * gimplify.c (gimplify_array_ref_to_plus): Delete.
        (gimplify_addr_expr): Do not call gimplify_array_ref_to_plus
        for ARRAY_REF.

        * config/rs6000/rs6000.c (altivec_expand_builtin): Go passed
        ARRAY_REF also to get to the STRING_CST.

Co-Authored-By: Andrew Pinski <apinski@apple.com>
From-SVN: r86487

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/gimplify.c

index f6bb1b91c042d091d4e65a541a928998f3f5ddc1..7d711fa5273f87b7bdb7fece2bd9f20bd958378d 100644 (file)
@@ -1,3 +1,13 @@
+2004-08-24  Richard Henderson  <rth@redhat.com>
+            Andrew Pinski  <apinski@apple.com>
+
+       * gimplify.c (gimplify_array_ref_to_plus): Delete.
+       (gimplify_addr_expr): Do not call gimplify_array_ref_to_plus
+       for ARRAY_REF.
+
+       * config/rs6000/rs6000.c (altivec_expand_builtin): Go passed
+       ARRAY_REF also to get to the STRING_CST.
+
 2004-08-24  Paul Brook  <paul@codesourcery.com>
 
        * config/arm/arm.c (arm_override_options): Update error message.
index 9da6d2636ae6b9b98dd6835510e366bcf0461282..c6198cf6392f37247a1e28d841f3759bf66eb18f 100644 (file)
@@ -6784,7 +6784,8 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
 
     case ALTIVEC_BUILTIN_COMPILETIME_ERROR:
       arg0 = TREE_VALUE (arglist);
-      while (TREE_CODE (arg0) == NOP_EXPR || TREE_CODE (arg0) == ADDR_EXPR)
+      while (TREE_CODE (arg0) == NOP_EXPR || TREE_CODE (arg0) == ADDR_EXPR
+             || TREE_CODE (arg0) == ARRAY_REF)
        arg0 = TREE_OPERAND (arg0, 0);
       error ("invalid parameter combination for `%s' AltiVec intrinsic",
             TREE_STRING_POINTER (arg0));
index 3c9ff202dc4ea27c60cc3a6ab3d1915de6dbccd1..b008a17375c2a273f96728b3ed385121e90d5e03 100644 (file)
@@ -1426,59 +1426,6 @@ gimplify_conversion (tree *expr_p)
   return GS_OK;
 }
 
-/* Subroutine of gimplify_compound_lval.
-   Converts an ARRAY_REF to the equivalent *(&array + offset) form.  */
-
-static enum gimplify_status
-gimplify_array_ref_to_plus (tree *expr_p, tree *pre_p, tree *post_p)
-{
-  tree array = TREE_OPERAND (*expr_p, 0);
-  tree arrtype = TREE_TYPE (array);
-  tree elttype = TREE_TYPE (arrtype);
-  tree size = array_ref_element_size (*expr_p);
-  tree ptrtype = build_pointer_type (elttype);
-  enum tree_code add_code = PLUS_EXPR;
-  tree idx = TREE_OPERAND (*expr_p, 1);
-  tree minidx = unshare_expr (array_ref_low_bound (*expr_p));
-  tree offset, addr, result;
-  enum gimplify_status ret;
-
-  /* If the array domain does not start at zero, apply the offset.  */
-  if (!integer_zerop (minidx))
-    {
-      idx = convert (TREE_TYPE (minidx), idx);
-      idx = fold (build (MINUS_EXPR, TREE_TYPE (minidx), idx, minidx));
-    }
-  
-  /* If the index is negative -- a technically invalid situation now
-     that we've biased the index back to zero -- then casting it to
-     unsigned has ill effects.  In particular, -1*4U/4U != -1.
-     Represent this as a subtraction of a positive rather than addition
-     of a negative.  This will prevent any conversion back to ARRAY_REF
-     from getting the wrong results from the division.  */
-  if (TREE_CODE (idx) == INTEGER_CST && tree_int_cst_sgn (idx) < 0)
-    {
-      idx = fold (build1 (NEGATE_EXPR, TREE_TYPE (idx), idx));
-      add_code = MINUS_EXPR;
-    }
-
-  /* Pointer arithmetic must be done in sizetype.  */
-  idx = fold_convert (sizetype, idx);
-
-  /* Convert the index to a byte offset.  */
-  offset = size_binop (MULT_EXPR, size, idx);
-
-  ret = gimplify_expr (&array, pre_p, post_p, is_gimple_min_lval, fb_lvalue);
-  if (ret == GS_ERROR)
-    return ret;
-
-  addr = build_fold_addr_expr_with_type (array, ptrtype);
-  result = fold (build (add_code, ptrtype, addr, offset));
-  *expr_p = build1 (INDIRECT_REF, elttype, result);
-
-  return GS_OK;
-}
-
 /* Gimplify the COMPONENT_REF, ARRAY_REF, REALPART_EXPR or IMAGPART_EXPR
    node pointed by EXPR_P.
 
@@ -3124,15 +3071,6 @@ gimplify_addr_expr (tree *expr_p, tree *pre_p, tree *post_p)
       ret = GS_OK;
       break;
 
-    case ARRAY_REF:
-      /* Fold &a[6] to (&a + 6).  */
-      ret = gimplify_array_ref_to_plus (&TREE_OPERAND (expr, 0),
-                                       pre_p, post_p);
-
-      /* This added an INDIRECT_REF.  Fold it away.  */
-      *expr_p = TREE_OPERAND (TREE_OPERAND (expr, 0), 0);
-      break;
-
     case VIEW_CONVERT_EXPR:
       /* Take the address of our operand and then convert it to the type of
         this ADDR_EXPR.