|
| 1 | +; RUN: %opt < %s %loadEnzyme -enzyme -enzyme-preopt=false -mem2reg -early-cse -simplifycfg -S | FileCheck %s |
| 2 | + |
| 3 | +define <2 x double> @pmax(<2 x double> %a, <2 x double> %b) { |
| 4 | + %r = call <2 x double> asm "maxpd $1, $0", "=x,x,0,~{dirflag},~{fpsr},~{flags}"(<2 x double> %a, <2 x double> %b) |
| 5 | + ret <2 x double> %r |
| 6 | +} |
| 7 | + |
| 8 | +declare { <2 x double>, <2 x double> } @__enzyme_autodiff(...) |
| 9 | + |
| 10 | +define { <2 x double>, <2 x double> } @test_derivative(<2 x double> %x, <2 x double> %y) { |
| 11 | +entry: |
| 12 | + %0 = tail call { <2 x double>, <2 x double> } (...) @__enzyme_autodiff(<2 x double> (<2 x double>, <2 x double>)* @pmax, <2 x double> %x, <2 x double> %y) |
| 13 | + ret { <2 x double>, <2 x double> } %0 |
| 14 | +} |
| 15 | + |
| 16 | +; CHECK: define internal { <2 x double>, <2 x double> } @diffepmax(<2 x double> %a, <2 x double> %b, <2 x double> %differeturn) |
| 17 | +; CHECK: %r = call <2 x double> asm "maxpd $1, $0", "=x,x,0,~{dirflag},~{fpsr},~{flags}"(<2 x double> %a, <2 x double> %b) |
| 18 | +; CHECK-NEXT: %[[i0:.+]] = fcmp fast olt <2 x double> %a, %b |
| 19 | +; CHECK-NEXT: %[[i1:.+]] = select {{(fast )?}}<2 x i1> %[[i0]], <2 x double> zeroinitializer, <2 x double> %differeturn |
| 20 | +; CHECK-NEXT: %[[i2:.+]] = select {{(fast )?}}<2 x i1> %[[i0]], <2 x double> %differeturn, <2 x double> zeroinitializer |
| 21 | +; CHECK-NEXT: %[[i3:.+]] = insertvalue { <2 x double>, <2 x double> } undef, <2 x double> %[[i1]], 0 |
| 22 | +; CHECK-NEXT: %[[i4:.+]] = insertvalue { <2 x double>, <2 x double> } %[[i3]], <2 x double> %[[i2]], 1 |
| 23 | +; CHECK-NEXT: ret { <2 x double>, <2 x double> } %[[i4]] |
0 commit comments