1# RUN: llc -march=nvptx -mcpu=sm_20 -run-pass none -o - %s | FileCheck %s
2# This test ensures that the MIR parser parses floating point constant operands
3# correctly.
4
5--- |
6
7  define float @test(float %k, i32 %i) {
8  entry:
9    %0 = fpext float %k to double
10    %1 = fadd double %0, 3.250000e+00
11    %2 = fptrunc double %1 to float
12    %3 = sitofp i32 %i to float
13    %4 = fadd float %3, 6.250000e+00
14    %5 = fmul float %4, %2
15    ret float %5
16  }
17
18  define float @test2(float %k, i32 %i) {
19  entry:
20    %0 = fpext float %k to double
21    %1 = fadd double %0, 0x7FF8000000000000
22    %2 = fptrunc double %1 to float
23    %3 = sitofp i32 %i to float
24    %4 = fadd float %3, 0x7FF8000000000000
25    %5 = fmul float %4, %2
26    ret float %5
27  }
28
29...
30---
31name:            test
32registers:
33  - { id: 0, class: float32regs }
34  - { id: 1, class: float64regs }
35  - { id: 2, class: int32regs }
36  - { id: 3, class: float64regs }
37  - { id: 4, class: float32regs }
38  - { id: 5, class: float32regs }
39  - { id: 6, class: float32regs }
40  - { id: 7, class: float32regs }
41body: |
42  bb.0.entry:
43    %0 = LD_f32_avar 0, 4, 1, 2, 32, &test_param_0
44    %1 = CVT_f64_f32 %0, 0
45    %2 = LD_i32_avar 0, 4, 1, 0, 32, &test_param_1
46  ; CHECK: %3:float64regs = FADD_rnf64ri %1, double 3.250000e+00
47    %3 = FADD_rnf64ri %1, double 3.250000e+00
48    %4 = CVT_f32_f64 %3, 5
49    %5 = CVT_f32_s32 %2, 5
50  ; CHECK: %6:float32regs = FADD_rnf32ri %5, float 6.250000e+00
51    %6 = FADD_rnf32ri %5, float 6.250000e+00
52    %7 = FMUL_rnf32rr %6, %4
53    StoreRetvalF32 %7, 0
54    Return
55...
56---
57name:            test2
58registers:
59  - { id: 0, class: float32regs }
60  - { id: 1, class: float64regs }
61  - { id: 2, class: int32regs }
62  - { id: 3, class: float64regs }
63  - { id: 4, class: float32regs }
64  - { id: 5, class: float32regs }
65  - { id: 6, class: float32regs }
66  - { id: 7, class: float32regs }
67body: |
68  bb.0.entry:
69    %0 = LD_f32_avar 0, 4, 1, 2, 32, &test2_param_0
70    %1 = CVT_f64_f32 %0, 0
71    %2 = LD_i32_avar 0, 4, 1, 0, 32, &test2_param_1
72  ; CHECK: %3:float64regs = FADD_rnf64ri %1, double 0x7FF8000000000000
73    %3 = FADD_rnf64ri %1, double 0x7FF8000000000000
74    %4 = CVT_f32_f64 %3, 5
75    %5 = CVT_f32_s32 %2, 5
76  ; CHECK: %6:float32regs = FADD_rnf32ri %5, float 0x7FF8000000000000
77    %6 = FADD_rnf32ri %5, float 0x7FF8000000000000
78    %7 = FMUL_rnf32rr %6, %4
79    StoreRetvalF32 %7, 0
80    Return
81...
82