Skip to content

Commit f0c3d43

Browse files
authored
Make forward mode return a struct only when needed (rust-lang#334)
1 parent 32206dd commit f0c3d43

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+140
-178
lines changed

enzyme/Enzyme/AdjointGenerator.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7604,10 +7604,14 @@ class AdjointGenerator
76047604
#endif
76057605

76067606
if (!newcalled->getReturnType()->isVoidTy()) {
7607-
unsigned structidx =
7608-
retUsed && subretType != DIFFE_TYPE::CONSTANT ? 1 : 0;
7607+
bool structret = retUsed && subretType != DIFFE_TYPE::CONSTANT;
76097608
auto newcall = gutils->getNewFromOriginal(orig);
7610-
Value *diffe = Builder2.CreateExtractValue(diffes, {structidx});
7609+
Value *diffe;
7610+
if (structret) {
7611+
diffe = Builder2.CreateExtractValue(diffes, 1);
7612+
} else {
7613+
diffe = diffes;
7614+
}
76117615
gutils->replaceAWithB(newcall, diffe);
76127616
gutils->erase(newcall);
76137617
if (!gutils->isConstantValue(&call))

enzyme/Enzyme/EnzymeLogic.cpp

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2214,22 +2214,24 @@ void createTerminator(DiffeGradientUtils *gutils, BasicBlock *oBB,
22142214
if (ReturnInst *inst = dyn_cast_or_null<ReturnInst>(oBB->getTerminator())) {
22152215
SmallVector<Value *, 2> retargs;
22162216

2217+
Value *toret = UndefValue::get(gutils->newFunc->getReturnType());
2218+
22172219
switch (retVal) {
22182220
case ReturnType::Return: {
22192221
auto ret = inst->getOperand(0);
2220-
if (retType == DIFFE_TYPE::CONSTANT) {
2221-
retargs.push_back(gutils->getNewFromOriginal(ret));
2222-
} else {
2223-
retargs.push_back(gutils->diffe(ret, nBuilder));
2224-
}
2222+
toret = retType == DIFFE_TYPE::CONSTANT ? gutils->getNewFromOriginal(ret)
2223+
: gutils->diffe(ret, nBuilder);
22252224
break;
22262225
}
22272226
case ReturnType::TwoReturns: {
22282227
if (retType == DIFFE_TYPE::CONSTANT)
22292228
assert(false && "Invalid return type");
22302229
auto ret = inst->getOperand(0);
2231-
retargs.push_back(gutils->getNewFromOriginal(ret));
2232-
retargs.push_back(gutils->diffe(ret, nBuilder));
2230+
2231+
toret =
2232+
nBuilder.CreateInsertValue(toret, gutils->getNewFromOriginal(ret), 0);
2233+
toret =
2234+
nBuilder.CreateInsertValue(toret, gutils->diffe(ret, nBuilder), 1);
22332235
break;
22342236
}
22352237
case ReturnType::Void: {
@@ -2246,12 +2248,6 @@ void createTerminator(DiffeGradientUtils *gutils, BasicBlock *oBB,
22462248
}
22472249
}
22482250

2249-
Value *toret = UndefValue::get(gutils->newFunc->getReturnType());
2250-
for (unsigned i = 0; i < retargs.size(); ++i) {
2251-
unsigned idx[] = {i};
2252-
toret = nBuilder.CreateInsertValue(toret, retargs[i], idx);
2253-
}
2254-
22552251
gutils->erase(gutils->getNewFromOriginal(inst));
22562252
nBuilder.CreateRet(toret);
22572253
return;

enzyme/Enzyme/FunctionUtils.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,6 +1592,11 @@ Function *PreProcessCache::CloneFunctionWithReturns(
15921592
RetTypes.push_back(F->getReturnType());
15931593
}
15941594
RetType = StructType::get(F->getContext(), RetTypes);
1595+
} else if (returnValue == ReturnType::Return) {
1596+
assert(RetTypes.size() == 1);
1597+
RetType = RetTypes[0];
1598+
} else if (returnValue == ReturnType::TwoReturns) {
1599+
assert(RetTypes.size() == 2);
15951600
}
15961601

15971602
bool noReturn = RetTypes.size() == 0;

enzyme/test/Enzyme/ForwardMode/add.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@ entry:
1616
; Function Attrs: nounwind
1717
declare double @__enzyme_fwddiff(double (double, double)*, ...)
1818

19-
; CHECK: define internal {{(dso_local )?}}{ double } @diffetester(double %x, double %"x'", double %y, double %"y'")
19+
; CHECK: define internal {{(dso_local )?}}double @diffetester(double %x, double %"x'", double %y, double %"y'")
2020
; CHECK-NEXT: entry:
2121
; CHECK-NEXT: %0 = fadd fast double %"x'", %"y'"
22-
; CHECK-NEXT: %1 = insertvalue { double } undef, double %0, 0
23-
; CHECK-NEXT: ret { double } %1
22+
; CHECK-NEXT: ret double %0
2423
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/badcallused.ll

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,34 +44,32 @@ attributes #1 = { noinline nounwind uwtable }
4444

4545
; CHECK: define internal {{(dso_local )?}}void @diffef(double* nocapture %x, double* nocapture %"x'")
4646
; CHECK-NEXT: entry:
47-
; CHECK-NEXT: %0 = call { i1 } @diffesubf(double* %x, double* %"x'")
48-
; CHECK-NEXT: %1 = extractvalue { i1 } %0, 0
49-
; CHECK-NEXT: %sel = select i1 %1, double 2.000000e+00, double 3.000000e+00
47+
; CHECK-NEXT: %0 = call i1 @diffesubf(double* %x, double* %"x'")
48+
; CHECK-NEXT: %sel = select i1 %0, double 2.000000e+00, double 3.000000e+00
5049
; CHECK-NEXT: store double %sel, double* %x, align 8
5150
; CHECK-NEXT: store double 0.000000e+00, double* %"x'", align 8
5251
; CHECK-NEXT: ret void
5352
; CHECK-NEXT: }
5453

55-
; CHECK: define internal {{(dso_local )?}}{ i1 } @diffesubf(double* nocapture %x, double* nocapture %"x'")
54+
; CHECK: define internal {{(dso_local )?}}i1 @diffesubf(double* nocapture %x, double* nocapture %"x'")
5655
; CHECK-NEXT: entry:
5756
; CHECK-NEXT: %0 = load double, double* %x, align 8
5857
; CHECK-NEXT: %1 = load double, double* %"x'"
5958
; CHECK-NEXT: %mul = fmul fast double %0, 2.000000e+00
6059
; CHECK-NEXT: %2 = fmul fast double %1, 2.000000e+00
6160
; CHECK-NEXT: store double %mul, double* %x, align 8
6261
; CHECK-NEXT: store double %2, double* %"x'", align 8
63-
; CHECK-NEXT: %3 = call { i1 } @diffemetasubf(double* %x, double* %"x'")
64-
; CHECK-NEXT: ret { i1 } %3
62+
; CHECK-NEXT: %3 = call i1 @diffemetasubf(double* %x, double* %"x'")
63+
; CHECK-NEXT: ret i1 %3
6564
; CHECK-NEXT: }
6665

67-
; CHECK: define internal {{(dso_local )?}}{ i1 } @diffemetasubf(double* nocapture %x, double* nocapture %"x'")
66+
; CHECK: define internal {{(dso_local )?}}i1 @diffemetasubf(double* nocapture %x, double* nocapture %"x'")
6867
; CHECK-NEXT: entry:
6968
; CHECK-NEXT: %"arrayidx'ipg" = getelementptr inbounds double, double* %"x'", i64 1
7069
; CHECK-NEXT: %arrayidx = getelementptr inbounds double, double* %x, i64 1
7170
; CHECK-NEXT: store double 3.000000e+00, double* %arrayidx, align 8
7271
; CHECK-NEXT: store double 0.000000e+00, double* %"arrayidx'ipg", align 8
7372
; CHECK-NEXT: %0 = load double, double* %x, align 8
7473
; CHECK-NEXT: %cmp = fcmp fast oeq double %0, 2.000000e+00
75-
; CHECK-NEXT: %1 = insertvalue { i1 } undef, i1 %cmp, 0
76-
; CHECK-NEXT: ret { i1 } %1
74+
; CHECK-NEXT: ret i1 %cmp
7775
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/badcallused2.ll

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,14 @@ attributes #1 = { noinline nounwind uwtable }
5353

5454
; CHECK: define internal {{(dso_local )?}}void @diffef(double* nocapture %x, double* nocapture %"x'")
5555
; CHECK-NEXT: entry:
56-
; CHECK-NEXT: %0 = call { i1 } @diffesubf(double* %x, double* %"x'")
57-
; CHECK-NEXT: %1 = extractvalue { i1 } %0, 0
58-
; CHECK-NEXT: %sel = select i1 %1, double 2.000000e+00, double 3.000000e+00
56+
; CHECK-NEXT: %0 = call i1 @diffesubf(double* %x, double* %"x'")
57+
; CHECK-NEXT: %sel = select i1 %0, double 2.000000e+00, double 3.000000e+00
5958
; CHECK-NEXT: store double %sel, double* %x, align 8
6059
; CHECK-NEXT: store double 0.000000e+00, double* %"x'", align 8
6160
; CHECK-NEXT: ret void
6261
; CHECK-NEXT: }
6362

64-
; CHECK: define internal {{(dso_local )?}}{ i1 } @diffesubf(double* nocapture %x, double* nocapture %"x'")
63+
; CHECK: define internal {{(dso_local )?}}i1 @diffesubf(double* nocapture %x, double* nocapture %"x'")
6564
; CHECK-NEXT: entry:
6665
; CHECK-NEXT: %0 = load double, double* %x, align 8
6766
; CHECK-NEXT: %1 = load double, double* %"x'"
@@ -70,8 +69,8 @@ attributes #1 = { noinline nounwind uwtable }
7069
; CHECK-NEXT: store double %mul, double* %x, align 8
7170
; CHECK-NEXT: store double %2, double* %"x'", align 8
7271
; CHECK-NEXT: call void @diffeomegasubf(double* %x, double* %"x'")
73-
; CHECK-NEXT: %3 = call { i1 } @diffemetasubf(double* %x, double* %"x'")
74-
; CHECK-NEXT: ret { i1 } %3
72+
; CHECK-NEXT: %3 = call i1 @diffemetasubf(double* %x, double* %"x'")
73+
; CHECK-NEXT: ret i1 %3
7574
; CHECK-NEXT: }
7675

