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