* gcc.c-torture/execute/20030611-1.c: New test.
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 13 Jun 2003 03:39:47 +0000 (03:39 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 13 Jun 2003 03:39:47 +0000 (03:39 +0000)
From-SVN: r67871

gcc/testsuite/gcc.c-torture/execute/20030613-1.c [new file with mode: 0644]

diff --git a/gcc/testsuite/gcc.c-torture/execute/20030613-1.c b/gcc/testsuite/gcc.c-torture/execute/20030613-1.c
new file mode 100644 (file)
index 0000000..cb1623d
--- /dev/null
@@ -0,0 +1,62 @@
+/* PR optimization/10955 */
+/* Originator: <heinrich.brand@fujitsu-siemens.com> */
+
+/* This used to fail on SPARC32 at -O3 because the loop unroller
+   wrongly thought it could eliminate a pseudo in a loop, while
+   the pseudo was used outside the loop.  */
+
+extern void abort(void);
+
+#define COMPLEX struct CS
+
+COMPLEX {
+  long x;
+  long y;
+};
+
+
+static COMPLEX CCID (COMPLEX x)
+{
+  COMPLEX a;
+
+  a.x = x.x;
+  a.y = x.y;
+
+  return a;
+}
+
+
+static COMPLEX CPOW (COMPLEX x, int y)
+{
+  COMPLEX a;
+  a = x;
+
+  while (--y > 0)
+    a=CCID(a);
+
+  return a;
+}
+
+
+static int c5p (COMPLEX x)
+{
+  COMPLEX a,b;
+  a = CPOW (x, 2);
+  b = CCID( CPOW(a,2) );
+    
+  return (b.x == b.y); 
+}
+
+
+int main (void)
+{
+  COMPLEX  x;  
+
+  x.x = -7;
+  x.y = -7;
+
+  if (!c5p(x))
+    abort();
+
+  return 0;
+}