Skip to content

Commit 16ed986

Browse files
vchuravywsmoses
andauthored
Don't free a gurantueed null-pointer (rust-lang#595)
* Don't free a gurantueed null-pointer * Handle hypot * Remove vec free Co-authored-by: William S. Moses <[email protected]>
1 parent 3e5c6c0 commit 16ed986

Some content is hidden

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

54 files changed

+17
-61
lines changed

enzyme/Enzyme/EnzymeLogic.cpp

+17-7
Original file line numberDiff line numberDiff line change
@@ -3084,9 +3084,13 @@ Function *EnzymeLogic::CreatePrimalAndGradient(
30843084
MDNode::get(truetape->getContext(), {}));
30853085

30863086
if (key.freeMemory) {
3087-
CallInst *ci = cast<CallInst>(CallInst::CreateFree(tape, BB));
3088-
bb.Insert(ci);
3089-
ci->addAttribute(AttributeList::FirstArgIndex, Attribute::NonNull);
3087+
auto size = NewF->getParent()->getDataLayout().getTypeAllocSizeInBits(
3088+
aug.tapeType);
3089+
if (size != 0) {
3090+
CallInst *ci = cast<CallInst>(CallInst::CreateFree(tape, BB));
3091+
bb.Insert(ci);
3092+
ci->addAttribute(AttributeList::FirstArgIndex, Attribute::NonNull);
3093+
}
30903094
}
30913095
tape = truetape;
30923096
}
@@ -4135,10 +4139,16 @@ Function *EnzymeLogic::CreateForwardDiff(
41354139
additionalValue = truetape;
41364140
} else {
41374141
if (gutils->FreeMemory) {
4138-
CallInst *ci = cast<CallInst>(
4139-
CallInst::CreateFree(additionalValue, gutils->inversionAllocs));
4140-
ci->addAttribute(AttributeList::FirstArgIndex, Attribute::NonNull);
4141-
BuilderZ.Insert(ci);
4142+
auto size = gutils->newFunc->getParent()
4143+
->getDataLayout()
4144+
.getTypeAllocSizeInBits(augmenteddata->tapeType);
4145+
if (size != 0) {
4146+
CallInst *ci = cast<CallInst>(CallInst::CreateFree(
4147+
additionalValue, gutils->inversionAllocs));
4148+
ci->addAttribute(AttributeList::FirstArgIndex,
4149+
Attribute::NonNull);
4150+
BuilderZ.Insert(ci);
4151+
}
41424152
}
41434153
additionalValue = UndefValue::get(augmenteddata->tapeType);
41444154
}