7776
; CHECK: define internal {{(dso_local )?}}void @diffeomegasubf(double* nocapture %x, double* nocapture %"x'")
@@ -83,14 +82,13 @@ attributes #1 = { noinline nounwind uwtable }
8382
; CHECK-NEXT: ret void
8483
; CHECK-NEXT: }
8584

86-
; CHECK: define internal {{(dso_local )?}}{ i1 } @diffemetasubf(double* nocapture %x, double* nocapture %"x'")
85+
; CHECK: define internal {{(dso_local )?}}i1 @diffemetasubf(double* nocapture %x, double* nocapture %"x'")
8786
; CHECK-NEXT: entry:
8887
; CHECK-NEXT: %"arrayidx'ipg" = getelementptr inbounds double, double* %"x'", i64 1
8988
; CHECK-NEXT: %arrayidx = getelementptr inbounds double, double* %x, i64 1
9089
; CHECK-NEXT: store double 3.000000e+00, double* %arrayidx, align 8
9190
; CHECK-NEXT: store double 0.000000e+00, double* %"arrayidx'ipg", align 8
9291
; CHECK-NEXT: %0 = load double, double* %x, align 8
9392
; CHECK-NEXT: %cmp = fcmp fast oeq double %0, 2.000000e+00
94-
; CHECK-NEXT: %1 = insertvalue { i1 } undef, i1 %cmp, 0
95-
; CHECK-NEXT: ret { i1 } %1
93+
; CHECK-NEXT: ret i1 %cmp
9694
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/bitcast.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ entry:
1515

