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
5---
6
7name:            fptoui
8legalized:       true
9regBankSelected: true
10
11body: |
12  bb.0:
13    liveins: $sgpr0, $vgpr0, $vgpr3_vgpr4
14
15    ; GCN-LABEL: name: fptoui
16    ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
17    ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
18    ; GCN: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4
19    ; GCN: %3:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
20    ; GCN: %4:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
21    ; GCN: FLAT_STORE_DWORD [[COPY2]], %3, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
22    ; GCN: FLAT_STORE_DWORD [[COPY2]], %4, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
23    ; VI-LABEL: name: fptoui
24    ; VI: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
25    ; VI: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
26    ; VI: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4
27    ; VI: %3:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
28    ; VI: %4:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
29    ; VI: FLAT_STORE_DWORD [[COPY2]], %3, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
30    ; VI: FLAT_STORE_DWORD [[COPY2]], %4, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
31    %0:sgpr(s32) = COPY $sgpr0
32
33    %1:vgpr(s32) = COPY $vgpr0
34
35    %2:vgpr(p1) = COPY $vgpr3_vgpr4
36
37    ; fptoui s
38    %3:vgpr(s32) = G_FPTOUI %0
39
40    ; fptoui v
41    %4:vgpr(s32) = G_FPTOUI %1
42
43    G_STORE %3, %2 :: (store (s32), addrspace 1)
44    G_STORE %4, %2 :: (store (s32), addrspace 1)
45...
46
47---
48name: fptoui_s16_to_s32_vv
49legalized: true
50regBankSelected: true
51tracksRegLiveness: true
52
53body: |
54  bb.0:
55    liveins: $vgpr0
56
57    ; GCN-LABEL: name: fptoui_s16_to_s32_vv
58    ; GCN: liveins: $vgpr0
59    ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
60    ; GCN: %3:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[COPY]], implicit $mode, implicit $exec
61    ; GCN: %2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %3, implicit $mode, implicit $exec
62    ; GCN: $vgpr0 = COPY %2
63    ; VI-LABEL: name: fptoui_s16_to_s32_vv
64    ; VI: liveins: $vgpr0
65    ; VI: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
66    ; VI: %3:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[COPY]], implicit $mode, implicit $exec
67    ; VI: %2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %3, implicit $mode, implicit $exec
68    ; VI: $vgpr0 = COPY %2
69    %0:vgpr(s32) = COPY $vgpr0
70    %1:vgpr(s16) = G_TRUNC %0
71    %2:vgpr(s32) = G_FPTOUI %1
72    $vgpr0 = COPY %2
73...
74
75---
76name: fptoui_s16_to_s32_vs
77legalized: true
78regBankSelected: true
79tracksRegLiveness: true
80
81body: |
82  bb.0:
83    liveins: $sgpr0
84
85    ; GCN-LABEL: name: fptoui_s16_to_s32_vs
86    ; GCN: liveins: $sgpr0
87    ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
88    ; GCN: %3:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[COPY]], implicit $mode, implicit $exec
89    ; GCN: %2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %3, implicit $mode, implicit $exec
90    ; GCN: $vgpr0 = COPY %2
91    ; VI-LABEL: name: fptoui_s16_to_s32_vs
92    ; VI: liveins: $sgpr0
93    ; VI: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
94    ; VI: %3:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[COPY]], implicit $mode, implicit $exec
95    ; VI: %2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %3, implicit $mode, implicit $exec
96    ; VI: $vgpr0 = COPY %2
97    %0:sgpr(s32) = COPY $sgpr0
98    %1:sgpr(s16) = G_TRUNC %0
99    %2:vgpr(s32) = G_FPTOUI %1
100    $vgpr0 = COPY %2
101...
102
103---
104name: fptoui_s16_to_s32_fneg_vv
105legalized: true
106regBankSelected: true
107tracksRegLiveness: true
108
109body: |
110  bb.0:
111    liveins: $vgpr0
112
113    ; GCN-LABEL: name: fptoui_s16_to_s32_fneg_vv
114    ; GCN: liveins: $vgpr0
115    ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
116    ; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
117    ; GCN: [[V_XOR_B32_e32_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e32 [[S_MOV_B32_]], [[COPY]], implicit $exec
118    ; GCN: %4:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[V_XOR_B32_e32_]], implicit $mode, implicit $exec
119    ; GCN: %3:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %4, implicit $mode, implicit $exec
120    ; GCN: $vgpr0 = COPY %3
121    ; VI-LABEL: name: fptoui_s16_to_s32_fneg_vv
122    ; VI: liveins: $vgpr0
123    ; VI: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
124    ; VI: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
125    ; VI: [[V_XOR_B32_e32_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e32 [[S_MOV_B32_]], [[COPY]], implicit $exec
126    ; VI: %4:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[V_XOR_B32_e32_]], implicit $mode, implicit $exec
127    ; VI: %3:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %4, implicit $mode, implicit $exec
128    ; VI: $vgpr0 = COPY %3
129    %0:vgpr(s32) = COPY $vgpr0
130    %1:vgpr(s16) = G_TRUNC %0
131    %2:vgpr(s16) = G_FNEG %1
132    %3:vgpr(s32) = G_FPTOUI %2
133    $vgpr0 = COPY %3
134...
135
136---
137name: fptoui_s16_to_s1_vv
138legalized: true
139regBankSelected: true
140tracksRegLiveness: true
141
142body: |
143  bb.0:
144    liveins: $vgpr0
145
146    ; GCN-LABEL: name: fptoui_s16_to_s1_vv
147    ; GCN: liveins: $vgpr0
148    ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
149    ; GCN: %4:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[COPY]], implicit $mode, implicit $exec
150    ; GCN: %2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %4, implicit $mode, implicit $exec
151    ; GCN: S_ENDPGM 0, implicit %2
152    ; VI-LABEL: name: fptoui_s16_to_s1_vv
153    ; VI: liveins: $vgpr0
154    ; VI: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
155    ; VI: %4:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[COPY]], implicit $mode, implicit $exec
156    ; VI: %2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %4, implicit $mode, implicit $exec
157    ; VI: S_ENDPGM 0, implicit %2
158    %0:vgpr(s32) = COPY $vgpr0
159    %1:vgpr(s16) = G_TRUNC %0
160    %2:vgpr(s32) = G_FPTOUI %1
161    %3:vgpr(s1)  = G_TRUNC %2
162    S_ENDPGM 0, implicit %3
163...
164
165---
166name: fptoui_s16_to_s1_vs
167legalized: true
168regBankSelected: true
169tracksRegLiveness: true
170
171body: |
172  bb.0:
173    liveins: $sgpr0
174
175    ; GCN-LABEL: name: fptoui_s16_to_s1_vs
176    ; GCN: liveins: $sgpr0
177    ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
178    ; GCN: %4:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[COPY]], implicit $mode, implicit $exec
179    ; GCN: %2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %4, implicit $mode, implicit $exec
180    ; GCN: S_ENDPGM 0, implicit %2
181    ; VI-LABEL: name: fptoui_s16_to_s1_vs
182    ; VI: liveins: $sgpr0
183    ; VI: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
184    ; VI: %4:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[COPY]], implicit $mode, implicit $exec
185    ; VI: %2:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %4, implicit $mode, implicit $exec
186    ; VI: S_ENDPGM 0, implicit %2
187    %0:sgpr(s32) = COPY $sgpr0
188    %1:sgpr(s16) = G_TRUNC %0
189    %2:vgpr(s32) = G_FPTOUI %1
190    %3:vgpr(s1)  = G_TRUNC %2
191    S_ENDPGM 0, implicit %3
192...
193
194---
195name: fptoui_s16_to_s1_fneg_vv
196legalized: true
197regBankSelected: true
198tracksRegLiveness: true
199
200body: |
201  bb.0:
202    liveins: $vgpr0
203
204    ; GCN-LABEL: name: fptoui_s16_to_s1_fneg_vv
205    ; GCN: liveins: $vgpr0
206    ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
207    ; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
208    ; GCN: [[V_XOR_B32_e32_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e32 [[S_MOV_B32_]], [[COPY]], implicit $exec
209    ; GCN: %5:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[V_XOR_B32_e32_]], implicit $mode, implicit $exec
210    ; GCN: %3:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %5, implicit $mode, implicit $exec
211    ; GCN: S_ENDPGM 0, implicit %3
212    ; VI-LABEL: name: fptoui_s16_to_s1_fneg_vv
213    ; VI: liveins: $vgpr0
214    ; VI: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
215    ; VI: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
216    ; VI: [[V_XOR_B32_e32_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e32 [[S_MOV_B32_]], [[COPY]], implicit $exec
217    ; VI: %5:vgpr_32 = nofpexcept V_CVT_F32_F16_e32 [[V_XOR_B32_e32_]], implicit $mode, implicit $exec
218    ; VI: %3:vgpr_32 = nofpexcept V_CVT_U32_F32_e32 %5, implicit $mode, implicit $exec
219    ; VI: S_ENDPGM 0, implicit %3
220    %0:vgpr(s32) = COPY $vgpr0
221    %1:vgpr(s16) = G_TRUNC %0
222    %2:vgpr(s16) = G_FNEG %1
223    %3:vgpr(s32) = G_FPTOUI %2
224    %4:vgpr(s1)  = G_TRUNC %3
225    S_ENDPGM 0, implicit %4
226...
227