370 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck %s -check-prefix=GCN3# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck %s -check-prefix=VI4# 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-TRUE165# 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-FAKE166 7---8 9name: fptoui10legalized: true11regBankSelected: true12 13body: |14 bb.0:15 liveins: $sgpr0, $vgpr0, $vgpr3_vgpr416 17 ; GCN-LABEL: name: fptoui18 ; GCN: liveins: $sgpr0, $vgpr0, $vgpr3_vgpr419 ; GCN-NEXT: {{ $}}20 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr021 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr022 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr423 ; GCN-NEXT: [[V_CVT_U32_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec24 ; 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 $exec25 ; 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: fptoui29 ; VI: liveins: $sgpr0, $vgpr0, $vgpr3_vgpr430 ; VI-NEXT: {{ $}}31 ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr032 ; VI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr033 ; VI-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr434 ; VI-NEXT: [[V_CVT_U32_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec35 ; 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 $exec36 ; 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: fptoui40 ; GFX11: liveins: $sgpr0, $vgpr0, $vgpr3_vgpr441 ; GFX11-NEXT: {{ $}}42 ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr043 ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr044 ; GFX11-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr445 ; GFX11-NEXT: [[V_CVT_U32_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_U32_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec46 ; 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 $exec47 ; 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 $sgpr050 51 %1:vgpr(s32) = COPY $vgpr052 53 %2:vgpr(p1) = COPY $vgpr3_vgpr454 55 %3:vgpr(s32) = G_FPTOUI %056 57 %4:vgpr(s32) = G_FPTOUI %158 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_vv65legalized: true66regBankSelected: true67tracksRegLiveness: true68 69body: |70 bb.0:71 liveins: $vgpr072 73 ; GCN-LABEL: name: fptoui_s16_to_s32_vv74 ; GCN: liveins: $vgpr075 ; GCN-NEXT: {{ $}}76 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr077 ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec78 ; 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 $exec79 ; GCN-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]80 ;81 ; VI-LABEL: name: fptoui_s16_to_s32_vv82 ; VI: liveins: $vgpr083 ; VI-NEXT: {{ $}}84 ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr085 ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec86 ; 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 $exec87 ; VI-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]88 ;89 ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s32_vv90 ; GFX11-TRUE16: liveins: $vgpr091 ; GFX11-TRUE16-NEXT: {{ $}}92 ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr093 ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo1694 ; 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 $exec95 ; 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 $exec96 ; GFX11-TRUE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]97 ;98 ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s32_vv99 ; GFX11-FAKE16: liveins: $vgpr0100 ; GFX11-FAKE16-NEXT: {{ $}}101 ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0102 ; 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 $exec103 ; 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 $exec104 ; GFX11-FAKE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]105 %0:vgpr(s32) = COPY $vgpr0106 %1:vgpr(s16) = G_TRUNC %0107 %2:vgpr(s32) = G_FPTOUI %1108 $vgpr0 = COPY %2109...110 111---112name: fptoui_s16_to_s32_vs113legalized: true114regBankSelected: true115tracksRegLiveness: true116 117body: |118 bb.0:119 liveins: $sgpr0120 121 ; GCN-LABEL: name: fptoui_s16_to_s32_vs122 ; GCN: liveins: $sgpr0123 ; GCN-NEXT: {{ $}}124 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0125 ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec126 ; 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 $exec127 ; GCN-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]128 ;129 ; VI-LABEL: name: fptoui_s16_to_s32_vs130 ; VI: liveins: $sgpr0131 ; VI-NEXT: {{ $}}132 ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0133 ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec134 ; 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 $exec135 ; VI-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]136 ;137 ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s32_vs138 ; GFX11-TRUE16: liveins: $sgpr0139 ; GFX11-TRUE16-NEXT: {{ $}}140 ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0141 ; 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 $exec142 ; 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 $exec143 ; GFX11-TRUE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]144 ;145 ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s32_vs146 ; GFX11-FAKE16: liveins: $sgpr0147 ; GFX11-FAKE16-NEXT: {{ $}}148 ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0149 ; 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 $exec150 ; 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 $exec151 ; GFX11-FAKE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]152 %0:sgpr(s32) = COPY $sgpr0153 %1:sgpr(s16) = G_TRUNC %0154 %2:vgpr(s32) = G_FPTOUI %1155 $vgpr0 = COPY %2156...157 158---159name: fptoui_s16_to_s32_fneg_vv160legalized: true161regBankSelected: true162tracksRegLiveness: true163 164body: |165 bb.0:166 liveins: $vgpr0167 168 ; GCN-LABEL: name: fptoui_s16_to_s32_fneg_vv169 ; GCN: liveins: $vgpr0170 ; GCN-NEXT: {{ $}}171 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0172 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768173 ; GCN-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec174 ; 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 $exec175 ; 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 $exec176 ; GCN-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]177 ;178 ; VI-LABEL: name: fptoui_s16_to_s32_fneg_vv179 ; VI: liveins: $vgpr0180 ; VI-NEXT: {{ $}}181 ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0182 ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768183 ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec184 ; 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 $exec185 ; 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 $exec186 ; VI-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]187 ;188 ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s32_fneg_vv189 ; GFX11-TRUE16: liveins: $vgpr0190 ; GFX11-TRUE16-NEXT: {{ $}}191 ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0192 ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo16193 ; GFX11-TRUE16-NEXT: [[V_XOR_B16_t16_e64_:%[0-9]+]]:vgpr_16 = V_XOR_B16_t16_e64 0, 32768, 0, [[COPY1]], 0, implicit $exec194 ; 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 $exec195 ; 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 $exec196 ; GFX11-TRUE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]197 ;198 ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s32_fneg_vv199 ; GFX11-FAKE16: liveins: $vgpr0200 ; GFX11-FAKE16-NEXT: {{ $}}201 ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0202 ; GFX11-FAKE16-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768203 ; GFX11-FAKE16-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec204 ; 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 $exec205 ; 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 $exec206 ; GFX11-FAKE16-NEXT: $vgpr0 = COPY [[V_CVT_U32_F32_e32_]]207 %0:vgpr(s32) = COPY $vgpr0208 %1:vgpr(s16) = G_TRUNC %0209 %2:vgpr(s16) = G_FNEG %1210 %3:vgpr(s32) = G_FPTOUI %2211 $vgpr0 = COPY %3212...213 214---215name: fptoui_s16_to_s1_vv216legalized: true217regBankSelected: true218tracksRegLiveness: true219 220body: |221 bb.0:222 liveins: $vgpr0223 224 ; GCN-LABEL: name: fptoui_s16_to_s1_vv225 ; GCN: liveins: $vgpr0226 ; GCN-NEXT: {{ $}}227 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0228 ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec229 ; 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 $exec230 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]231 ;232 ; VI-LABEL: name: fptoui_s16_to_s1_vv233 ; VI: liveins: $vgpr0234 ; VI-NEXT: {{ $}}235 ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0236 ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec237 ; 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 $exec238 ; VI-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]239 ;240 ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s1_vv241 ; GFX11-TRUE16: liveins: $vgpr0242 ; GFX11-TRUE16-NEXT: {{ $}}243 ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0244 ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo16245 ; 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 $exec246 ; 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 $exec247 ; GFX11-TRUE16-NEXT: [[COPY2:%[0-9]+]]:vgpr_16 = COPY [[V_CVT_U32_F32_e32_]].lo16248 ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[COPY2]]249 ;250 ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s1_vv251 ; GFX11-FAKE16: liveins: $vgpr0252 ; GFX11-FAKE16-NEXT: {{ $}}253 ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0254 ; 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 $exec255 ; 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 $exec256 ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]257 %0:vgpr(s32) = COPY $vgpr0258 %1:vgpr(s16) = G_TRUNC %0259 %2:vgpr(s32) = G_FPTOUI %1260 %3:vgpr(s1) = G_TRUNC %2261 S_ENDPGM 0, implicit %3262...263 264---265name: fptoui_s16_to_s1_vs266legalized: true267regBankSelected: true268tracksRegLiveness: true269 270body: |271 bb.0:272 liveins: $sgpr0273 274 ; GCN-LABEL: name: fptoui_s16_to_s1_vs275 ; GCN: liveins: $sgpr0276 ; GCN-NEXT: {{ $}}277 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0278 ; GCN-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec279 ; 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 $exec280 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]281 ;282 ; VI-LABEL: name: fptoui_s16_to_s1_vs283 ; VI: liveins: $sgpr0284 ; VI-NEXT: {{ $}}285 ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0286 ; VI-NEXT: [[V_CVT_F32_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_CVT_F32_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec287 ; 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 $exec288 ; VI-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]289 ;290 ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s1_vs291 ; GFX11-TRUE16: liveins: $sgpr0292 ; GFX11-TRUE16-NEXT: {{ $}}293 ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0294 ; 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 $exec295 ; 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 $exec296 ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[V_CVT_U32_F32_e32_]].lo16297 ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[COPY1]]298 ;299 ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s1_vs300 ; GFX11-FAKE16: liveins: $sgpr0301 ; GFX11-FAKE16-NEXT: {{ $}}302 ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0303 ; 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 $exec304 ; 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 $exec305 ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]306 %0:sgpr(s32) = COPY $sgpr0307 %1:sgpr(s16) = G_TRUNC %0308 %2:vgpr(s32) = G_FPTOUI %1309 %3:vgpr(s1) = G_TRUNC %2310 S_ENDPGM 0, implicit %3311...312 313---314name: fptoui_s16_to_s1_fneg_vv315legalized: true316regBankSelected: true317tracksRegLiveness: true318 319body: |320 bb.0:321 liveins: $vgpr0322 323 ; GCN-LABEL: name: fptoui_s16_to_s1_fneg_vv324 ; GCN: liveins: $vgpr0325 ; GCN-NEXT: {{ $}}326 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0327 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768328 ; GCN-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec329 ; 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 $exec330 ; 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 $exec331 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]332 ;333 ; VI-LABEL: name: fptoui_s16_to_s1_fneg_vv334 ; VI: liveins: $vgpr0335 ; VI-NEXT: {{ $}}336 ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0337 ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768338 ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec339 ; 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 $exec340 ; 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 $exec341 ; VI-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]342 ;343 ; GFX11-TRUE16-LABEL: name: fptoui_s16_to_s1_fneg_vv344 ; GFX11-TRUE16: liveins: $vgpr0345 ; GFX11-TRUE16-NEXT: {{ $}}346 ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0347 ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo16348 ; GFX11-TRUE16-NEXT: [[V_XOR_B16_t16_e64_:%[0-9]+]]:vgpr_16 = V_XOR_B16_t16_e64 0, 32768, 0, [[COPY1]], 0, implicit $exec349 ; 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 $exec350 ; 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 $exec351 ; GFX11-TRUE16-NEXT: [[COPY2:%[0-9]+]]:vgpr_16 = COPY [[V_CVT_U32_F32_e32_]].lo16352 ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[COPY2]]353 ;354 ; GFX11-FAKE16-LABEL: name: fptoui_s16_to_s1_fneg_vv355 ; GFX11-FAKE16: liveins: $vgpr0356 ; GFX11-FAKE16-NEXT: {{ $}}357 ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0358 ; GFX11-FAKE16-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768359 ; GFX11-FAKE16-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec360 ; 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 $exec361 ; 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 $exec362 ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_CVT_U32_F32_e32_]]363 %0:vgpr(s32) = COPY $vgpr0364 %1:vgpr(s16) = G_TRUNC %0365 %2:vgpr(s16) = G_FNEG %1366 %3:vgpr(s32) = G_FPTOUI %2367 %4:vgpr(s1) = G_TRUNC %3368 S_ENDPGM 0, implicit %4369...370