1616
declare double @__enzyme_fwddiff(double (double)*, ...)
1717

18-
; CHECK: define internal {{(dso_local )?}}{ double } @diffetester(double %x, double %"x'") {
18+
; CHECK: define internal {{(dso_local )?}}double @diffetester(double %x, double %"x'") {
1919
; CHECK-NEXT: entry:
20-
; CHECK-NEXT: %0 = insertvalue { double } undef, double %"x'", 0
21-
; CHECK-NEXT: ret { double } %0
20+
; CHECK-NEXT: ret double %"x'"
2221
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/bsearch.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ attributes #0 = { noinline norecurse nounwind uwtable }
4444
attributes #1 = { noinline nounwind uwtable }
4545

4646

47-
; CHECK: define internal { double } @diffef(double* nocapture %x, double* nocapture %"x'", i64 %n)
47+
; CHECK: define internal double @diffef(double* nocapture %x, double* nocapture %"x'", i64 %n)
4848
; CHECK-NEXT: entry:
4949
; CHECK-NEXT: br label %loop
5050

@@ -71,6 +71,5 @@ attributes #1 = { noinline nounwind uwtable }
7171
; CHECK-NEXT: br i1 %cmp2, label %loop, label %exit
7272

7373
; CHECK: exit: ; preds = %end
74-
; CHECK-NEXT: %2 = insertvalue { double } undef, double %1, 0
75-
; CHECK-NEXT: ret { double } %2
74+
; CHECK-NEXT: ret double %1
7675
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/bsearch2.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ attributes #0 = { noinline norecurse nounwind uwtable }
4747
attributes #1 = { noinline nounwind uwtable }
4848

4949

50-
; CHECK: define internal { double } @diffef(double* nocapture %x, double* nocapture %"x'", i64 %n)
50+
; CHECK: define internal double @diffef(double* nocapture %x, double* nocapture %"x'", i64 %n)
5151
; CHECK-NEXT: entry:
5252
; CHECK-NEXT: br label %loop
5353

@@ -77,6 +77,5 @@ attributes #1 = { noinline nounwind uwtable }
7777
; CHECK-NEXT: br i1 %cmp2, label %loop, label %exit
7878

7979
; CHECK: exit: ; preds = %end
80-
; CHECK-NEXT: %2 = insertvalue { double } undef, double %1, 0
81-
; CHECK-NEXT: ret { double } %2
80+
; CHECK-NEXT: ret double %1
8281
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/call.ll

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,13 @@ declare dso_local double @__enzyme_fwddiff(double (double)*, double, double)
4040

4141

4242

43-
; CHECK: define internal {{(dso_local )?}}{ double } @diffeadd4(double %x, double %"x'")
43+
; CHECK: define internal {{(dso_local )?}}double @diffeadd4(double %x, double %"x'")
4444
; CHECK-NEXT: entry:
45-
; CHECK-NEXT: %0 = call { double } @diffeadd2(double %x, double %"x'")
46-
; CHECK-NEXT: ret { double } %0
45+
; CHECK-NEXT: %0 = call fast double @diffeadd2(double %x, double %"x'")
46+
; CHECK-NEXT: ret double %0
4747
; CHECK-NEXT: }
4848

49-
; CHECK: define internal {{(dso_local )?}}{ double } @diffeadd2(double %x, double %"x'")
49+
; CHECK: define internal {{(dso_local )?}}double @diffeadd2(double %x, double %"x'")
5050
; CHECK-NEXT: entry:
51-
; CHECK-NEXT: %0 = insertvalue { double } undef, double %"x'", 0
52-
; CHECK-NEXT: ret { double } %0
51+
; CHECK-NEXT: ret double %"x'"
5352
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/callmod.ll

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,17 @@ attributes #4 = { nounwind }
9999
!4 = !{!"omnipotent char", !5, i64 0}
100100
!5 = !{!"Simple C/C++ TBAA"}
101101

102-
; CHECK: define internal {{(dso_local )?}}{ double } @diffefoo(double %x, double %"x'")
102+
; CHECK: define internal {{(dso_local )?}}double @diffefoo(double %x, double %"x'")
103103
; CHECK-NEXT: entry:
104-
; CHECK-NEXT: %0 = call { double } @diffesub(double %x, double %"x'")
104+
; CHECK-NEXT: %0 = call fast double @diffesub(double %x, double %"x'")
105105
; CHECK-NEXT: %call1 = tail call fast double @read2()
106-
; CHECK-NEXT: ret { double } %0
106+
; CHECK-NEXT: ret double %0
107107
; CHECK-NEXT: }
108108

