1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=amdgcn -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=GCN 3 4--- 5 6name: trunc_sgpr_s32_to_s1 7legalized: true 8regBankSelected: true 9 10body: | 11 bb.0: 12 liveins: $sgpr0 13 ; GCN-LABEL: name: trunc_sgpr_s32_to_s1 14 ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 15 ; GCN: S_ENDPGM 0, implicit [[COPY]] 16 %0:sgpr(s32) = COPY $sgpr0 17 %1:sgpr(s1) = G_TRUNC %0 18 S_ENDPGM 0, implicit %1 19... 20--- 21 22name: trunc_sgpr_s32_to_s16 23legalized: true 24regBankSelected: true 25 26body: | 27 bb.0: 28 liveins: $sgpr0 29 ; GCN-LABEL: name: trunc_sgpr_s32_to_s16 30 ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 31 ; GCN: S_ENDPGM 0, implicit [[COPY]] 32 %0:sgpr(s32) = COPY $sgpr0 33 %1:sgpr(s16) = G_TRUNC %0 34 S_ENDPGM 0, implicit %1 35... 36--- 37 38name: trunc_sgpr_s64_to_s32 39legalized: true 40regBankSelected: true 41 42body: | 43 bb.0: 44 liveins: $sgpr0_sgpr1 45 ; GCN-LABEL: name: trunc_sgpr_s64_to_s32 46 ; GCN: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 47 ; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0 48 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 49 %0:sgpr(s64) = COPY $sgpr0_sgpr1 50 %1:sgpr(s32) = G_TRUNC %0 51 S_ENDPGM 0, implicit %1 52... 53--- 54 55name: trunc_sgpr_s64_to_s16 56legalized: true 57regBankSelected: true 58 59body: | 60 bb.0: 61 liveins: $sgpr0_sgpr1 62 ; GCN-LABEL: name: trunc_sgpr_s64_to_s16 63 ; GCN: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 64 ; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0 65 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 66 %0:sgpr(s64) = COPY $sgpr0_sgpr1 67 %1:sgpr(s16) = G_TRUNC %0 68 S_ENDPGM 0, implicit %1 69... 70--- 71 72name: trunc_sgpr_s64_to_s1 73legalized: true 74regBankSelected: true 75 76body: | 77 bb.0: 78 liveins: $sgpr0_sgpr1 79 ; GCN-LABEL: name: trunc_sgpr_s64_to_s1 80 ; GCN: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1 81 ; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0 82 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 83 %0:sgpr(s64) = COPY $sgpr0_sgpr1 84 %1:sgpr(s1) = G_TRUNC %0 85 S_ENDPGM 0, implicit %1 86... 87--- 88 89name: trunc_sgpr_s96_to_s16 90legalized: true 91regBankSelected: true 92 93body: | 94 bb.0: 95 liveins: $sgpr0_sgpr1_sgpr2 96 ; GCN-LABEL: name: trunc_sgpr_s96_to_s16 97 ; GCN: [[COPY:%[0-9]+]]:sgpr_96 = COPY $sgpr0_sgpr1_sgpr2 98 ; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0 99 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 100 %0:sgpr(s96) = COPY $sgpr0_sgpr1_sgpr2 101 %1:sgpr(s16) = G_TRUNC %0 102 S_ENDPGM 0, implicit %1 103... 104--- 105 106name: trunc_sgpr_s96_to_s64 107legalized: true 108regBankSelected: true 109 110body: | 111 bb.0: 112 liveins: $sgpr0_sgpr1_sgpr2 113 ; GCN-LABEL: name: trunc_sgpr_s96_to_s64 114 ; GCN: [[COPY:%[0-9]+]]:sgpr_96_with_sub0_sub1 = COPY $sgpr0_sgpr1_sgpr2 115 ; GCN: [[COPY1:%[0-9]+]]:sreg_64 = COPY [[COPY]].sub0_sub1 116 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 117 %0:sgpr(s96) = COPY $sgpr0_sgpr1_sgpr2 118 %1:sgpr(s64) = G_TRUNC %0 119 S_ENDPGM 0, implicit %1 120... 121--- 122 123name: trunc_sgpr_s128_to_s16 124legalized: true 125regBankSelected: true 126 127body: | 128 bb.0: 129 liveins: $sgpr0_sgpr1_sgpr2_sgpr3 130 ; GCN-LABEL: name: trunc_sgpr_s128_to_s16 131 ; GCN: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3 132 ; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0 133 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 134 %0:sgpr(s128) = COPY $sgpr0_sgpr1_sgpr2_sgpr3 135 %1:sgpr(s16) = G_TRUNC %0 136 S_ENDPGM 0, implicit %1 137... 138--- 139 140name: trunc_sgpr_s128_to_s96 141legalized: true 142regBankSelected: true 143 144body: | 145 bb.0: 146 liveins: $sgpr0_sgpr1_sgpr2_sgpr3 147 ; GCN-LABEL: name: trunc_sgpr_s128_to_s96 148 ; GCN: [[COPY:%[0-9]+]]:sgpr_128_with_sub0_sub1_sub2 = COPY $sgpr0_sgpr1_sgpr2_sgpr3 149 ; GCN: [[COPY1:%[0-9]+]]:sgpr_96 = COPY [[COPY]].sub0_sub1_sub2 150 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 151 %0:sgpr(s128) = COPY $sgpr0_sgpr1_sgpr2_sgpr3 152 %1:sgpr(s96) = G_TRUNC %0 153 S_ENDPGM 0, implicit %1 154... 155--- 156 157name: trunc_sgpr_s256_to_s128 158legalized: true 159regBankSelected: true 160 161body: | 162 bb.0: 163 liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 164 ; GCN-LABEL: name: trunc_sgpr_s256_to_s128 165 ; GCN: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 166 ; GCN: [[COPY1:%[0-9]+]]:sgpr_128 = COPY [[COPY]].sub0_sub1_sub2_sub3 167 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 168 %0:sgpr(s256) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 169 %1:sgpr(s128) = G_TRUNC %0 170 S_ENDPGM 0, implicit %1 171... 172--- 173 174name: trunc_sgpr_s512_to_s256 175legalized: true 176regBankSelected: true 177 178body: | 179 bb.0: 180 liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 181 ; GCN-LABEL: name: trunc_sgpr_s512_to_s256 182 ; GCN: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 183 ; GCN: [[COPY1:%[0-9]+]]:sgpr_256 = COPY [[COPY]].sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7 184 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 185 %0:sgpr(s512) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 186 %1:sgpr(s256) = G_TRUNC %0 187 S_ENDPGM 0, implicit %1 188... 189--- 190 191name: trunc_vgpr_s32_to_s1 192legalized: true 193regBankSelected: true 194 195body: | 196 bb.0: 197 liveins: $vgpr0 198 ; GCN-LABEL: name: trunc_vgpr_s32_to_s1 199 ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 200 ; GCN: S_ENDPGM 0, implicit [[COPY]] 201 %0:vgpr(s32) = COPY $vgpr0 202 %1:vgpr(s1) = G_TRUNC %0 203 S_ENDPGM 0, implicit %1 204... 205--- 206 207name: trunc_vgpr_s32_to_s16 208legalized: true 209regBankSelected: true 210 211body: | 212 bb.0: 213 liveins: $vgpr0 214 ; GCN-LABEL: name: trunc_vgpr_s32_to_s16 215 ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 216 ; GCN: S_ENDPGM 0, implicit [[COPY]] 217 %0:vgpr(s32) = COPY $vgpr0 218 %1:vgpr(s16) = G_TRUNC %0 219 S_ENDPGM 0, implicit %1 220... 221--- 222 223name: trunc_vgpr_s64_to_s32 224legalized: true 225regBankSelected: true 226 227body: | 228 bb.0: 229 liveins: $vgpr0_vgpr1 230 ; GCN-LABEL: name: trunc_vgpr_s64_to_s32 231 ; GCN: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 232 ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0 233 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 234 %0:vgpr(s64) = COPY $vgpr0_vgpr1 235 %1:vgpr(s32) = G_TRUNC %0 236 S_ENDPGM 0, implicit %1 237... 238--- 239 240name: trunc_vgpr_s64_to_s16 241legalized: true 242regBankSelected: true 243 244body: | 245 bb.0: 246 liveins: $vgpr0_vgpr1 247 ; GCN-LABEL: name: trunc_vgpr_s64_to_s16 248 ; GCN: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 249 ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0 250 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 251 %0:vgpr(s64) = COPY $vgpr0_vgpr1 252 %1:vgpr(s16) = G_TRUNC %0 253 S_ENDPGM 0, implicit %1 254... 255--- 256 257name: trunc_vgpr_s64_to_s1 258legalized: true 259regBankSelected: true 260 261body: | 262 bb.0: 263 liveins: $vgpr0_vgpr1 264 ; GCN-LABEL: name: trunc_vgpr_s64_to_s1 265 ; GCN: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 266 ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0 267 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 268 %0:vgpr(s64) = COPY $vgpr0_vgpr1 269 %1:vgpr(s1) = G_TRUNC %0 270 S_ENDPGM 0, implicit %1 271... 272--- 273 274name: trunc_vgpr_s96_to_s16 275legalized: true 276regBankSelected: true 277 278body: | 279 bb.0: 280 liveins: $vgpr0_vgpr1_vgpr2 281 ; GCN-LABEL: name: trunc_vgpr_s96_to_s16 282 ; GCN: [[COPY:%[0-9]+]]:vreg_96 = COPY $vgpr0_vgpr1_vgpr2 283 ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0 284 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 285 %0:vgpr(s96) = COPY $vgpr0_vgpr1_vgpr2 286 %1:vgpr(s16) = G_TRUNC %0 287 S_ENDPGM 0, implicit %1 288... 289--- 290 291name: trunc_vgpr_s96_to_s64 292legalized: true 293regBankSelected: true 294 295body: | 296 bb.0: 297 liveins: $vgpr0_vgpr1_vgpr2 298 ; GCN-LABEL: name: trunc_vgpr_s96_to_s64 299 ; GCN: [[COPY:%[0-9]+]]:vreg_96 = COPY $vgpr0_vgpr1_vgpr2 300 ; GCN: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[COPY]].sub0_sub1 301 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 302 %0:vgpr(s96) = COPY $vgpr0_vgpr1_vgpr2 303 %1:vgpr(s64) = G_TRUNC %0 304 S_ENDPGM 0, implicit %1 305... 306--- 307 308name: trunc_vgpr_s128_to_s16 309legalized: true 310regBankSelected: true 311 312body: | 313 bb.0: 314 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 315 ; GCN-LABEL: name: trunc_vgpr_s128_to_s16 316 ; GCN: [[COPY:%[0-9]+]]:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr3 317 ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0 318 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 319 %0:vgpr(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 320 %1:vgpr(s16) = G_TRUNC %0 321 S_ENDPGM 0, implicit %1 322... 323--- 324 325name: trunc_vgpr_s128_to_s96 326legalized: true 327regBankSelected: true 328 329body: | 330 bb.0: 331 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 332 ; GCN-LABEL: name: trunc_vgpr_s128_to_s96 333 ; GCN: [[COPY:%[0-9]+]]:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr3 334 ; GCN: [[COPY1:%[0-9]+]]:vreg_96 = COPY [[COPY]].sub0_sub1_sub2 335 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 336 %0:vgpr(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 337 %1:vgpr(s96) = G_TRUNC %0 338 S_ENDPGM 0, implicit %1 339... 340--- 341 342name: trunc_vgpr_s256_to_s128 343legalized: true 344regBankSelected: true 345 346body: | 347 bb.0: 348 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 349 ; GCN-LABEL: name: trunc_vgpr_s256_to_s128 350 ; GCN: [[COPY:%[0-9]+]]:vreg_256 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 351 ; GCN: [[COPY1:%[0-9]+]]:vreg_128 = COPY [[COPY]].sub0_sub1_sub2_sub3 352 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 353 %0:vgpr(s256) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 354 %1:vgpr(s128) = G_TRUNC %0 355 S_ENDPGM 0, implicit %1 356... 357--- 358 359name: trunc_vgpr_s512_to_s256 360legalized: true 361regBankSelected: true 362 363body: | 364 bb.0: 365 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 366 ; GCN-LABEL: name: trunc_vgpr_s512_to_s256 367 ; GCN: [[COPY:%[0-9]+]]:vreg_512 = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 368 ; GCN: [[COPY1:%[0-9]+]]:vreg_256 = COPY [[COPY]].sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7 369 ; GCN: S_ENDPGM 0, implicit [[COPY1]] 370 %0:vgpr(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 371 %1:vgpr(s256) = G_TRUNC %0 372 S_ENDPGM 0, implicit %1 373... 374 375--- 376 377name: trunc_sgpr_s32_to_s1_use 378legalized: true 379regBankSelected: true 380 381body: | 382 bb.0: 383 liveins: $sgpr0, $sgpr1 384 ; GCN-LABEL: name: trunc_sgpr_s32_to_s1_use 385 ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 386 ; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 387 ; GCN: $scc = COPY [[COPY]] 388 ; GCN: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY]], [[COPY1]], implicit $scc 389 ; GCN: S_ENDPGM 0, implicit [[S_CSELECT_B32_]] 390 %0:sgpr(s32) = COPY $sgpr0 391 %1:sgpr(s32) = COPY $sgpr1 392 %2:sgpr(s1) = G_TRUNC %0 393 %3:sgpr(s32) = G_SELECT %2, %0, %1 394 S_ENDPGM 0, implicit %3 395... 396