OSDN Git Service

2007-08-03 Andrew Pinski <andrew_pinski@playstation.sony.com>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 4 Aug 2007 00:33:31 +0000 (00:33 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 4 Aug 2007 00:33:31 +0000 (00:33 +0000)
        PR middle-end/32399
        * tree-ssa-address.c (add_to_parts): Use POINTER_PLUS_EXPR
        when adding to the base and convert ELT to sizetype instead of type.

2007-08-03  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        RP middle-end/32399
        * gcc.c-torture/compile/pr32399.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127196 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr32399.c [new file with mode: 0644]
gcc/tree-ssa-address.c

index eeb4a51..b2bff86 100644 (file)
@@ -1,5 +1,11 @@
 2007-08-03  Andrew Pinski  <andrew_pinski@playstation.sony.com>
 
+       PR middle-end/32399
+       * tree-ssa-address.c (add_to_parts): Use POINTER_PLUS_EXPR
+       when adding to the base and convert ELT to sizetype instead of type.
+
+2007-08-03  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
        PR middle-end/32304
        * ipa-reference.c (has_proper_scope_for_analysis): Return false when
        the decl's type has TYPE_NEEDS_CONSTRUCTING set.
index ce38fc7..8814bd2 100644 (file)
@@ -1,5 +1,10 @@
 2007-08-03  Andrew Pinski  <andrew_pinski@playstation.sony.com>
 
+       RP middle-end/32399
+       * gcc.c-torture/compile/pr32399.c: New testcase.
+
+2007-08-03  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
        PR middle-end/32304
        * g++.dg/torture/pr32304.C: New testcase.
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr32399.c b/gcc/testsuite/gcc.c-torture/compile/pr32399.c
new file mode 100644 (file)
index 0000000..cc2b1b1
--- /dev/null
@@ -0,0 +1,16 @@
+void f(unsigned char *src, unsigned char *dst, int num, unsigned char *pos, unsigned char *diffuse, int hasdiffuse, unsigned char *specular, int hasspecular) {
+    int i;
+
+    for(i=num;i--;) {
+       float *p = (float *) ((__SIZE_TYPE__) dst + (__SIZE_TYPE__) pos);
+        if(hasdiffuse) {
+            unsigned int *dstColor = (unsigned int *) (dst + i + (__SIZE_TYPE__) diffuse);
+            *dstColor = * (unsigned int *) ( ((__SIZE_TYPE__) src + (__SIZE_TYPE__) diffuse) + i);
+        }
+        if(hasspecular) {
+            unsigned int *dstColor = (unsigned int *) (dst + i + (__SIZE_TYPE__) specular);
+            *dstColor = * (unsigned int *) ( ((__SIZE_TYPE__) src + (__SIZE_TYPE__) specular) + i);
+        }
+    }
+}
+
index 577ede3..90a01dc 100644 (file)
@@ -422,9 +422,9 @@ add_to_parts (struct mem_address *parts, tree elt)
 
   /* Add ELT to base.  */
   type = TREE_TYPE (parts->base);
-  parts->base = fold_build2 (PLUS_EXPR, type,
+  parts->base = fold_build2 (POINTER_PLUS_EXPR, type,
                             parts->base,
-                            fold_convert (type, elt));
+                            fold_convert (sizetype, elt));
 }
 
 /* Finds the most expensive multiplication in ADDR that can be