Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion enzyme/Enzyme/Enzyme.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3048,6 +3048,7 @@ std::pair<Function*,StructType*> CreateAugmentedPrimal(Function* todiff, AAResul
case Intrinsic::lifetime_end:
case Intrinsic::assume:
case Intrinsic::fabs:
case Intrinsic::maxnum:
case Intrinsic::log:
case Intrinsic::log2:
case Intrinsic::log10:
Expand Down Expand Up @@ -4048,10 +4049,22 @@ Function* CreatePrimalAndGradient(Function* todiff, const std::set<unsigned>& co
case Intrinsic::fabs: {
if (!gutils->isConstantInstruction(op) && !gutils->isConstantValue(op->getOperand(0))) {
auto cmp = Builder2.CreateFCmpOLT(lookup(op->getOperand(0)), ConstantFP::get(op->getOperand(0)->getType(), 0));
dif0 = Builder2.CreateSelect(cmp, ConstantFP::get(op->getOperand(0)->getType(), -1), ConstantFP::get(op->getOperand(0)->getType(), 1));
dif0 = Builder2.CreateFMul(Builder2.CreateSelect(cmp, ConstantFP::get(op->getOperand(0)->getType(), -1), ConstantFP::get(op->getOperand(0)->getType(), 1)), diffe(inst));
}
break;
}
case Intrinsic::maxnum: {
if (!gutils->isConstantInstruction(op) && !gutils->isConstantValue(op->getOperand(0))) {
auto cmp = Builder2.CreateFCmpOLT(lookup(op->getOperand(0)), lookup(op->getOperand(1)));
dif0 = Builder2.CreateSelect(cmp, ConstantFP::get(op->getOperand(0)->getType(), 0), diffe(inst));
}
if (!gutils->isConstantInstruction(op) && !gutils->isConstantValue(op->getOperand(1))) {
auto cmp = Builder2.CreateFCmpOLT(lookup(op->getOperand(0)), lookup(op->getOperand(1)));
dif1 = Builder2.CreateSelect(cmp, diffe(inst), ConstantFP::get(op->getOperand(0)->getType(), 0));
}
break;
}

case Intrinsic::log: {
if (!gutils->isConstantInstruction(op) && !gutils->isConstantValue(op->getOperand(0)))
dif0 = Builder2.CreateFDiv(diffe(inst), lookup(op->getOperand(0)));
Expand Down
8 changes: 1 addition & 7 deletions enzyme/test/Enzyme/add.ll
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,10 @@ entry:
ret double %0
}

; Function Attrs: nounwind readnone speculatable
declare double @llvm.cos.f64(double)

; Function Attrs: nounwind readnone speculatable
declare double @llvm.sin.f64(double)

; Function Attrs: nounwind
declare double @__enzyme_autodiff(double (double, double)*, ...)

; CHECK: define internal { double, double } @diffetester(double %x, double %y, double %[[differet:.+]])
; CHECK: define internal {{(dso_local )?}}{ double, double } @diffetester(double %x, double %y, double %[[differet:.+]])
; CHECK-NEXT: entry:
; CHECK-NEXT: %0 = insertvalue { double, double } undef, double %[[differet]], 0
; CHECK-NEXT: %1 = insertvalue { double, double } %0, double %[[differet]], 1
Expand Down
8 changes: 1 addition & 7 deletions enzyme/test/Enzyme/constant.ll
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,10 @@ entry:
ret double %0
}

; Function Attrs: nounwind readnone speculatable
declare double @llvm.cos.f64(double)

; Function Attrs: nounwind readnone speculatable
declare double @llvm.sin.f64(double)

; Function Attrs: nounwind
declare double @__enzyme_autodiff(double (double)*, ...)

; CHECK: define internal { double } @diffetester(double %x, double %[[differet:.+]])
; CHECK: define internal {{(dso_local )?}}{ double } @diffetester(double %x, double %[[differet:.+]])
; CHECK-NEXT: entry:
; CHECK-NEXT: ret { double } zeroinitializer
; CHECK-NEXT: }
8 changes: 1 addition & 7 deletions enzyme/test/Enzyme/div.ll
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,10 @@ entry:
ret double %0
}

