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