|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: llc < %s -march=nvptx64 | FileCheck %s |
| 3 | +; RUN: %if ptxas %{ llc < %s -march=nvptx64 | %ptxas-verify %} |
| 4 | + |
| 5 | +target triple = "nvptx64-nvidia-cuda" |
| 6 | + |
| 7 | +;; Check if fneg (fdiv 1, X) lowers to fneg (rcp.rn X). |
| 8 | + |
| 9 | +define double @test1(double %in) { |
| 10 | +; CHECK-LABEL: test1( |
| 11 | +; CHECK: { |
| 12 | +; CHECK-NEXT: .reg .f64 %fd<4>; |
| 13 | +; CHECK-EMPTY: |
| 14 | +; CHECK-NEXT: // %bb.0: |
| 15 | +; CHECK-NEXT: ld.param.f64 %fd1, [test1_param_0]; |
| 16 | +; CHECK-NEXT: rcp.rn.f64 %fd2, %fd1; |
| 17 | +; CHECK-NEXT: neg.f64 %fd3, %fd2; |
| 18 | +; CHECK-NEXT: st.param.f64 [func_retval0+0], %fd3; |
| 19 | +; CHECK-NEXT: ret; |
| 20 | + %div = fdiv double 1.000000e+00, %in |
| 21 | + %neg = fsub double -0.000000e+00, %div |
| 22 | + ret double %neg |
| 23 | +} |
| 24 | + |
| 25 | +;; Check if fdiv -1, X lowers to fneg (rcp.rn X). |
| 26 | + |
| 27 | +define double @test2(double %in) { |
| 28 | +; CHECK-LABEL: test2( |
| 29 | +; CHECK: { |
| 30 | +; CHECK-NEXT: .reg .f64 %fd<4>; |
| 31 | +; CHECK-EMPTY: |
| 32 | +; CHECK-NEXT: // %bb.0: |
| 33 | +; CHECK-NEXT: ld.param.f64 %fd1, [test2_param_0]; |
| 34 | +; CHECK-NEXT: rcp.rn.f64 %fd2, %fd1; |
| 35 | +; CHECK-NEXT: neg.f64 %fd3, %fd2; |
| 36 | +; CHECK-NEXT: st.param.f64 [func_retval0+0], %fd3; |
| 37 | +; CHECK-NEXT: ret; |
| 38 | + %div = fdiv double -1.000000e+00, %in |
| 39 | + ret double %div |
| 40 | +} |
| 41 | + |
| 42 | +;; Check if fdiv 1, (fneg X) lowers to fneg (rcp.rn X). |
| 43 | + |
| 44 | +define double @test3(double %in) { |
| 45 | +; CHECK-LABEL: test3( |
| 46 | +; CHECK: { |
| 47 | +; CHECK-NEXT: .reg .f64 %fd<4>; |
| 48 | +; CHECK-EMPTY: |
| 49 | +; CHECK-NEXT: // %bb.0: |
| 50 | +; CHECK-NEXT: ld.param.f64 %fd1, [test3_param_0]; |
| 51 | +; CHECK-NEXT: rcp.rn.f64 %fd2, %fd1; |
| 52 | +; CHECK-NEXT: neg.f64 %fd3, %fd2; |
| 53 | +; CHECK-NEXT: st.param.f64 [func_retval0+0], %fd3; |
| 54 | +; CHECK-NEXT: ret; |
| 55 | + %neg = fsub double -0.000000e+00, %in |
| 56 | + %div = fdiv double 1.000000e+00, %neg |
| 57 | + ret double %div |
| 58 | +} |
0 commit comments