109109

110-
; CHECK: define internal {{(dso_local )?}}{ double } @diffesub(double %x, double %"x'")
110+
; CHECK: define internal {{(dso_local )?}}double @diffesub(double %x, double %"x'")
111111
; CHECK-NEXT: entry:
112112
; CHECK-NEXT: %call = tail call fast double @readDouble()
113113
; CHECK-NEXT: %0 = fmul fast double %"x'", %call
114-
; CHECK-NEXT: %1 = insertvalue { double } undef, double %0, 0
115-
; CHECK-NEXT: ret { double } %1
114+
; CHECK-NEXT: ret double %0
116115
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/constant.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ entry:
1515
; Function Attrs: nounwind
1616
declare double @__enzyme_fwddiff(double (double)*, ...)
1717

18-
; CHECK: define internal {{(dso_local )?}}{ double } @diffetester(double %x, double %"x'")
18+
; CHECK: define internal {{(dso_local )?}}double @diffetester(double %x, double %"x'")
1919
; CHECK-NEXT: entry:
20-
; CHECK-NEXT: ret { double } zeroinitializer
20+
; CHECK-NEXT: ret double 0.000000e+00
2121
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/constselect.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,9 @@ attributes #4 = { nounwind }
4040
!0 = !{i32 1, !"wchar_size", i32 4}
4141
!1 = !{!"clang version 7.1.0 "}
4242

