1
+ ; RUN: if [ %llvmver -lt 16 ]; then %opt < %s %loadEnzyme -enzyme-preopt=false -enzyme -mem2reg -instsimplify -simplifycfg -S | FileCheck %s; fi
2
+ ; RUN: %opt < %s %newLoadEnzyme -enzyme-preopt=false -passes="enzyme,function(mem2reg,instsimplify,%simplifycfg)" -S | FileCheck %s
3
+
4
+ ; Function Attrs: mustprogress noinline nounwind optnone uwtable
5
+ define double @tester (double %x0 ) #0 {
6
+ entry:
7
+ %x2 = alloca double , align 8
8
+ %x3 = alloca fp128 , align 16
9
+ store double %x0 , double * %x2 , align 8
10
+ %x4 = load double , double * %x2 , align 8
11
+ %x5 = fpext double %x4 to fp128
12
+ store fp128 %x5 , fp128 * %x3 , align 16
13
+ %x6 = load fp128 , fp128 * %x3 , align 16
14
+ %x7 = fptrunc fp128 %x6 to double
15
+ ret double %x7
16
+ }
17
+
18
+ define double @test_derivative (double %x ) {
19
+ entry:
20
+ %0 = tail call double (double (double )*, ...) @__enzyme_autodiff (double (double )* nonnull @tester , double %x )
21
+ ret double %0
22
+ }
23
+
24
+ ; Function Attrs: nounwind
25
+ declare double @__enzyme_autodiff (double (double )*, ...)
26
+
27
+ ; CHECK: define internal { double } @diffetester(double %x0, double %differeturn)
28
+ ; CHECK-NEXT: entry:
29
+ ; CHECK-NEXT: %0 = insertvalue { double } undef, double %differeturn, 0
30
+ ; CHECK-NEXT: ret { double } %0
31
+ ; CHECK-NEXT: }
0 commit comments