blob: 53420e60ddf18a99a92afd3e047efc4c5d27a0ce [file] [log] [blame] [edit]
// RUN: %eopt --enzyme %s | FileCheck %s
module {
func.func @infinite(%x : f64, %y : f64) -> f64 {
cf.br ^bb1(%x: f64)
^bb1(%r: f64):
%c1 = arith.constant 1.0 : f64
%sum = arith.addf %r, %c1 : f64
%c = arith.cmpf ult, %x, %y : f64
cf.cond_br %c, ^bb1(%r : f64), ^bb2
^bb2:
return %sum : f64
}
func.func @dsq(%x : f64, %dx : f64, %y : f64, %dy : f64) -> f64 {
%r = enzyme.fwddiff @infinite(%x, %dx, %y, %dy) { activity=[#enzyme<activity enzyme_dup>, #enzyme<activity enzyme_dup>] } : (f64, f64, f64, f64) -> (f64)
return %r : f64
}
}
// CHECK-LABEL: func.func private @fwddiffeinfinite
// CHECK-SAME: (%[[ARG0:.+]]: f64, %[[ARG1:.+]]: f64, %[[ARG2:.+]]: f64, %[[ARG3:.+]]: f64) -> f64 {
// CHECK: cf.br ^[[BB1:.+]](%[[ARG0]], %[[ARG1]] : f64, f64)
// CHECK: ^[[BB1]](%[[V0:.+]]: f64, %[[V1:.+]]: f64):
// CHECK: cf.cond_br %{{.*}}, ^[[BB1]](%[[V0]], %[[V1]] : f64, f64), ^[[BB2:.+]]
// CHECK: ^[[BB2]]:
// CHECK: return %[[V1]]