xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fptoui.mir (revision 35e937b4de1890186347a382f7727ba86441dbda)
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 -o - %s | FileCheck %s -check-prefix=GCN
3# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck %s -check-prefix=VI
4# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+real-true16 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck %s -check-prefixes=GFX11,GFX11-TRUE16
5# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck %s -check-prefixes=GFX11,GFX11-FAKE16
6
7---
8
9name:            fptoui
10legalized:       true
11regBankSelected: true
12
13body: |
14  bb.0:
15    liveins: $sgpr0, $vgpr0, $vgpr3_vgpr4
16
17    ; GCN-LABEL: name: fptoui
18    ; GCN: liveins: $sgpr0, $vgpr0, $vgpr3_vgpr4
19    ; GCN-NEXT: {{  $}}
20    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
21    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
22    ; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4
23    ; GCN-NEXT: [[V_CVT_U32_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
24    ; GCN-NEXT: [[V_CVT_U32_F32_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
25    ; GCN-NEXT: FLAT_STORE_DWORD [[COPY2]], [[V_CVT_U32_F32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
26    ; GCN-NEXT: FLAT_STORE_DWORD [[COPY2]], [[V_CVT_U32_F32_e64_1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
27    ;
28    ; VI-LABEL: name: fptoui
29    ; VI: liveins: $sgpr0, $vgpr0, $vgpr3_vgpr4
30    ; VI-NEXT: {{  $}}
31    ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
32    ; VI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
33    ; VI-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4
34    ; VI-NEXT: [[V_CVT_U32_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
35    ; VI-NEXT: [[V_CVT_U32_F32_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
36    ; VI-NEXT: FLAT_STORE_DWORD [[COPY2]], [[V_CVT_U32_F32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
37    ; VI-NEXT: FLAT_STORE_DWORD [[COPY2]], [[V_CVT_U32_F32_e64_1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
38    ;
39    ; GFX11-LABEL: name: fptoui
40    ; GFX11: liveins: $sgpr0, $vgpr0, $vgpr3_vgpr4
41    ; GFX11-NEXT: {{  $}}
42    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
43    ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
44    ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4
45    ; GFX11-NEXT: [[V_CVT_U32_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
46    ; GFX11-NEXT: [[V_CVT_U32_F32_e64_1:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
47    ; GFX11-NEXT: GLOBAL_STORE_DWORD [[COPY2]], [[V_CVT_U32_F32_e64_]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
48    ; GFX11-NEXT: GLOBAL_STORE_DWORD [[COPY2]], [[V_CVT_U32_F32_e64_1]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
49    %0:sgpr(s32) = COPY $sgpr0
50
51    %1:vgpr(s32) = COPY $vgpr0
52
53    %2:vgpr(p1) = COPY $vgpr3_vgpr4
54
55    %3:vgpr(s32) = G_FPTOUI %0
56
57    %4:vgpr(s32) = G_FPTOUI %1
58
59    G_STORE %3, %2 :: (store (s32), addrspace 1)
60    G_STORE %4, %2 :: (store (s32), addrspace 1)
61...
62
63---
64name: fptoui_s16_to_s32_vv
65legalized: true
66regBankSelected: true
67tracksRegLiveness: true
68
69body: |
70  bb.0:
71    liveins: $vgpr0
72
73    ; GCN-LABEL: name: fptoui_s16_to_s32_vv
74    ; GCN: liveins: $vgpr0
75    ; GCN-NEXT: {{  $}}
76    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
77    ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
78    ; GCN-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
79    ; GCN-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
80    ;
81    ; VI-LABEL: name: fptoui_s16_to_s32_vv
82    ; VI: liveins: $vgpr0
83    ; VI-NEXT: {{  $}}
84    ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
85    ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
86    ; VI-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
87    ; VI-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
88    ;
89    ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s32_vv
90    ; GFX11-TRUE16: liveins: $vgpr0
91    ; GFX11-TRUE16-NEXT: {{  $}}
92    ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
93    ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo16
94    ; GFX11-TRUE16-NEXT: [[V_CVT_F32_F16_t16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_t16_e64 0, [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec
95    ; GFX11-TRUE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_t16_e64_]], implicit $mode, implicit $exec
96    ; GFX11-TRUE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
97    ;
98    ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s32_vv
99    ; GFX11-FAKE16: liveins: $vgpr0
100    ; GFX11-FAKE16-NEXT: {{  $}}
101    ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
102    ; GFX11-FAKE16-NEXT: [[V_CVT_F32_F16_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_fake16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
103    ; GFX11-FAKE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_fake16_e64_]], implicit $mode, implicit $exec
104    ; GFX11-FAKE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
105    %0:vgpr(s32) = COPY $vgpr0
106    %1:vgpr(s16) = G_TRUNC %0
107    %2:vgpr(s32) = G_FPTOUI %1
108    $vgpr0 = COPY %2
109...
110
111---
112name: fptoui_s16_to_s32_vs
113legalized: true
114regBankSelected: true
115tracksRegLiveness: true
116
117body: |
118  bb.0:
119    liveins: $sgpr0
120
121    ; GCN-LABEL: name: fptoui_s16_to_s32_vs
122    ; GCN: liveins: $sgpr0
123    ; GCN-NEXT: {{  $}}
124    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
125    ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
126    ; GCN-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
127    ; GCN-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
128    ;
129    ; VI-LABEL: name: fptoui_s16_to_s32_vs
130    ; VI: liveins: $sgpr0
131    ; VI-NEXT: {{  $}}
132    ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
133    ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
134    ; VI-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
135    ; VI-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
136    ;
137    ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s32_vs
138    ; GFX11-TRUE16: liveins: $sgpr0
139    ; GFX11-TRUE16-NEXT: {{  $}}
140    ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
141    ; GFX11-TRUE16-NEXT: [[V_CVT_F32_F16_t16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_t16_e64 0, [[COPY]], 0, 0, 0, implicit $mode, implicit $exec
142    ; GFX11-TRUE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_t16_e64_]], implicit $mode, implicit $exec
143    ; GFX11-TRUE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
144    ;
145    ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s32_vs
146    ; GFX11-FAKE16: liveins: $sgpr0
147    ; GFX11-FAKE16-NEXT: {{  $}}
148    ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
149    ; GFX11-FAKE16-NEXT: [[V_CVT_F32_F16_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_fake16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
150    ; GFX11-FAKE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_fake16_e64_]], implicit $mode, implicit $exec
151    ; GFX11-FAKE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
152    %0:sgpr(s32) = COPY $sgpr0
153    %1:sgpr(s16) = G_TRUNC %0
154    %2:vgpr(s32) = G_FPTOUI %1
155    $vgpr0 = COPY %2
156...
157
158---
159name: fptoui_s16_to_s32_fneg_vv
160legalized: true
161regBankSelected: true
162tracksRegLiveness: true
163
164body: |
165  bb.0:
166    liveins: $vgpr0
167
168    ; GCN-LABEL: name: fptoui_s16_to_s32_fneg_vv
169    ; GCN: liveins: $vgpr0
170    ; GCN-NEXT: {{  $}}
171    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
172    ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
173    ; GCN-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
174    ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
175    ; GCN-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
176    ; GCN-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
177    ;
178    ; VI-LABEL: name: fptoui_s16_to_s32_fneg_vv
179    ; VI: liveins: $vgpr0
180    ; VI-NEXT: {{  $}}
181    ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
182    ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
183    ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
184    ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
185    ; VI-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
186    ; VI-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
187    ;
188    ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s32_fneg_vv
189    ; GFX11-TRUE16: liveins: $vgpr0
190    ; GFX11-TRUE16-NEXT: {{  $}}
191    ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
192    ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo16
193    ; GFX11-TRUE16-NEXT: [[V_XOR_B16_t16_e64_:%[0-9]+]]:vgpr_16 = V_XOR_B16_t16_e64 0, 32768, 0, [[COPY1]], 0, implicit $exec
194    ; GFX11-TRUE16-NEXT: [[V_CVT_F32_F16_t16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_t16_e64 0, [[V_XOR_B16_t16_e64_]], 0, 0, 0, implicit $mode, implicit $exec
195    ; GFX11-TRUE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_t16_e64_]], implicit $mode, implicit $exec
196    ; GFX11-TRUE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
197    ;
198    ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s32_fneg_vv
199    ; GFX11-FAKE16: liveins: $vgpr0
200    ; GFX11-FAKE16-NEXT: {{  $}}
201    ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
202    ; GFX11-FAKE16-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
203    ; GFX11-FAKE16-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
204    ; GFX11-FAKE16-NEXT: [[V_CVT_F32_F16_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_fake16_e64 0, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
205    ; GFX11-FAKE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_fake16_e64_]], implicit $mode, implicit $exec
206    ; GFX11-FAKE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]
207    %0:vgpr(s32) = COPY $vgpr0
208    %1:vgpr(s16) = G_TRUNC %0
209    %2:vgpr(s16) = G_FNEG %1
210    %3:vgpr(s32) = G_FPTOUI %2
211    $vgpr0 = COPY %3
212...
213
214---
215name: fptoui_s16_to_s1_vv
216legalized: true
217regBankSelected: true
218tracksRegLiveness: true
219
220body: |
221  bb.0:
222    liveins: $vgpr0
223
224    ; GCN-LABEL: name: fptoui_s16_to_s1_vv
225    ; GCN: liveins: $vgpr0
226    ; GCN-NEXT: {{  $}}
227    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
228    ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
229    ; GCN-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
230    ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]
231    ;
232    ; VI-LABEL: name: fptoui_s16_to_s1_vv
233    ; VI: liveins: $vgpr0
234    ; VI-NEXT: {{  $}}
235    ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
236    ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
237    ; VI-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
238    ; VI-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]
239    ;
240    ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s1_vv
241    ; GFX11-TRUE16: liveins: $vgpr0
242    ; GFX11-TRUE16-NEXT: {{  $}}
243    ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
244    ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo16
245    ; GFX11-TRUE16-NEXT: [[V_CVT_F32_F16_t16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_t16_e64 0, [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec
246    ; GFX11-TRUE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_t16_e64_]], implicit $mode, implicit $exec
247    ; GFX11-TRUE16-NEXT: [[COPY2:%[0-9]+]]:vgpr_16 = COPY [[V_CVT_U32_F32_e32_]].lo16
248    ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[COPY2]]
249    ;
250    ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s1_vv
251    ; GFX11-FAKE16: liveins: $vgpr0
252    ; GFX11-FAKE16-NEXT: {{  $}}
253    ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
254    ; GFX11-FAKE16-NEXT: [[V_CVT_F32_F16_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_fake16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
255    ; GFX11-FAKE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_fake16_e64_]], implicit $mode, implicit $exec
256    ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]
257    %0:vgpr(s32) = COPY $vgpr0
258    %1:vgpr(s16) = G_TRUNC %0
259    %2:vgpr(s32) = G_FPTOUI %1
260    %3:vgpr(s1)  = G_TRUNC %2
261    S_ENDPGM 0, implicit %3
262...
263
264---
265name: fptoui_s16_to_s1_vs
266legalized: true
267regBankSelected: true
268tracksRegLiveness: true
269
270body: |
271  bb.0:
272    liveins: $sgpr0
273
274    ; GCN-LABEL: name: fptoui_s16_to_s1_vs
275    ; GCN: liveins: $sgpr0
276    ; GCN-NEXT: {{  $}}
277    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
278    ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
279    ; GCN-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
280    ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]
281    ;
282    ; VI-LABEL: name: fptoui_s16_to_s1_vs
283    ; VI: liveins: $sgpr0
284    ; VI-NEXT: {{  $}}
285    ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
286    ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
287    ; VI-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
288    ; VI-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]
289    ;
290    ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s1_vs
291    ; GFX11-TRUE16: liveins: $sgpr0
292    ; GFX11-TRUE16-NEXT: {{  $}}
293    ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
294    ; GFX11-TRUE16-NEXT: [[V_CVT_F32_F16_t16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_t16_e64 0, [[COPY]], 0, 0, 0, implicit $mode, implicit $exec
295    ; GFX11-TRUE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_t16_e64_]], implicit $mode, implicit $exec
296    ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[V_CVT_U32_F32_e32_]].lo16
297    ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[COPY1]]
298    ;
299    ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s1_vs
300    ; GFX11-FAKE16: liveins: $sgpr0
301    ; GFX11-FAKE16-NEXT: {{  $}}
302    ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
303    ; GFX11-FAKE16-NEXT: [[V_CVT_F32_F16_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_fake16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
304    ; GFX11-FAKE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_fake16_e64_]], implicit $mode, implicit $exec
305    ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]
306    %0:sgpr(s32) = COPY $sgpr0
307    %1:sgpr(s16) = G_TRUNC %0
308    %2:vgpr(s32) = G_FPTOUI %1
309    %3:vgpr(s1)  = G_TRUNC %2
310    S_ENDPGM 0, implicit %3
311...
312
313---
314name: fptoui_s16_to_s1_fneg_vv
315legalized: true
316regBankSelected: true
317tracksRegLiveness: true
318
319body: |
320  bb.0:
321    liveins: $vgpr0
322
323    ; GCN-LABEL: name: fptoui_s16_to_s1_fneg_vv
324    ; GCN: liveins: $vgpr0
325    ; GCN-NEXT: {{  $}}
326    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
327    ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
328    ; GCN-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
329    ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
330    ; GCN-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
331    ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]
332    ;
333    ; VI-LABEL: name: fptoui_s16_to_s1_fneg_vv
334    ; VI: liveins: $vgpr0
335    ; VI-NEXT: {{  $}}
336    ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
337    ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
338    ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
339    ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
340    ; VI-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_e64_]], implicit $mode, implicit $exec
341    ; VI-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]
342    ;
343    ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s1_fneg_vv
344    ; GFX11-TRUE16: liveins: $vgpr0
345    ; GFX11-TRUE16-NEXT: {{  $}}
346    ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
347    ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo16
348    ; GFX11-TRUE16-NEXT: [[V_XOR_B16_t16_e64_:%[0-9]+]]:vgpr_16 = V_XOR_B16_t16_e64 0, 32768, 0, [[COPY1]], 0, implicit $exec
349    ; GFX11-TRUE16-NEXT: [[V_CVT_F32_F16_t16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_t16_e64 0, [[V_XOR_B16_t16_e64_]], 0, 0, 0, implicit $mode, implicit $exec
350    ; GFX11-TRUE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_t16_e64_]], implicit $mode, implicit $exec
351    ; GFX11-TRUE16-NEXT: [[COPY2:%[0-9]+]]:vgpr_16 = COPY [[V_CVT_U32_F32_e32_]].lo16
352    ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[COPY2]]
353    ;
354    ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s1_fneg_vv
355    ; GFX11-FAKE16: liveins: $vgpr0
356    ; GFX11-FAKE16-NEXT: {{  $}}
357    ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
358    ; GFX11-FAKE16-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
359    ; GFX11-FAKE16-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
360    ; GFX11-FAKE16-NEXT: [[V_CVT_F32_F16_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_fake16_e64 0, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
361    ; GFX11-FAKE16-NEXT: [[V_CVT_U32_F32_e32_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 [[V_CVT_F32_F16_fake16_e64_]], implicit $mode, implicit $exec
362    ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]
363    %0:vgpr(s32) = COPY $vgpr0
364    %1:vgpr(s16) = G_TRUNC %0
365    %2:vgpr(s16) = G_FNEG %1
366    %3:vgpr(s32) = G_FPTOUI %2
367    %4:vgpr(s1)  = G_TRUNC %3
368    S_ENDPGM 0, implicit %4
369...
370