; Function Attrs: nounwind readnone speculatable
declare double @llvm.cos.f64(double)

; Function Attrs: nounwind readnone speculatable
declare double @llvm.sin.f64(double)

; Function Attrs: nounwind
declare double @__enzyme_autodiff(double (double, double)*, ...)

; CHECK: define internal { double, double } @diffetester(double %x, double %y, double %[[differet:.+]])
; CHECK: define internal {{(dso_local )?}}{ double, double } @diffetester(double %x, double %y, double %[[differet:.+]])
; CHECK-NEXT: entry:
; CHECK-NEXT: %[[diffex:.+]] = fdiv fast double %[[differet]], %y
; CHECK-NEXT: %[[xdivy:.+]] = fdiv fast double %x, %y
Expand Down
8 changes: 5 additions & 3 deletions enzyme/test/Enzyme/fabs.ll
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
; RUN: opt < %s %loadEnzyme -enzyme -O3 -S | FileCheck %s
; RUN: opt < %s %loadEnzyme -enzyme -mem2reg -early-cse -simplifycfg -S | FileCheck %s

; Function Attrs: nounwind readnone uwtable
define double @tester(double %x) {
Expand All @@ -19,9 +19,11 @@ declare double @llvm.fabs.f64(double)
; Function Attrs: nounwind
declare double @__enzyme_autodiff(double (double)*, ...)

; CHECK: define double @test_derivative(double %x)
; CHECK: define internal {{(dso_local )?}}{ double } @diffetester(double %x, double %[[differet:.+]])
; CHECK-NEXT: entry:
; CHECK-NEXT: %0 = fcmp fast olt double %x, 0.000000e+00
; CHECK-NEXT: %1 = select i1 %0, double -1.000000e+00, double 1.000000e+00
; CHECK-NEXT: ret double %1
; CHECK-NEXT: %2 = fmul fast double %1, %[[differet]]
; CHECK-NEXT: %3 = insertvalue { double } undef, double %2, 0
; CHECK-NEXT: ret { double } %3
; CHECK-NEXT: }
2 changes: 1 addition & 1 deletion enzyme/test/Enzyme/itermax.ll
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ attributes #2 = { nounwind }
!5 = !{!"Simple C/C++ TBAA"}


; CHECK: define internal void @diffeiterA(double* noalias nocapture readonly %x, double* %"x'", i64 %n)
; CHECK: define internal {{(dso_local )?}}void @diffeiterA(double* noalias nocapture readonly %x, double* %"x'", i64 %n)
; CHECK-NEXT: entry:
; CHECK-NEXT: %exitcond11 = icmp eq i64 %n, 0
; CHECK-NEXT: br i1 %exitcond11, label %invertfor.cond.cleanup, label %for.body.for.body_crit_edge.preheader
Expand Down
3 changes: 0 additions & 3 deletions enzyme/test/Enzyme/max.ll
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@ entry:
ret double %0
}

; Function Attrs: nounwind readnone speculatable
declare double @llvm.pow.f64(double, double)

; Function Attrs: nounwind
declare double @__enzyme_autodiff(double (double, double)*, ...)

Expand Down
2 changes: 1 addition & 1 deletion enzyme/test/Enzyme/mul.ll
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ declare double @llvm.sin.f64(double)
; Function Attrs: nounwind
declare double @__enzyme_autodiff(double (double, double)*, ...)

; CHECK: define internal { double, double } @diffetester(double %x, double %y, double %[[differet:.+]])
; CHECK: define internal {{(dso_local )?}}{ double, double } @diffetester(double %x, double %y, double %[[differet:.+]])
; CHECK-NEXT: entry:
; CHECK-NEXT: %[[diffex:.+]] = fmul fast double %[[differet]], %y
; CHECK-NEXT: %[[diffey:.+]] = fmul fast double %[[differet]], %x
Expand Down
1 change: 0 additions & 1 deletion enzyme/test/Enzyme/op

This file was deleted.

Loading