Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-sitofp.mir
blob043d93aa814ef8b09fc1059d3f01f946073fc84d
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=WAVE64 %s
3 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=WAVE32 %s
4 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX11 %s
6 ---
8 name:            sitofp
9 legalized:       true
10 regBankSelected: true
12 body: |
13   bb.0:
14     liveins: $sgpr0, $vgpr0, $vgpr3_vgpr4
16     ; WAVE64-LABEL: name: sitofp
17     ; WAVE64: liveins: $sgpr0, $vgpr0, $vgpr3_vgpr4
18     ; WAVE64-NEXT: {{  $}}
19     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
20     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
21     ; WAVE64-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4
22     ; WAVE64-NEXT: [[V_CVT_F32_I32_e64_:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec
23     ; WAVE64-NEXT: [[V_CVT_F32_I32_e64_1:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e64 [[COPY1]], 0, 0, implicit $mode, implicit $exec
24     ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY2]], [[V_CVT_F32_I32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
25     ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY2]], [[V_CVT_F32_I32_e64_1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
26     ; WAVE32-LABEL: name: sitofp
27     ; WAVE32: liveins: $sgpr0, $vgpr0, $vgpr3_vgpr4
28     ; WAVE32-NEXT: {{  $}}
29     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
30     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
31     ; WAVE32-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4
32     ; WAVE32-NEXT: [[V_CVT_F32_I32_e64_:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec
33     ; WAVE32-NEXT: [[V_CVT_F32_I32_e64_1:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e64 [[COPY1]], 0, 0, implicit $mode, implicit $exec
34     ; WAVE32-NEXT: GLOBAL_STORE_DWORD [[COPY2]], [[V_CVT_F32_I32_e64_]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
35     ; WAVE32-NEXT: GLOBAL_STORE_DWORD [[COPY2]], [[V_CVT_F32_I32_e64_1]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
36     ; GFX11-LABEL: name: sitofp
37     ; GFX11: liveins: $sgpr0, $vgpr0, $vgpr3_vgpr4
38     ; GFX11-NEXT: {{  $}}
39     ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
40     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
41     ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4
42     ; GFX11-NEXT: [[V_CVT_F32_I32_e64_:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec
43     ; GFX11-NEXT: [[V_CVT_F32_I32_e64_1:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e64 [[COPY1]], 0, 0, implicit $mode, implicit $exec
44     ; GFX11-NEXT: GLOBAL_STORE_DWORD [[COPY2]], [[V_CVT_F32_I32_e64_]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
45     ; GFX11-NEXT: GLOBAL_STORE_DWORD [[COPY2]], [[V_CVT_F32_I32_e64_1]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
46     %0:sgpr(s32) = COPY $sgpr0
48     %1:vgpr(s32) = COPY $vgpr0
50     %2:vgpr(p1) = COPY $vgpr3_vgpr4
52     ; sitofp s
53     %3:vgpr(s32) = G_SITOFP %0
55     ; sitofp v
56     %4:vgpr(s32) = G_SITOFP %1
58     G_STORE %3, %2 :: (store (s32), addrspace 1)
59     G_STORE %4, %2 :: (store (s32), addrspace 1)
60 ...
62 ---
63 name: sitofp_s32_to_s16_vv
64 legalized: true
65 regBankSelected: true
66 tracksRegLiveness: true
68 body: |
69   bb.0:
70     liveins: $vgpr0
72     ; WAVE64-LABEL: name: sitofp_s32_to_s16_vv
73     ; WAVE64: liveins: $vgpr0
74     ; WAVE64-NEXT: {{  $}}
75     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
76     ; WAVE64-NEXT: [[V_CVT_F32_I32_e32_:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e32 [[COPY]], implicit $mode, implicit $exec
77     ; WAVE64-NEXT: %1:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[V_CVT_F32_I32_e32_]], 0, 0, implicit $mode, implicit $exec
78     ; WAVE64-NEXT: $vgpr0 = COPY %1
79     ; WAVE32-LABEL: name: sitofp_s32_to_s16_vv
80     ; WAVE32: liveins: $vgpr0
81     ; WAVE32-NEXT: {{  $}}
82     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
83     ; WAVE32-NEXT: [[V_CVT_F32_I32_e32_:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e32 [[COPY]], implicit $mode, implicit $exec
84     ; WAVE32-NEXT: %1:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[V_CVT_F32_I32_e32_]], 0, 0, implicit $mode, implicit $exec
85     ; WAVE32-NEXT: $vgpr0 = COPY %1
86     ; GFX11-LABEL: name: sitofp_s32_to_s16_vv
87     ; GFX11: liveins: $vgpr0
88     ; GFX11-NEXT: {{  $}}
89     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
90     ; GFX11-NEXT: [[V_CVT_F32_I32_e32_:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e32 [[COPY]], implicit $mode, implicit $exec
91     ; GFX11-NEXT: %1:vgpr_32 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[V_CVT_F32_I32_e32_]], 0, 0, implicit $mode, implicit $exec
92     ; GFX11-NEXT: $vgpr0 = COPY %1
93     %0:vgpr(s32) = COPY $vgpr0
94     %1:vgpr(s16) = G_SITOFP %0
95     %2:vgpr(s32) = G_ANYEXT %1
96     $vgpr0 = COPY %2
97 ...
99 ---
100 name: sitofp_s32_to_s16_vs
101 legalized: true
102 regBankSelected: true
103 tracksRegLiveness: true
105 body: |
106   bb.0:
107     liveins: $sgpr0
109     ; WAVE64-LABEL: name: sitofp_s32_to_s16_vs
110     ; WAVE64: liveins: $sgpr0
111     ; WAVE64-NEXT: {{  $}}
112     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
113     ; WAVE64-NEXT: [[V_CVT_F32_I32_e32_:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e32 [[COPY]], implicit $mode, implicit $exec
114     ; WAVE64-NEXT: %1:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[V_CVT_F32_I32_e32_]], 0, 0, implicit $mode, implicit $exec
115     ; WAVE64-NEXT: $vgpr0 = COPY %1
116     ; WAVE32-LABEL: name: sitofp_s32_to_s16_vs
117     ; WAVE32: liveins: $sgpr0
118     ; WAVE32-NEXT: {{  $}}
119     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
120     ; WAVE32-NEXT: [[V_CVT_F32_I32_e32_:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e32 [[COPY]], implicit $mode, implicit $exec
121     ; WAVE32-NEXT: %1:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[V_CVT_F32_I32_e32_]], 0, 0, implicit $mode, implicit $exec
122     ; WAVE32-NEXT: $vgpr0 = COPY %1
123     ; GFX11-LABEL: name: sitofp_s32_to_s16_vs
124     ; GFX11: liveins: $sgpr0
125     ; GFX11-NEXT: {{  $}}
126     ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
127     ; GFX11-NEXT: [[V_CVT_F32_I32_e32_:%[0-9]+]]:vgpr_32 = V_CVT_F32_I32_e32 [[COPY]], implicit $mode, implicit $exec
128     ; GFX11-NEXT: %1:vgpr_32 = nofpexcept V_CVT_F16_F32_t16_e64 0, [[V_CVT_F32_I32_e32_]], 0, 0, implicit $mode, implicit $exec
129     ; GFX11-NEXT: $vgpr0 = COPY %1
130     %0:sgpr(s32) = COPY $sgpr0
131     %1:vgpr(s16) = G_SITOFP %0
132     %2:vgpr(s32) = G_ANYEXT %1
133     $vgpr0 = COPY %2