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 -check-prefix=WAVE64 %s 3# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=WAVE32 %s 4# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=WAVE32 %s 5 6--- 7 8name: copy 9legalized: true 10regBankSelected: true 11 12 13body: | 14 bb.0: 15 liveins: $sgpr2_sgpr3 16 17 ; WAVE64-LABEL: name: copy 18 ; WAVE64: liveins: $sgpr2_sgpr3 19 ; WAVE64-NEXT: {{ $}} 20 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3 21 ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[COPY]] 22 ; WAVE64-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF 23 ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY1]], [[DEF]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 24 ; 25 ; WAVE32-LABEL: name: copy 26 ; WAVE32: liveins: $sgpr2_sgpr3 27 ; WAVE32-NEXT: {{ $}} 28 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec_xnull = COPY $sgpr2_sgpr3 29 ; WAVE32-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF 30 ; WAVE32-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec 31 ; WAVE32-NEXT: GLOBAL_STORE_DWORD_SADDR [[V_MOV_B32_e32_]], [[DEF]], [[COPY]], 0, 0, implicit $exec :: (store (s32), addrspace 1) 32 %0:sgpr(p1) = COPY $sgpr2_sgpr3 33 %1:vgpr(p1) = COPY %0 34 %2:vgpr(s32) = G_IMPLICIT_DEF 35 G_STORE %2, %1 :: (store (s32), addrspace 1) 36... 37--- 38 39name: copy_vcc_bank_sgpr_bank 40legalized: true 41regBankSelected: true 42 43body: | 44 bb.0: 45 liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc 46 47 ; WAVE64-LABEL: name: copy_vcc_bank_sgpr_bank 48 ; WAVE64: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc 49 ; WAVE64-NEXT: {{ $}} 50 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 51 ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 52 ; WAVE64-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3 53 ; WAVE64-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $scc 54 ; WAVE64-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc 55 ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec 56 ; WAVE64-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_]], implicit $exec 57 ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 58 ; 59 ; WAVE32-LABEL: name: copy_vcc_bank_sgpr_bank 60 ; WAVE32: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc 61 ; WAVE32-NEXT: {{ $}} 62 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 63 ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 64 ; WAVE32-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3 65 ; WAVE32-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $scc 66 ; WAVE32-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc 67 ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec 68 ; WAVE32-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_]], implicit $exec 69 ; WAVE32-NEXT: GLOBAL_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_]], 0, 0, implicit $exec :: (store (s32), addrspace 1) 70 %0:vgpr(p1) = COPY $vgpr0_vgpr1 71 %1:vgpr(s32) = COPY $vgpr2 72 %2:vgpr(s32) = COPY $vgpr3 73 %3:sgpr(s1) = COPY $scc 74 %4:vcc(s1) = COPY %3 75 %5:vgpr(s32) = G_SELECT %4, %1, %2 76 G_STORE %5, %0 :: (store (s32), addrspace 1) 77... 78--- 79 80name: copy_vcc_bank_sgpr_bank_2_uses 81legalized: true 82regBankSelected: true 83 84body: | 85 bb.0: 86 liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc 87 88 ; WAVE64-LABEL: name: copy_vcc_bank_sgpr_bank_2_uses 89 ; WAVE64: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc 90 ; WAVE64-NEXT: {{ $}} 91 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 92 ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 93 ; WAVE64-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3 94 ; WAVE64-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $scc 95 ; WAVE64-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc 96 ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec 97 ; WAVE64-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_]], implicit $exec 98 ; WAVE64-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc 99 ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_1]], implicit $exec 100 ; WAVE64-NEXT: [[V_CNDMASK_B32_e64_1:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[V_CNDMASK_B32_e64_]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_1]], implicit $exec 101 ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 102 ; 103 ; WAVE32-LABEL: name: copy_vcc_bank_sgpr_bank_2_uses 104 ; WAVE32: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc 105 ; WAVE32-NEXT: {{ $}} 106 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 107 ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 108 ; WAVE32-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3 109 ; WAVE32-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $scc 110 ; WAVE32-NEXT: [[COPY4:%[0-9]+]]:sreg_32_xm0_xexec = COPY [[COPY3]] 111 ; WAVE32-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[COPY4]], implicit $exec 112 ; WAVE32-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc 113 ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec 114 ; WAVE32-NEXT: [[V_CNDMASK_B32_e64_1:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[V_CNDMASK_B32_e64_]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_]], implicit $exec 115 ; WAVE32-NEXT: GLOBAL_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_1]], 0, 0, implicit $exec :: (store (s32), addrspace 1) 116 %0:vgpr(p1) = COPY $vgpr0_vgpr1 117 %1:vgpr(s32) = COPY $vgpr2 118 %2:vgpr(s32) = COPY $vgpr3 119 %3:sgpr(s1) = COPY $scc 120 %4:vcc(s1) = COPY %3 121 %5:vgpr(s32) = G_SELECT %4, %1, %2 122 %6:vcc(s1) = COPY %3 123 %7:vgpr(s32) = G_SELECT %6, %1, %5 124 G_STORE %7, %0 :: (store (s32), addrspace 1) 125... 126 127--- 128 129name: copy_vcc_bank_scc_physreg 130legalized: true 131regBankSelected: true 132 133body: | 134 bb.0: 135 liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc 136 137 ; WAVE64-LABEL: name: copy_vcc_bank_scc_physreg 138 ; WAVE64: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc 139 ; WAVE64-NEXT: {{ $}} 140 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 141 ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 142 ; WAVE64-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3 143 ; WAVE64-NEXT: [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY $scc 144 ; WAVE64-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[COPY3]], implicit $exec 145 ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1) 146 ; 147 ; WAVE32-LABEL: name: copy_vcc_bank_scc_physreg 148 ; WAVE32: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc 149 ; WAVE32-NEXT: {{ $}} 150 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 151 ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 152 ; WAVE32-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3 153 ; WAVE32-NEXT: [[COPY3:%[0-9]+]]:sreg_32_xm0_xexec = COPY $scc 154 ; WAVE32-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[COPY3]], implicit $exec 155 ; WAVE32-NEXT: GLOBAL_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_]], 0, 0, implicit $exec :: (store (s32), addrspace 1) 156 %0:vgpr(p1) = COPY $vgpr0_vgpr1 157 %1:vgpr(s32) = COPY $vgpr2 158 %2:vgpr(s32) = COPY $vgpr3 159 %3:vcc(s1) = COPY $scc 160 %5:vgpr(s32) = G_SELECT %3, %1, %2 161 G_STORE %5, %0 :: (store (s32), addrspace 1) 162... 163--- 164 165name: copy_sgpr_no_type 166legalized: true 167regBankSelected: true 168 169 170body: | 171 bb.0: 172 liveins: $sgpr0 173 ; WAVE64-LABEL: name: copy_sgpr_no_type 174 ; WAVE64: liveins: $sgpr0 175 ; WAVE64-NEXT: {{ $}} 176 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32_xm0 = COPY $sgpr0 177 ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]] 178 ; 179 ; WAVE32-LABEL: name: copy_sgpr_no_type 180 ; WAVE32: liveins: $sgpr0 181 ; WAVE32-NEXT: {{ $}} 182 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32_xm0 = COPY $sgpr0 183 ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]] 184 %0:sreg_32_xm0 = COPY $sgpr0 185 %1:sreg_32_xm0 = COPY %0 186 S_ENDPGM 0, implicit %1 187 188... 189 190--- 191 192name: copy_vgpr_no_type 193legalized: true 194regBankSelected: true 195 196 197body: | 198 bb.0: 199 liveins: $vgpr0 200 ; WAVE64-LABEL: name: copy_vgpr_no_type 201 ; WAVE64: liveins: $vgpr0 202 ; WAVE64-NEXT: {{ $}} 203 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 204 ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]] 205 ; 206 ; WAVE32-LABEL: name: copy_vgpr_no_type 207 ; WAVE32: liveins: $vgpr0 208 ; WAVE32-NEXT: {{ $}} 209 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 210 ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]] 211 %0:vgpr_32 = COPY $vgpr0 212 %1:vgpr_32 = COPY %0 213 S_ENDPGM 0, implicit %1 214 215... 216 217--- 218 219name: copy_maybe_vcc 220legalized: true 221regBankSelected: true 222 223 224body: | 225 bb.0: 226 liveins: $sgpr0_sgpr1 227 ; WAVE64-LABEL: name: copy_maybe_vcc 228 ; WAVE64: liveins: $sgpr0_sgpr1 229 ; WAVE64-NEXT: {{ $}} 230 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr0_sgpr1 231 ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]] 232 ; 233 ; WAVE32-LABEL: name: copy_maybe_vcc 234 ; WAVE32: liveins: $sgpr0_sgpr1 235 ; WAVE32-NEXT: {{ $}} 236 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr0_sgpr1 237 ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]] 238 %0:sreg_64_xexec = COPY $sgpr0_sgpr1 239 %1:sreg_64_xexec = COPY %0 240 S_ENDPGM 0, implicit %1 241 242... 243 244# FIXME: This is malformed. There should never be a trunc to vcc. 245--- 246 247name: copy_s1_vcc_to_vcc 248legalized: true 249regBankSelected: true 250 251 252body: | 253 bb.0: 254 liveins: $sgpr0_sgpr1 255 256 ; WAVE64-LABEL: name: copy_s1_vcc_to_vcc 257 ; WAVE64: liveins: $sgpr0_sgpr1 258 ; WAVE64-NEXT: {{ $}} 259 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 260 ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_64_xexec = COPY [[COPY]] 261 ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY1]] 262 ; 263 ; WAVE32-LABEL: name: copy_s1_vcc_to_vcc 264 ; WAVE32: liveins: $sgpr0_sgpr1 265 ; WAVE32-NEXT: {{ $}} 266 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 267 ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32_xm0_xexec = COPY [[COPY]] 268 ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY1]] 269 %0:sgpr(s32) = COPY $sgpr0 270 %1:vcc(s1) = G_TRUNC %0 271 %2:vcc(s1) = COPY %1 272 S_ENDPGM 0, implicit %2 273 274... 275 276--- 277 278name: copy_s64_to_vcc 279legalized: true 280regBankSelected: true 281 282 283body: | 284 bb.0: 285 liveins: $sgpr0_sgpr1 286 ; WAVE64-LABEL: name: copy_s64_to_vcc 287 ; WAVE64: liveins: $sgpr0_sgpr1 288 ; WAVE64-NEXT: {{ $}} 289 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 290 ; WAVE64-NEXT: $vcc = COPY [[COPY]] 291 ; WAVE64-NEXT: S_ENDPGM 0, implicit $vcc 292 ; 293 ; WAVE32-LABEL: name: copy_s64_to_vcc 294 ; WAVE32: liveins: $sgpr0_sgpr1 295 ; WAVE32-NEXT: {{ $}} 296 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 297 ; WAVE32-NEXT: $vcc = COPY [[COPY]] 298 ; WAVE32-NEXT: S_ENDPGM 0, implicit $vcc_lo 299 %0:sgpr(s64) = COPY $sgpr0_sgpr1 300 $vcc = COPY %0 301 S_ENDPGM 0, implicit $vcc 302 303... 304 305--- 306 307name: copy_s32_to_vcc_lo 308legalized: true 309regBankSelected: true 310 311 312body: | 313 bb.0: 314 liveins: $sgpr0 315 ; WAVE64-LABEL: name: copy_s32_to_vcc_lo 316 ; WAVE64: liveins: $sgpr0 317 ; WAVE64-NEXT: {{ $}} 318 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 319 ; WAVE64-NEXT: $vcc_lo = COPY [[COPY]] 320 ; WAVE64-NEXT: S_ENDPGM 0, implicit $vcc 321 ; 322 ; WAVE32-LABEL: name: copy_s32_to_vcc_lo 323 ; WAVE32: liveins: $sgpr0 324 ; WAVE32-NEXT: {{ $}} 325 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 326 ; WAVE32-NEXT: $vcc_lo = COPY [[COPY]] 327 ; WAVE32-NEXT: S_ENDPGM 0, implicit $vcc_lo 328 %0:sgpr(s32) = COPY $sgpr0 329 $vcc_lo = COPY %0 330 S_ENDPGM 0, implicit $vcc 331 332... 333 334--- 335 336name: copy_vcc_to_s64 337legalized: true 338regBankSelected: true 339 340 341body: | 342 bb.0: 343 liveins: $vcc 344 ; WAVE64-LABEL: name: copy_vcc_to_s64 345 ; WAVE64: liveins: $vcc 346 ; WAVE64-NEXT: {{ $}} 347 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $vcc 348 ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]] 349 ; 350 ; WAVE32-LABEL: name: copy_vcc_to_s64 351 ; WAVE32: liveins: $vcc 352 ; WAVE32-NEXT: {{ $}} 353 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $vcc 354 ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]] 355 %0:sgpr(s64) = COPY $vcc 356 S_ENDPGM 0, implicit %0 357 358... 359 360--- 361 362name: copy_vcc_lo_to_s32 363legalized: true 364regBankSelected: true 365 366 367body: | 368 bb.0: 369 liveins: $vcc 370 ; WAVE64-LABEL: name: copy_vcc_lo_to_s32 371 ; WAVE64: liveins: $vcc 372 ; WAVE64-NEXT: {{ $}} 373 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $vcc_lo 374 ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]] 375 ; 376 ; WAVE32-LABEL: name: copy_vcc_lo_to_s32 377 ; WAVE32: liveins: $vcc 378 ; WAVE32-NEXT: {{ $}} 379 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $vcc_lo 380 ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]] 381 %0:sgpr(s32) = COPY $vcc_lo 382 S_ENDPGM 0, implicit %0 383 384... 385 386--- 387 388name: copy_s1_to_vcc 389legalized: true 390regBankSelected: true 391tracksRegLiveness: true 392body: | 393 bb.0: 394 liveins: $sgpr0_sgpr1 395 396 ; WAVE64-LABEL: name: copy_s1_to_vcc 397 ; WAVE64: liveins: $sgpr0_sgpr1 398 ; WAVE64-NEXT: {{ $}} 399 ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 400 ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0 401 ; WAVE64-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY1]], implicit-def dead $scc 402 ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_64 = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec 403 ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_NE_U32_e64_]] 404 ; 405 ; WAVE32-LABEL: name: copy_s1_to_vcc 406 ; WAVE32: liveins: $sgpr0_sgpr1 407 ; WAVE32-NEXT: {{ $}} 408 ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 409 ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0 410 ; WAVE32-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY1]], implicit-def dead $scc 411 ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32 = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec 412 ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_NE_U32_e64_]] 413 %0:sgpr(s64) = COPY $sgpr0_sgpr1 414 %1:sgpr(s1) = G_TRUNC %0(s64) 415 %2:vcc(s1) = COPY %1(s1) 416 S_ENDPGM 0, implicit %2 417 418... 419 420--- 421 422name: copy_s1_false_to_vcc 423legalized: true 424regBankSelected: true 425tracksRegLiveness: true 426body: | 427 bb.0: 428 liveins: $sgpr0 429 430 ; WAVE64-LABEL: name: copy_s1_false_to_vcc 431 ; WAVE64: liveins: $sgpr0 432 ; WAVE64-NEXT: {{ $}} 433 ; WAVE64-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0 434 ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_MOV_B64_]] 435 ; 436 ; WAVE32-LABEL: name: copy_s1_false_to_vcc 437 ; WAVE32: liveins: $sgpr0 438 ; WAVE32-NEXT: {{ $}} 439 ; WAVE32-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0 440 ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_MOV_B32_]] 441 %0:sgpr(s1) = G_CONSTANT i1 false 442 %1:vcc(s1) = COPY %0(s1) 443 S_ENDPGM 0, implicit %1 444 445... 446 447--- 448 449name: copy_s1_true_to_vcc 450legalized: true 451regBankSelected: true 452tracksRegLiveness: true 453body: | 454 bb.0: 455 liveins: $sgpr0 456 457 ; WAVE64-LABEL: name: copy_s1_true_to_vcc 458 ; WAVE64: liveins: $sgpr0 459 ; WAVE64-NEXT: {{ $}} 460 ; WAVE64-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1 461 ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_MOV_B64_]] 462 ; 463 ; WAVE32-LABEL: name: copy_s1_true_to_vcc 464 ; WAVE32: liveins: $sgpr0 465 ; WAVE32-NEXT: {{ $}} 466 ; WAVE32-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1 467 ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_MOV_B32_]] 468 %0:sgpr(s1) = G_CONSTANT i1 true 469 %1:vcc(s1) = COPY %0(s1) 470 S_ENDPGM 0, implicit %1 471 472... 473