| // note not doing O0 below as to ensure we get tbaa |
| // RUN: %clang -fopenmp -std=c11 -fno-vectorize -fno-unroll-loops %O0TBAA %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | %clang -fopenmp -x ir - -o %s.out && %s.out |
| // RUN: %clang -fopenmp -std=c11 -fno-vectorize -fno-unroll-loops -O1 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | %clang -fopenmp -x ir - -o %s.out && %s.out |
| // RUN: %clang -fopenmp -std=c11 -fno-vectorize -fno-unroll-loops -O2 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | %clang -fopenmp -x ir - -o %s.out && %s.out |
| // RUN: %clang -fopenmp -std=c11 -fno-vectorize -fno-unroll-loops -O3 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | %clang -fopenmp -x ir - -o %s.out && %s.out |
| // note not doing O0 below as to ensure we get tbaa |
| // RUN: %clang -fopenmp -std=c11 -fno-vectorize -fno-unroll-loops %O0TBAA %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | %clang -fopenmp -x ir - -o %s.out && %s.out |
| // RUN: %clang -fopenmp -std=c11 -fno-vectorize -fno-unroll-loops -O1 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | %clang -fopenmp -x ir - -o %s.out && %s.out |
| // RUN: %clang -fopenmp -std=c11 -fno-vectorize -fno-unroll-loops -O2 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | %clang -fopenmp -x ir - -o %s.out && %s.out |
| // RUN: %clang -fopenmp -std=c11 -fno-vectorize -fno-unroll-loops -O3 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | %clang -fopenmp -x ir - -o %s.out && %s.out |
| |
| #include "../test_utils.h" |
| |
| void msg(double* in, int *len, unsigned int slen) { |
| if (slen != 0) { |
| #pragma omp parallel for firstprivate(slen) |
| for (unsigned int i=0; i<slen; i++) { |
| /* |
| int L = len[i] / 2; |
| __builtin_assume(L > 0); |
| for(int j=0; j<L; j++) |
| in[j*10+i] *= L; |
| len[i] = 0; |
| */ |
| } |
| } |
| } |
| |
| void __enzyme_autodiff(void*, ...); |
| |
| int main ( int argc, char *argv[] ) { |
| |
| double array[200]; |
| double darray[200]; |
| int len[10] = {20}; |
| int slen = 10; |
| __enzyme_autodiff((void*)msg, enzyme_dup, &array, &darray, enzyme_const, &len, enzyme_const, slen); |
| return 0; |
| } |