enzyme/test/Enzyme/ForwardModeSplit/Faddeeva_erf.ll

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ declare { double, double } @__enzyme_fwdsplit({ double, double } ({ double, doub
2020

2121
; CHECK: define internal { double, double } @fwddiffetester({ double, double } %in, { double, double } %"in'", i8* %tapeArg)
2222
; CHECK-NEXT: entry:
23-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2423
; CHECK-NEXT: %0 = extractvalue { double, double } %in, 0
2524
; CHECK-NEXT: %1 = extractvalue { double, double } %in, 1
2625
; CHECK-DAG: %[[a2:.+]] = fmul fast double %0, %0

enzyme/test/Enzyme/ForwardModeSplit/Faddeeva_erfc.ll

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ declare { double, double } @__enzyme_fwdsplit({ double, double } ({ double, doub
2020

2121
; CHECK: define internal { double, double } @fwddiffetester({ double, double } %in, { double, double } %"in'", i8* %tapeArg)
2222
; CHECK-NEXT: entry:
23-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2423
; CHECK-NEXT: %0 = extractvalue { double, double } %in, 0
2524
; CHECK-NEXT: %1 = extractvalue { double, double } %in, 1
2625
; CHECK-DAG: %[[a2:.+]] = fmul fast double %0, %0

enzyme/test/Enzyme/ForwardModeSplit/Faddeeva_erfi.ll

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ declare { double, double } @__enzyme_fwdsplit({ double, double } ({ double, doub
2020

2121
; CHECK: define internal { double, double } @fwddiffetester({ double, double } %in, { double, double } %"in'", i8* %tapeArg)
2222
; CHECK-NEXT: entry:
23-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2423
; CHECK-NEXT: %0 = extractvalue { double, double } %in, 0
2524
; CHECK-NEXT: %1 = extractvalue { double, double } %in, 1
2625
; CHECK-DAG: %[[a2:.+]] = fmul fast double %0, %0

enzyme/test/Enzyme/ForwardModeSplit/add.ll

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ declare double @__enzyme_fwdsplit(double (double, double)*, ...)
2323

2424
; CHECK: define internal double @fwddiffetester(double %x, double %"x'", double %y, double %"y'", i8* %tapeArg)
2525
; CHECK-NEXT: entry:
26-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2726
; CHECK-NEXT: %0 = fadd fast double %"x'", %"y'"
2827
; CHECK-NEXT: ret double %0
2928
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/addOneMem.ll

-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,5 @@ declare double @__enzyme_fwdsplit(void (double*)*, ...)
4141

4242
; CHECK: define {{(dso_local )?}}void @test_derivative(double* %x, double* %xp, i8* %tape)
4343
; CHECK-NEXT: entry:
44-
; CHECK-NEXT: call void @free(i8* nonnull %tape)
4544
; CHECK-NEXT: ret void
4645
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/badcall.ll

-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ attributes #1 = { noinline nounwind uwtable }
4242

4343
; CHECK: define internal {{(dso_local )?}}void @fwddiffef(double* nocapture %x, double* nocapture %"x'", i8* %tapeArg)
4444
; CHECK-NEXT: entry:
45-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
4645
; CHECK-NEXT: call void @fwddiffesubf(double* %x, double* %"x'")
4746
; CHECK-NEXT: store double 0.000000e+00, double* %"x'"
4847
; CHECK-NEXT: ret void

enzyme/test/Enzyme/ForwardModeSplit/badcall2.ll

-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ declare dso_local double @__enzyme_fwdsplit(i8*, double*, double*, i8*) local_un
5151

5252
; CHECK: define internal {{(dso_local )?}}void @fwddiffef(double* nocapture %x, double* nocapture %"x'", i8* %tapeArg)
5353
; CHECK-NEXT: entry:
54-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
5554
; CHECK-NEXT: call void @fwddiffesubf(double* %x, double* %"x'")
5655
; CHECK-NEXT: store double 0.000000e+00, double* %"x'", align 8
5756
; CHECK-NEXT: ret void

enzyme/test/Enzyme/ForwardModeSplit/badcall3.ll

-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ declare dso_local double @__enzyme_fwdsplit(i8*, double*, double*, i8*) local_un
5050

5151
; CHECK: define internal {{(dso_local )?}}void @fwddiffef(double* nocapture %x, double* nocapture %"x'", i8* %tapeArg)
5252
; CHECK-NEXT: entry:
53-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
5453
; CHECK-NEXT: call void @fwddiffesubf(double* %x, double* %"x'")
5554
; CHECK-NEXT: store double 0.000000e+00, double* %"x'", align 8
5655
; CHECK-NEXT: ret void

enzyme/test/Enzyme/ForwardModeSplit/badcall4.ll

-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ declare dso_local double @__enzyme_fwdsplit(i8*, double*, double*, i8*) local_un
5252

5353
; CHECK: define internal {{(dso_local )?}}void @fwddiffef(double* nocapture %x, double* nocapture %"x'", i8* %tapeArg)
5454
; CHECK-NEXT: entry:
55-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
5655
; CHECK-NEXT: call void @fwddiffesubf(double* %x, double* %"x'")
5756
; CHECK-NEXT: store double 0.000000e+00, double* %"x'"
5857
; CHECK-NEXT: ret void

enzyme/test/Enzyme/ForwardModeSplit/badcallused.ll

-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ attributes #1 = { noinline nounwind uwtable }
4444

4545
; CHECK: define internal {{(dso_local )?}}void @fwddiffef(double* nocapture %x, double* nocapture %"x'", i8* %tapeArg)
4646
; CHECK-NEXT: entry:
47-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
4847
; CHECK-NEXT: call void @fwddiffesubf(double* %x, double* %"x'")
4948
; CHECK-NEXT: store double 0.000000e+00, double* %"x'", align 8
5049
; CHECK-NEXT: ret void

enzyme/test/Enzyme/ForwardModeSplit/badcallused2.ll

-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ attributes #1 = { noinline nounwind uwtable }
5353

5454
; CHECK: define internal {{(dso_local )?}}void @fwddiffef(double* nocapture %x, double* nocapture %"x'", i8* %tapeArg)
5555
; CHECK-NEXT: entry:
56-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
5756
; CHECK-NEXT: call void @fwddiffesubf(double* %x, double* %"x'")
5857
; CHECK-NEXT: store double 0.000000e+00, double* %"x'", align 8
5958
; CHECK-NEXT: ret void

enzyme/test/Enzyme/ForwardModeSplit/bitcast.ll

-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,5 @@ declare double @__enzyme_fwdsplit(double (double)*, ...)
1717

1818
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
1919
; CHECK-NEXT: entry:
20-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2120
; CHECK-NEXT: ret double %"x'"
2221
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/call.ll

-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ declare dso_local double @__enzyme_fwdsplit(double (double)*, double, double, i8
4242

4343
; CHECK: define internal {{(dso_local )?}}double @fwddiffeadd4(double %x, double %"x'", i8* %tapeArg)
4444
; CHECK-NEXT: entry:
45-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
4645
; CHECK-NEXT: %0 = call fast double @fwddiffeadd2(double %x, double %"x'")
4746
; CHECK-NEXT: ret double %0
4847
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/constant.ll

-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,5 @@ declare double @__enzyme_fwdsplit(double (double)*, ...)
1717

1818
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
1919
; CHECK-NEXT: entry:
20-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2120
; CHECK-NEXT: ret double 0.000000e+00
2221
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/constselect.ll

-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ attributes #4 = { nounwind }
4242

4343
; CHECK: define internal double @fwddiffefun2(double %x, double %"x'", i8* %tapeArg)
4444
; CHECK-NEXT: entry:
45-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
4645
; CHECK-NEXT: %cmp.inv = fcmp oge double %x, 0.000000e+00
4746
; CHECK-NEXT: %0 = select{{( fast)?}} i1 %cmp.inv, double %"x'", double 0.000000e+00
4847
; CHECK-NEXT: ret double %0

enzyme/test/Enzyme/ForwardModeSplit/cosh.ll

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ declare double @__enzyme_fwdsplit(double (double)*, ...)
2121

2222
; CHECK: define internal double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
2323
; CHECK-NEXT: entry:
24-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2524
; CHECK-NEXT: %0 = call fast double @sinh(double %x)
2625
; CHECK-NEXT: %1 = fmul fast double %"x'", %0
2726
; CHECK-NEXT: ret double %1

enzyme/test/Enzyme/ForwardModeSplit/div.ll

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ declare double @__enzyme_fwdsplit(double (double, double)*, ...)
1818

1919
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %"x'", double %y, double %"y'", i8* %tapeArg)
2020
; CHECK-NEXT: entry:
21-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2221
; CHECK-NEXT: %0 = fmul fast double %"x'", %y
2322
; CHECK-NEXT: %1 = fmul fast double %x, %"y'"
2423
; CHECK-NEXT: %2 = fsub fast double %0, %1

enzyme/test/Enzyme/ForwardModeSplit/enzyme_inactive.ll

-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,5 @@ attributes #0 = { "enzyme_inactive" }
2222

2323
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
2424
; CHECK-NEXT: entry:
25-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2625
; CHECK-NEXT: ret double %"x'"
2726
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/enzyme_inactive2.ll

-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,5 @@ attributes #0 = { "enzyme_inactive" }
2222

2323
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
2424
; CHECK-NEXT: entry:
25-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2625
; CHECK-NEXT: ret double %"x'"
2726
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/erf.ll

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ declare double @__enzyme_fwdsplit(double (double)*, ...)
1919

2020
; CHECK: define internal double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
2121
; CHECK-NEXT: entry:
22-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2322
; CHECK-NEXT: %0 = fmul fast double %x, %x
2423
; CHECK-NEXT: %1 = {{(fsub fast double \-?0.000000e\+00,|fneg fast double)}} %0
2524
; CHECK-NEXT: %2 = call fast double @llvm.exp.f64(double %1)

enzyme/test/Enzyme/ForwardModeSplit/erfc.ll

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ declare double @__enzyme_fwdsplit(double (double)*, ...)
1919

2020
; CHECK: define internal double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
2121
; CHECK-NEXT: entry:
22-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2322
; CHECK-NEXT: %0 = fmul fast double %x, %x
2423
; CHECK-NEXT: %1 = {{(fsub fast double \-?0.000000e\+00,|fneg fast double)}} %0
2524
; CHECK-NEXT: %2 = call fast double @llvm.exp.f64(double %1)

enzyme/test/Enzyme/ForwardModeSplit/erfi.ll

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ declare double @__enzyme_fwdsplit(double (double)*, ...)
1919

2020
; CHECK: define internal double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
2121
; CHECK-NEXT: entry:
22-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2322
; CHECK-NEXT: %0 = fmul fast double %x, %x
2423
; CHECK-NEXT: %1 = call fast double @llvm.exp.f64(double %0)
2524
; CHECK-NEXT: %2 = fmul fast double %1, 0x3FF20DD750429B6D

enzyme/test/Enzyme/ForwardModeSplit/experimental_vector_reduce_v2_fadd.ll

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ declare float @__enzyme_fwdsplit(float (float, <4 x float>)*, ...)
2020

2121
; CHECK: define internal {{(dso_local )?}}float @fwddiffetester(float %start_value, float %"start_value'", <4 x float> %input, <4 x float> %"input'", i8* %tapeArg)
2222
; CHECK-NEXT: entry:
23-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2423
; CHECK-NEXT: %0 = call fast float @llvm.experimental.vector.reduce.v2.fadd.f32.v4f32(float %"start_value'", <4 x float> %"input'")
2524
; CHECK-NEXT: ret float %0
2625
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/fabs.ll

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ declare double @__enzyme_fwdsplit(double (double)*, ...)
2121

2222
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %[[differet:.+]], i8* %tapeArg)
2323
; CHECK-NEXT: entry:
24-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2524
; CHECK-NEXT: %0 = fcmp fast olt double %x, 0.000000e+00
2625
; CHECK-NEXT: %1 = select{{( fast)?}} i1 %0, double -1.000000e+00, double 1.000000e+00
2726
; CHECK-NEXT: %2 = fmul fast double %1, %[[differet]]

enzyme/test/Enzyme/ForwardModeSplit/fneg.ll

-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ declare double @__enzyme_fwdsplit(double (double)*, double, double, i8*)
2525

2626

2727
; CHECK: define internal double @fwddiffefneg(double %x, double %"x'", i8* %tapeArg)
28-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2928
; CHECK-NEXT: %1 = fneg fast double %"x'"
3029
; CHECK-NEXT: ret double %1
3130
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/fpext.ll

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ declare double @__enzyme_fwdsplit(double (float)*, ...)
1616

1717
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(float %x, float %"x'", i8* %tapeArg)
1818
; CHECK-NEXT: entry:
19-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2019
; CHECK-NEXT: %0 = fpext float %"x'" to double
2120
; CHECK-NEXT: ret double %0
2221
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/hypot.ll

-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ declare double @__enzyme_fwdsplit(...)
2727

2828
; CHECK-LABEL: define internal double @fwddiffetester(
2929
; CHECK-NEXT: entry:
30-
; CHECK-NEXT: tail call void @free(i8* {{(nonnull )?}}%tapeArg)
3130
; CHECK-NEXT: %0 = call fast double @hypot(double %x, double %y)
3231
; CHECK-NEXT: %1 = fmul fast double %x, %"x'"
3332
; CHECK-NEXT: %2 = fmul fast double %y, %"y'"
@@ -38,7 +37,6 @@ declare double @__enzyme_fwdsplit(...)
3837

3938
; CHECK-LABEL: define internal double @fwddiffetester2(
4039
; CHECK-NEXT: entry:
41-
; CHECK-NEXT: tail call void @free(i8* {{(nonnull )?}}%tapeArg)
4240
; CHECK-NEXT: %0 = call fast double @hypot(double %x, double 2.000000e+00)
4341
; CHECK-NEXT: %1 = fmul fast double %x, %"x'"
4442
; CHECK-NEXT: %2 = fdiv fast double %1, %0

enzyme/test/Enzyme/ForwardModeSplit/insertvalue.ll

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ declare double @__enzyme_fwdsplit(double (double)*, ...)
2323

2424
; CHECK: define internal double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
2525
; CHECK-NEXT: entry:
26-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2726
; CHECK-NEXT: %0 = fmul fast double %"x'", %x
2827
; CHECK-NEXT: %1 = fmul fast double %"x'", %x
2928
; CHECK-NEXT: %2 = fadd fast double %0, %1

enzyme/test/Enzyme/ForwardModeSplit/intsum.ll

-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ declare double @__enzyme_fwdsplit(void (float*, float*)*, ...) #2
3434

3535
; CHECK: define internal void @fwddiffesum(float* %array, float* %"array'", float* %ret, float* %"ret'", i8* %tapeArg)
3636
; CHECK-NEXT: entry:
37-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
3837
; CHECK-NEXT: br label %do.body
3938

4039
; CHECK: do.body: ; preds = %do.body, %entry

enzyme/test/Enzyme/ForwardModeSplit/maskedload.ll

-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ declare <2 x double> @__enzyme_fwdsplit.f64(...)
2424

2525
; CHECK: define internal <2 x double> @fwddiffeloader(<2 x double>* %ptr, <2 x double>* %"ptr'", <2 x i1> %mask, <2 x double> %other, <2 x double> %"other'", i8* %tapeArg)
2626
; CHECK-NEXT: entry:
27-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2827
; CHECK-NEXT: %0 = call fast <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %"ptr'", i32 16, <2 x i1> %mask, <2 x double> %"other'")
2928
; CHECK-NEXT: ret <2 x double> %0
3029
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/maskedstore.ll

-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ declare <2 x double> @__enzyme_fwdsplit.f64(...)
2424

2525
; CHECK: define internal void @fwddiffeloader(<2 x double>* %ptr, <2 x double>* %"ptr'", <2 x i1> %mask, <2 x double> %val, <2 x double> %"val'", i8* %tapeArg)
2626
; CHECK-NEXT: entry:
27-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2827
; CHECK-NEXT: call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %"val'", <2 x double>* %"ptr'", i32 16, <2 x i1> %mask)
2928
; CHECK-NEXT: ret void
3029
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/max.ll

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ declare double @__enzyme_fwdsplit(double (double, double)*, ...)
2121

2222
; CHECK: define internal double @fwddiffemax(double %x, double %"x'", double %y, double %"y'", i8* %tapeArg)
2323
; CHECK-NEXT: entry:
24-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2524
; CHECK-NEXT: %cmp = fcmp fast ogt double %x, %y
2625
; CHECK-NEXT: %0 = select {{(fast )?}}i1 %cmp, double %"x'", double %"y'"
2726
; CHECK-NEXT: ret double %0

enzyme/test/Enzyme/ForwardModeSplit/maxnum-inactive.ll

-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ declare double @__enzyme_fwdsplit(double (double, double)*, ...)
2222

2323
; CHECK: define internal double @fwddiffetester(double %x, double %"x'", double %y, i8* %tapeArg)
2424
; CHECK-NEXT: entry:
25-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2625
; CHECK-NEXT: %0 = fcmp fast olt double %x, %y
2726
; CHECK-NEXT: %1 = select {{(fast )?}}i1 %0, double %"x'", double 0.000000e+00
2827
; CHECK-NEXT: ret double %1

enzyme/test/Enzyme/ForwardModeSplit/maxnum.ll

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ declare double @__enzyme_fwdsplit(double (double, double)*, ...)
2121

2222
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %"x'", double %y, double %"y'", i8* %tapeArg)
2323
; CHECK-NEXT: entry:
24-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2524
; CHECK-NEXT: %0 = fcmp fast olt double %x, %y
2625
; CHECK-NEXT: %1 = select {{(fast )?}}i1 %0, double %"x'", double %"y'"
2726
; CHECK-NEXT: ret double %1

enzyme/test/Enzyme/ForwardModeSplit/memcpy-flt.ll

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ attributes #2 = { noinline nounwind uwtable }
2929

3030
; CHECK: define internal void @fwddiffememcpy_float(double* nocapture %dst, double* nocapture %"dst'", double* nocapture readonly %src, double* nocapture %"src'", i64 %num, i8* %tapeArg)
3131
; CHECK-NEXT: entry:
32-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
3332
; CHECK-NEXT: %"'ipc" = bitcast double* %"dst'" to i8*
3433
; CHECK-NEXT: %"'ipc2" = bitcast double* %"src'" to i8*
3534
; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %"'ipc", i8* align 1 %"'ipc2", i64 %num, i1 false)

enzyme/test/Enzyme/ForwardModeSplit/memcpy-intstruct.ll

-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,5 @@ attributes #0 = { argmemonly nounwind }
3333

3434
; CHECK: define internal void @fwddiffememcpy_ptr(i8* nocapture %dst, i8* nocapture %"dst'", i8* nocapture readonly %src, i8* nocapture %"src'", i64 %num, i8* %tapeArg)
3535
; CHECK-NEXT: entry:
36-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
3736
; CHECK-NEXT: ret void
3837
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/memcpy-ptr.ll

-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,5 @@ attributes #3 = { nounwind }
3030

3131
; CHECK: define internal void @fwddiffememcpy_ptr(double** nocapture %dst, double** nocapture %"dst'", double** nocapture readonly %src, double** nocapture %"src'", i64 %num, i8* %tapeArg)
3232
; CHECK-NEXT: entry:
33-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
3433
; CHECK-NEXT: ret void
3534
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/minnum.ll

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ declare double @__enzyme_fwdsplit(double (double, double)*, ...)
1818

1919
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %"x'", double %y, double %"y'", i8* %tapeArg)
2020
; CHECK-NEXT: entry:
21-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2221
; CHECK-NEXT: %0 = fcmp fast olt double %x, %y
2322
; CHECK-NEXT: %1 = select{{( fast)?}} i1 %0, double %"x'", double %"y'"
2423
; CHECK-NEXT: ret double %1

enzyme/test/Enzyme/ForwardModeSplit/mul.ll

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ declare double @__enzyme_fwdsplit(double (double, double)*, ...)
1818

1919
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %"x'", double %y, double %"y'", i8* %tapeArg)
2020
; CHECK-NEXT: entry:
21-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2221
; CHECK-NEXT: %0 = fmul fast double %"x'", %y
2322
; CHECK-NEXT: %1 = fmul fast double %"y'", %x
2423
; CHECK-NEXT: %2 = fadd fast double %0, %1

enzyme/test/Enzyme/ForwardModeSplit/negbithack.ll

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ declare double @__enzyme_fwdsplit(double (double)*, ...)
2020

2121
; CHECK: define internal double @fwddiffetester(double %x, double %"x'", i8* %tapeArg)
2222
; CHECK-NEXT: entry:
23-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2423
; CHECK-NEXT: %0 = {{(fsub fast double \-?0.000000e\+00,|fneg fast double)}} %"x'"
2524
; CHECK-NEXT: ret double %0
2625
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/negbithack2.ll

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ declare <2 x double> @__enzyme_fwdsplit(<2 x double> (<2 x double>)*, ...)
2020

2121
; CHECK: define internal <2 x double> @fwddiffetester(<2 x double> %x, <2 x double> %"x'", i8* %tapeArg)
2222
; CHECK-NEXT: entry:
23-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2423
; CHECK-NEXT: %0 = {{(fsub fast <2 x double> <double \-?0.000000e\+00, double \-?0.000000e\+00>,|fneg fast <2 x double>)}} %"x'"
2524
; CHECK-NEXT: ret <2 x double> %0
2625
; CHECK-NEXT: }

enzyme/test/Enzyme/ForwardModeSplit/negbithack3.ll

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ declare <2 x double> @__enzyme_fwdsplit(<2 x double> (<2 x double>)*, ...)
2020

2121
; CHECK: define internal <2 x double> @fwddiffetester(<2 x double> %x, <2 x double> %"x'", i8* %tapeArg)
2222
; CHECK-NEXT: entry:
23-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2423
; CHECK-NEXT: %0 = bitcast <2 x double> %"x'" to <2 x i64>
2524
; CHECK-NEXT: %1 = extractelement <2 x i64> %0, i64 0
2625
; CHECK-NEXT: %2 = bitcast i64 %1 to double

enzyme/test/Enzyme/ForwardModeSplit/pow.ll

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ declare double @__enzyme_fwdsplit(double (double, double)*, ...)
2121

2222
; CHECK: define internal {{(dso_local )?}}double @fwddiffetester(double %x, double %"x'", double %y, double %"y'", i8* %tapeArg)
2323
; CHECK-NEXT: entry:
24-
; CHECK-NEXT: tail call void @free(i8* nonnull %tapeArg)
2524
; CHECK-NEXT: %[[i0:.+]] = fsub fast double %y, 1.000000e+00
2625
; CHECK-NEXT: %[[i1:.+]] = call fast double @llvm.pow.f64(double %x, double %[[i0]])
2726
; CHECK-NEXT: %[[i2:.+]] = fmul fast double %y, %[[i1]]

0 commit comments

Comments
 (0)