@@ -21,40 +21,38 @@ for.body: ; preds = %entry, %for.body
21
21
}
22
22
23
23
; Function Attrs: nounwind uwtable
24
- define dso_local void @dsumsquare (double * %x , double * %xp , i64 %n ) local_unnamed_addr #1 {
24
+ define dso_local double @dsumsquare (double * %x , double * %xp , i64 %n ) local_unnamed_addr #1 {
25
25
entry:
26
- %0 = tail call double (double (double *, i64 )*, ...) @__enzyme_autodiff (double (double *, i64 )* nonnull @sumsquare , double * %x , double * %xp , i64 %n )
27
- ret void
26
+ %0 = tail call double (double (double *, i64 )*, ...) @__enzyme_fwddiff (double (double *, i64 )* nonnull @sumsquare , double * %x , double * %xp , i64 %n )
27
+ ret double %0
28
28
}
29
29
30
30
; Function Attrs: nounwind
31
- declare double @__enzyme_autodiff (double (double *, i64 )*, ...) #2
31
+ declare double @__enzyme_fwddiff (double (double *, i64 )*, ...) #2
32
32
33
33
attributes #0 = { norecurse nounwind readonly uwtable }
34
34
attributes #1 = { nounwind uwtable }
35
35
attributes #2 = { nounwind }
36
36
37
37
38
- ; CHECK: define dso_local void @dsumsquare(double* %x, double* %xp, i64 %n)
38
+ ; CHECK: define {{( dso_local )?}}double @dsumsquare(double* %x, double* %xp, i64 %n)
39
39
; CHECK-NEXT: entry:
40
- ; CHECK-NEXT: br label %invertfor.body.i
41
-
42
- ; CHECK: invertfor.body.i:
43
- ; CHECK-NEXT: %[[antiiv:.+]] = phi i64 [ %n, %entry ], [ %[[antiivnext:.+]], %incinvertfor.body.i ]
44
- ; CHECK-NEXT: %[[ptr:.+]] = getelementptr inbounds double, double* %x, i64 %[[antiiv]]
45
- ; CHECK-NEXT: %[[prev:.+]] = load double, double* %[[ptr]]
46
- ; CHECK-NEXT: %[[times2:.+]] = fadd fast double %[[prev]], %[[prev]]
47
- ; CHECK-NEXT: %[[arrayidxipgi:.+]] = getelementptr inbounds double, double* %xp, i64 %[[antiiv]]
48
- ; CHECK-NEXT: %[[loaded:.+]] = load double, double* %[[arrayidxipgi]]
49
- ; CHECK-NEXT: %[[tostore:.+]] = fadd fast double %[[loaded:.+]], %[[times2]]
50
- ; CHECK-NEXT: store double %[[tostore]], double* %[[arrayidxipgi]]
51
- ; CHECK-NEXT: %[[cmp:.+]] = icmp eq i64 %[[antiiv]], 0
52
- ; CHECK-NEXT: br i1 %[[cmp]], label %diffesumsquare.exit, label %incinvertfor.body.i
53
-
54
- ; CHECK: incinvertfor.body.i:
55
- ; CHECK-NEXT: %[[antiivnext]] = add nsw i64 %[[antiiv]], -1
56
- ; CHECK-NEXT: br label %invertfor.body.i
57
-
58
- ; CHECK: diffesumsquare.exit: ; preds = %invertfor.body.i
59
- ; CHECK-NEXT: ret void
60
- ; CHECK-NEXT: }
40
+ ; CHECK-NEXT: br label %for.body.i
41
+
42
+ ; CHECK: for.body.i: ; preds = %for.body.i, %entry
43
+ ; CHECK-NEXT: %iv.i = phi i64 [ %iv.next.i, %for.body.i ], [ 0, %entry ]
44
+ ; CHECK-NEXT: %"total.011'.i" = phi{{( fast)?}} double [ 0.000000e+00, %entry ], [ %4, %for.body.i ]
45
+ ; CHECK-NEXT: %iv.next.i = add nuw nsw i64 %iv.i, 1
46
+ ; CHECK-NEXT: %"arrayidx'ipg.i" = getelementptr inbounds double, double* %xp, i64 %iv.i
47
+ ; CHECK-NEXT: %arrayidx.i = getelementptr inbounds double, double* %x, i64 %iv.i
48
+ ; CHECK-NEXT: %0 = load double, double* %arrayidx.i, align 8
49
+ ; CHECK-NEXT: %1 = load double, double* %"arrayidx'ipg.i"
50
+ ; CHECK-NEXT: %2 = fmul fast double %1, %0
51
+ ; CHECK-NEXT: %3 = fadd fast double %2, %2
52
+ ; CHECK-NEXT: %4 = fadd fast double %3, %"total.011'.i"
53
+ ; CHECK-NEXT: %exitcond.i = icmp eq i64 %iv.i, %n
54
+ ; CHECK-NEXT: br i1 %exitcond.i, label %diffesumsquare.exit, label %for.body.i
55
+
56
+ ; CHECK: diffesumsquare.exit: ; preds = %for.body.i
57
+ ; CHECK-NEXT: ret double %4
58
+ ; CHECK-NEXT: }
0 commit comments