Feature test for stack size bigger than immed. field of SAVE instruction.
authorVikram S. Adve <vadve@cs.uiuc.edu>
Thu, 1 Aug 2002 14:21:05 +0000 (14:21 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Thu, 1 Aug 2002 14:21:05 +0000 (14:21 +0000)
Also tests code generation for code with mixed indices.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3197 91177308-0d34-0410-b5e6-96231b3b80d8

test/LLC/bigstack.c [new file with mode: 0644]

diff --git a/test/LLC/bigstack.c b/test/LLC/bigstack.c
new file mode 100644 (file)
index 0000000..eacb76a
--- /dev/null
@@ -0,0 +1,79 @@
+/*===- test/Regression/Transforms/Scalar/DecomposeMultiDimRefs.cpp     -----=*
+ * 
+ * This is a feature test that checks for correct code generation
+ * of the SAVE instruction when the stack size does not fit in the
+ * immediate field of the SAVE instruction.  This happens in main().
+ *===---------------------------------------------------------------------===*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+typedef struct Flat_struct {
+  char   c;
+  float  x;
+} Flat_t;
+
+typedef struct Mixed_struct {
+  int    N;
+  double A[10];
+  double B[10][10];
+  Flat_t F[10];
+} Mixed_t;
+
+
+double
+AddMixed(Mixed_t* M)
+{
+  double sum = 0;
+  int i, j;
+  
+  for (i=0; i < 10; ++i)
+    sum += M->A[i];
+  
+  for (i=0; i < 10; ++i)
+    for (j=0; j < 10; ++j)
+      sum += M->B[i][j];
+  
+  for (i=0; i < 10; ++i) {
+    sum += (double) M->F[i].c;
+    sum += M->F[i].x;
+  }
+  
+  return sum;
+}
+
+void
+InitializeMixed(Mixed_t* M, int base)
+{
+  int i, j;
+  
+  for (i=0; i < 10; ++i)
+    M->A[i] = i + base;
+    
+  for (i=0; i < 10; ++i)
+    for (j=0; j < 10; ++j)
+      M->B[i][j] = i*10 + j + base;
+  
+  for (i=0; i < 10; ++i) {
+    M->F[i].c = 'Q';
+    M->F[i].x = i / 10 + base;
+  }
+}
+
+int
+main(int argc, char** argv)
+{
+  Mixed_t M;
+  Mixed_t MA[4];
+  int i;
+  
+  InitializeMixed(&M, 100);
+  printf("Sum(M)  = %.2f\n", AddMixed(&M));
+  
+  for (i=0; i < 4; i++) {
+    InitializeMixed(&MA[i], 100 * (i+2));
+    printf("Sum(MA[%d]) = %.2f\n", i, AddMixed(&MA[i]));
+  }
+
+  return 0;
+}