blob: 16751fe3e318bf6b0febda05494351fad1013f39 [file] [log] [blame] [edit]
// RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O0 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S
// RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O1 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S
// RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O2 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S
// RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O3 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -S
// RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O0 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S
// RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O1 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S
// RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O2 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S
// RUN: %clang++ -std=c++11 -fno-exceptions -ffast-math -O3 %s -S -emit-llvm -o - | %opt - %OPloadEnzyme %enzyme -enzyme-inline=1 -S
#include "../test_utils.h"
typedef struct {
double df[3];
} Gradient;
extern Gradient __enzyme_autodiff(void*, double, double , double);
double myfunction(double x, double y, double z){
return x * y * z;
}
void dmyfunction(double x, double y, double z, double* res) {
Gradient g = __enzyme_autodiff((void*)myfunction, x, y, z);
res[0]=g.df[0];
res[1]=g.df[1];
res[2]=g.df[2];
}
int main() {
double *res=new double(3);
dmyfunction(3,4,5,res);
APPROX_EQ(res[0], 4*5., 1e-7);
APPROX_EQ(res[1], 3*5., 1e-7);
APPROX_EQ(res[2], 3*4., 1e-7);
}