43-
; CHECK: define internal { double } @diffefun2(double %x, double %"x'")
43+
; CHECK: define internal double @diffefun2(double %x, double %"x'")
4444
; CHECK-NEXT: entry:
4545
; CHECK-NEXT: %cmp.inv = fcmp oge double %x, 0.000000e+00
4646
; CHECK-NEXT: %0 = select{{( fast)?}} i1 %cmp.inv, double %"x'", double 0.000000e+00
47-
; CHECK-NEXT: %1 = insertvalue { double } undef, double %0, 0
48-
; CHECK-NEXT: ret { double } %1
47+
; CHECK-NEXT: ret double %0
4948
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/cosh.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,9 @@ declare double @cosh(double)
1919
; Function Attrs: nounwind
2020
declare double @__enzyme_fwddiff(double (double)*, ...)
2121

22-
; CHECK: define internal { double } @diffetester(double %x, double %"x'")
22+
; CHECK: define internal double @diffetester(double %x, double %"x'")
2323
; CHECK-NEXT: entry:
2424
; CHECK-NEXT: %0 = call fast double @sinh(double %x)
2525
; CHECK-NEXT: %1 = fmul fast double %"x'", %0
26-
; CHECK-NEXT: %2 = insertvalue { double } undef, double %1, 0
27-
; CHECK-NEXT: ret { double } %2
26+
; CHECK-NEXT: ret double %1
2827
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/div.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,12 @@ entry:
1616
; Function Attrs: nounwind
1717
declare double @__enzyme_fwddiff(double (double, double)*, ...)
1818

19-
; CHECK: define internal {{(dso_local )?}}{ double } @diffetester(double %x, double %"x'", double %y, double %"y'")
19+
; CHECK: define internal {{(dso_local )?}}double @diffetester(double %x, double %"x'", double %y, double %"y'")
2020
; CHECK-NEXT: entry:
2121
; CHECK-NEXT: %0 = fmul fast double %"x'", %y
2222
; CHECK-NEXT: %1 = fmul fast double %x, %"y'"
2323
; CHECK-NEXT: %2 = fsub fast double %0, %1
2424
; CHECK-NEXT: %3 = fmul fast double %y, %y
2525
; CHECK-NEXT: %4 = fdiv fast double %2, %3
26-
; CHECK-NEXT: %5 = insertvalue { double } undef, double %4, 0
27-
; CHECK-NEXT: ret { double } %5
26+
; CHECK-NEXT: ret double %4
2827
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/divreduce.ll

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ declare double @__enzyme_fwddiff2(i8*, double*, double*, i64)
6060
!7 = !{!"any pointer", !4, i64 0}
6161

6262

