mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-20 11:29:24 +00:00
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
80 lines
1.4 KiB
C
80 lines
1.4 KiB
C
/*===- 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;
|
|
}
|