blob: 9fc9ec5798d74a58c55d14c88e74718cb5ec2a68 [file] [log] [blame] [edit]
// RUN: %clang -std=c11 -O0 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | %lli -
// RUN: %clang -std=c11 -O1 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | %lli -
// RUN: %clang -std=c11 -O2 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | %lli -
// RUN: %clang -std=c11 -O3 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S | %lli -
// RUN: %clang -std=c11 -O0 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | %lli -
// RUN: %clang -std=c11 -O1 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | %lli -
// RUN: %clang -std=c11 -O2 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | %lli -
// RUN: %clang -std=c11 -O3 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S | %lli -
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include "../test_utils.h"
float __enzyme_autodiff(void*, float, int);
float foo(float inp, int n) {
float* x = 0;
for(int i=0; i<n; i++) {
x = (float*)realloc(x, (i+1)*sizeof(float));
if (i == 0 ){
*x = inp;
} else {
x[i] = x[i-1] + inp;
}
}
float res = x[n-1];
free(x);
return res;
}
int main(int argc, char** argv) {
float inp = 3.0f;
float res = __enzyme_autodiff(foo, inp, 32);
printf("hello! inp=%f, res=%f\n", inp, res);
APPROX_EQ(res, 32.0f, 1e-10);
return 0;
}