63-
; CHECK: define internal { double } @diffealldiv(double* nocapture readonly %A, double* nocapture %"A'", i64 %N, double %start, double %"start'")
63+
; CHECK: define internal double @diffealldiv(double* nocapture readonly %A, double* nocapture %"A'", i64 %N, double %start, double %"start'")
6464
; CHECK-NEXT: entry:
6565
; CHECK-NEXT: br label %loop
6666

@@ -83,12 +83,11 @@ declare double @__enzyme_fwddiff2(i8*, double*, double*, i64)
8383
; CHECK-NEXT: br i1 %cmp, label %end, label %loop
8484

8585
; CHECK: end: ; preds = %loop
86-
; CHECK-NEXT: %6 = insertvalue { double } undef, double %5, 0
87-
; CHECK-NEXT: ret { double } %6
86+
; CHECK-NEXT: ret double %5
8887
; CHECK-NEXT: }
8988

9089

91-
; CHECK: define internal { double } @diffealldiv2(double* nocapture readonly %A, double* nocapture %"A'", i64 %N)
90+
; CHECK: define internal double @diffealldiv2(double* nocapture readonly %A, double* nocapture %"A'", i64 %N)
9291
; CHECK-NEXT: entry:
9392
; CHECK-NEXT: br label %loop
9493

@@ -111,6 +110,5 @@ declare double @__enzyme_fwddiff2(i8*, double*, double*, i64)
111110
; CHECK-NEXT: br i1 %cmp, label %end, label %loop
112111

113112
; CHECK: end: ; preds = %loop
114-
; CHECK-NEXT: %6 = insertvalue { double } undef, double %5, 0
115-
; CHECK-NEXT: ret { double } %6
113+
; CHECK-NEXT: ret double %5
116114
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/divreduce2.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ declare double @__enzyme_fwddiff(i8*, double*, double*, i64, double, double)
4545
!7 = !{!"any pointer", !4, i64 0}
4646

4747

48-
; CHECK: define internal { double } @diffealldiv(double* nocapture readonly %A, double* nocapture %"A'", i64 %N, double %start, double %"start'")
48+
; CHECK: define internal double @diffealldiv(double* nocapture readonly %A, double* nocapture %"A'", i64 %N, double %start, double %"start'")
4949
; CHECK-NEXT: entry:
5050
; CHECK-NEXT: br label %loop
5151

@@ -71,6 +71,5 @@ declare double @__enzyme_fwddiff(i8*, double*, double*, i64, double, double)
7171
; CHECK-NEXT: br label %loop
7272

7373
; CHECK: end: ; preds = %loop
74-
; CHECK-NEXT: %6 = insertvalue { double } undef, double %"reduce'", 0
75-
; CHECK-NEXT: ret { double } %6
74+
; CHECK-NEXT: ret double %"reduce'"
7675
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/enzyme_inactive.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ declare double @__enzyme_fwddiff(double (double)*, ...)
2020

2121
attributes #0 = { "enzyme_inactive" }
2222

23-
; CHECK: define internal {{(dso_local )?}}{ double } @diffetester(double %x, double %"x'")
23+
; CHECK: define internal {{(dso_local )?}}double @diffetester(double %x, double %"x'")
2424
; CHECK-NEXT: entry:
2525
; CHECK-NEXT: tail call void @myprint(double %x)
26-
; CHECK-NEXT: %0 = insertvalue { double } undef, double %"x'", 0
27-
; CHECK-NEXT: ret { double } %0
26+
; CHECK-NEXT: ret double %"x'"
2827
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardMode/enzyme_inactive2.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ declare double @__enzyme_fwddiff(double (double)*, ...)
2020

2121
attributes #0 = { "enzyme_inactive" }
2222

23-
; CHECK: define internal {{(dso_local )?}}{ double } @diffetester(double %x, double %"x'")
23+
; CHECK: define internal {{(dso_local )?}}double @diffetester(double %x, double %"x'")
2424
; CHECK-NEXT: entry:
2525
; CHECK-NEXT: tail call void @myprint(double %x)
26-
; CHECK-NEXT: %0 = insertvalue { double } undef, double %"x'", 0
27-
; CHECK-NEXT: ret { double } %0
26+
; CHECK-NEXT: ret double %"x'"
2827
; CHECK-NEXT: }

0 commit comments

Comments
 (0)