1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer -global-isel-abort=0 %s -o - | FileCheck %s 3 4--- 5name: test_extract_s32_s64_offset0 6body: | 7 bb.0: 8 liveins: $vgpr0_vgpr1 9 10 ; CHECK-LABEL: name: test_extract_s32_s64_offset0 11 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 12 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 0 13 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 14 %0:_(s64) = COPY $vgpr0_vgpr1 15 %1:_(s32) = G_EXTRACT %0, 0 16 $vgpr0 = COPY %1 17... 18--- 19name: test_extract_s32_s64_offset32 20body: | 21 bb.0: 22 liveins: $vgpr0_vgpr1 23 24 ; CHECK-LABEL: name: test_extract_s32_s64_offset32 25 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 26 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 32 27 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 28 %0:_(s64) = COPY $vgpr0_vgpr1 29 %1:_(s32) = G_EXTRACT %0, 32 30 $vgpr0 = COPY %1 31... 32 33--- 34name: test_extract_s8_s15_offset0 35body: | 36 bb.0: 37 liveins: $vgpr0_vgpr1 38 39 ; CHECK-LABEL: name: test_extract_s8_s15_offset0 40 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 41 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 42 ; CHECK: $vgpr0 = COPY [[TRUNC]](s32) 43 %0:_(s64) = COPY $vgpr0_vgpr1 44 %1:_(s31) = G_TRUNC %0 45 %2:_(s8) = G_EXTRACT %1, 0 46 %3:_(s32) = G_ANYEXT %2 47 $vgpr0 = COPY %3 48... 49 50--- 51name: test_extract_s16_s31_offset0 52body: | 53 bb.0: 54 liveins: $vgpr0_vgpr1 55 56 ; CHECK-LABEL: name: test_extract_s16_s31_offset0 57 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 58 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 59 ; CHECK: $vgpr0 = COPY [[TRUNC]](s32) 60 %0:_(s64) = COPY $vgpr0_vgpr1 61 %1:_(s31) = G_TRUNC %0 62 %2:_(s16) = G_EXTRACT %1, 0 63 %3:_(s32) = G_ANYEXT %2 64 $vgpr0 = COPY %3 65... 66 67--- 68name: test_extract_s32_s48_offset0 69body: | 70 bb.0: 71 liveins: $vgpr0_vgpr1 72 73 ; CHECK-LABEL: name: test_extract_s32_s48_offset0 74 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 75 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 0 76 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 77 %0:_(s64) = COPY $vgpr0_vgpr1 78 %1:_(s48) = G_TRUNC %0 79 %2:_(s32) = G_EXTRACT %1, 0 80 $vgpr0 = COPY %2 81... 82 83--- 84name: test_extract_s32_s96_offset0 85body: | 86 bb.0: 87 liveins: $vgpr0_vgpr1_vgpr2 88 89 ; CHECK-LABEL: name: test_extract_s32_s96_offset0 90 ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 91 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 0 92 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 93 %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 94 %1:_(s32) = G_EXTRACT %0, 0 95 $vgpr0 = COPY %1 96... 97--- 98name: test_extract_s32_s96_offset32 99body: | 100 bb.0: 101 liveins: $vgpr0_vgpr1_vgpr2 102 103 ; CHECK-LABEL: name: test_extract_s32_s96_offset32 104 ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 105 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 32 106 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 107 %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 108 %1:_(s32) = G_EXTRACT %0, 32 109 $vgpr0 = COPY %1 110... 111--- 112name: test_extract_s32_s96_offset64 113body: | 114 bb.0: 115 liveins: $vgpr0_vgpr1_vgpr2 116 117 ; CHECK-LABEL: name: test_extract_s32_s96_offset64 118 ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 119 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 64 120 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 121 %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 122 %1:_(s32) = G_EXTRACT %0, 64 123 $vgpr0 = COPY %1 124... 125--- 126name: test_extract_s32_s128_offset0 127body: | 128 bb.0: 129 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 130 131 ; CHECK-LABEL: name: test_extract_s32_s128_offset0 132 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 133 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 0 134 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 135 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 136 %1:_(s32) = G_EXTRACT %0, 0 137 $vgpr0 = COPY %1 138... 139--- 140name: test_extract_s32_s128_offset32 141body: | 142 bb.0: 143 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 144 145 ; CHECK-LABEL: name: test_extract_s32_s128_offset32 146 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 147 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 32 148 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 149 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 150 %1:_(s32) = G_EXTRACT %0, 32 151 $vgpr0 = COPY %1 152... 153--- 154name: test_extract_s32_s128_offset64 155body: | 156 bb.0: 157 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 158 159 ; CHECK-LABEL: name: test_extract_s32_s128_offset64 160 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 161 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 64 162 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 163 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 164 %1:_(s32) = G_EXTRACT %0, 64 165 $vgpr0 = COPY %1 166... 167--- 168name: test_extract_s32_s128_offset96 169body: | 170 bb.0: 171 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 172 173 ; CHECK-LABEL: name: test_extract_s32_s128_offset96 174 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 175 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 96 176 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 177 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 178 %1:_(s32) = G_EXTRACT %0, 96 179 $vgpr0 = COPY %1 180... 181 182--- 183name: test_extract_s32_v2s32_offset0 184body: | 185 bb.0: 186 liveins: $vgpr0_vgpr1 187 188 ; CHECK-LABEL: name: test_extract_s32_v2s32_offset0 189 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 190 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<2 x s32>), 0 191 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 192 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 193 %1:_(s32) = G_EXTRACT %0, 0 194 $vgpr0 = COPY %1 195... 196--- 197name: test_extract_s32_v2s32_offset32 198body: | 199 bb.0: 200 liveins: $vgpr0_vgpr1 201 202 ; CHECK-LABEL: name: test_extract_s32_v2s32_offset32 203 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 204 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<2 x s32>), 32 205 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 206 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 207 %1:_(s32) = G_EXTRACT %0, 32 208 $vgpr0 = COPY %1 209... 210--- 211name: test_extract_s32_v3s32_offset0 212body: | 213 bb.0: 214 liveins: $vgpr0_vgpr1_vgpr2 215 216 ; CHECK-LABEL: name: test_extract_s32_v3s32_offset0 217 ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 218 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<3 x s32>), 0 219 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 220 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 221 %1:_(s32) = G_EXTRACT %0, 0 222 $vgpr0 = COPY %1 223... 224--- 225name: test_extract_s32_v3s32_offset32 226body: | 227 bb.0: 228 liveins: $vgpr0_vgpr1_vgpr2 229 230 ; CHECK-LABEL: name: test_extract_s32_v3s32_offset32 231 ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 232 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<3 x s32>), 32 233 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 234 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 235 %1:_(s32) = G_EXTRACT %0, 32 236 $vgpr0 = COPY %1 237... 238--- 239name: test_extract_s32_v3s32_offset64 240body: | 241 bb.0: 242 liveins: $vgpr0_vgpr1_vgpr2 243 244 ; CHECK-LABEL: name: test_extract_s32_v3s32_offset64 245 ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 246 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<3 x s32>), 64 247 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 248 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 249 %1:_(s32) = G_EXTRACT %0, 64 250 $vgpr0 = COPY %1 251... 252--- 253name: test_extract_s32_v4s32_offset0 254body: | 255 bb.0: 256 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 257 258 ; CHECK-LABEL: name: test_extract_s32_v4s32_offset0 259 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 260 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<4 x s32>), 0 261 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 262 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 263 %1:_(s32) = G_EXTRACT %0, 0 264 $vgpr0 = COPY %1 265... 266--- 267name: test_extract_s32_v4s32_offset32 268body: | 269 bb.0: 270 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 271 272 ; CHECK-LABEL: name: test_extract_s32_v4s32_offset32 273 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 274 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 32 275 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 276 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 277 %1:_(s32) = G_EXTRACT %0, 32 278 $vgpr0 = COPY %1 279... 280--- 281name: test_extract_s32_v4s32_offset64 282body: | 283 bb.0: 284 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 285 286 ; CHECK-LABEL: name: test_extract_s32_v4s32_offset64 287 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 288 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 64 289 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 290 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 291 %1:_(s32) = G_EXTRACT %0, 64 292 $vgpr0 = COPY %1 293... 294--- 295name: test_extract_s32_v4s32_offset96 296body: | 297 bb.0: 298 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 299 300 ; CHECK-LABEL: name: test_extract_s32_v4s32_offset96 301 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 302 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 96 303 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) 304 %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 305 %1:_(s32) = G_EXTRACT %0, 96 306 $vgpr0 = COPY %1 307... 308--- 309name: test_extract_v2s32_v4s32_offset0 310body: | 311 bb.0: 312 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 313 314 ; CHECK-LABEL: name: test_extract_v2s32_v4s32_offset0 315 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 316 ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[COPY]](<4 x s32>), 0 317 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](<2 x s32>) 318 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 319 %1:_(<2 x s32>) = G_EXTRACT %0, 0 320 $vgpr0_vgpr1 = COPY %1 321... 322 323--- 324name: test_extract_v2s32_v4s32_offset32 325body: | 326 bb.0: 327 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 328 329 ; CHECK-LABEL: name: test_extract_v2s32_v4s32_offset32 330 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 331 ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[COPY]](<4 x s32>), 32 332 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](<2 x s32>) 333 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 334 %1:_(<2 x s32>) = G_EXTRACT %0, 32 335 $vgpr0_vgpr1 = COPY %1 336... 337 338--- 339name: test_extract_v2s32_v4s32_offset64 340body: | 341 bb.0: 342 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 343 344 ; CHECK-LABEL: name: test_extract_v2s32_v4s32_offset64 345 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 346 ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[COPY]](<4 x s32>), 64 347 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](<2 x s32>) 348 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 349 %1:_(<2 x s32>) = G_EXTRACT %0, 64 350 $vgpr0_vgpr1 = COPY %1 351... 352--- 353name: test_extract_s64_v4s32_offset0 354body: | 355 bb.0: 356 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 357 358 ; CHECK-LABEL: name: test_extract_s64_v4s32_offset0 359 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 360 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[COPY]](<4 x s32>), 0 361 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64) 362 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 363 %1:_(s64) = G_EXTRACT %0, 0 364 $vgpr0_vgpr1 = COPY %1 365... 366 367--- 368name: test_extract_s64_v4s32_offset32 369body: | 370 bb.0: 371 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 372 373 ; CHECK-LABEL: name: test_extract_s64_v4s32_offset32 374 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 375 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[COPY]](<4 x s32>), 32 376 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64) 377 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 378 %1:_(s64) = G_EXTRACT %0, 32 379 $vgpr0_vgpr1 = COPY %1 380... 381 382--- 383name: test_extract_s64_v4s32_offset64 384body: | 385 bb.0: 386 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 387 388 ; CHECK-LABEL: name: test_extract_s64_v4s32_offset64 389 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 390 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[COPY]](<4 x s32>), 64 391 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64) 392 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 393 %1:_(s64) = G_EXTRACT %0, 64 394 $vgpr0_vgpr1 = COPY %1 395... 396--- 397name: test_extract_p0_v4s32_offset0 398body: | 399 bb.0: 400 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 401 402 ; CHECK-LABEL: name: test_extract_p0_v4s32_offset0 403 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 404 ; CHECK: [[EXTRACT:%[0-9]+]]:_(p0) = G_EXTRACT [[COPY]](<4 x s32>), 0 405 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](p0) 406 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 407 %1:_(p0) = G_EXTRACT %0, 0 408 $vgpr0_vgpr1 = COPY %1 409... 410 411--- 412name: test_extract_p0_v4s32_offset32 413body: | 414 bb.0: 415 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 416 417 ; CHECK-LABEL: name: test_extract_p0_v4s32_offset32 418 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 419 ; CHECK: [[EXTRACT:%[0-9]+]]:_(p0) = G_EXTRACT [[COPY]](<4 x s32>), 32 420 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](p0) 421 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 422 %1:_(p0) = G_EXTRACT %0, 32 423 $vgpr0_vgpr1 = COPY %1 424... 425 426--- 427name: test_extract_p0_v4s32_offset64 428body: | 429 bb.0: 430 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 431 432 ; CHECK-LABEL: name: test_extract_p0_v4s32_offset64 433 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 434 ; CHECK: [[EXTRACT:%[0-9]+]]:_(p0) = G_EXTRACT [[COPY]](<4 x s32>), 64 435 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](p0) 436 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 437 %1:_(p0) = G_EXTRACT %0, 64 438 $vgpr0_vgpr1 = COPY %1 439... 440 441--- 442name: extract_s8_v4s8_offset0 443body: | 444 bb.0: 445 ; CHECK-LABEL: name: extract_s8_v4s8_offset0 446 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF 447 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[DEF]](<4 x s32>) 448 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>) 449 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>) 450 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC]](<2 x s16>), [[TRUNC1]](<2 x s16>) 451 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[CONCAT_VECTORS]](<4 x s16>), 0 452 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 453 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 454 %0:_(<4 x s8>) = G_IMPLICIT_DEF 455 %1:_(s8) = G_EXTRACT %0, 0 456 %2:_(s32) = G_ANYEXT %1 457 $vgpr0 = COPY %2 458... 459 460--- 461name: extract_s8_v4s8_offset8 462body: | 463 bb.0: 464 ; CHECK-LABEL: name: extract_s8_v4s8_offset8 465 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF 466 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[DEF]](<4 x s32>) 467 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>) 468 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>) 469 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC]](<2 x s16>), [[TRUNC1]](<2 x s16>) 470 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[CONCAT_VECTORS]](<4 x s16>), 16 471 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 472 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 473 %0:_(<4 x s8>) = G_IMPLICIT_DEF 474 %1:_(s8) = G_EXTRACT %0, 8 475 %2:_(s32) = G_ANYEXT %1 476 $vgpr0 = COPY %2 477... 478 479--- 480name: extract_s8_v4s8_offset16 481body: | 482 bb.0: 483 ; CHECK-LABEL: name: extract_s8_v4s8_offset16 484 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF 485 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[DEF]](<4 x s32>) 486 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>) 487 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>) 488 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC]](<2 x s16>), [[TRUNC1]](<2 x s16>) 489 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[CONCAT_VECTORS]](<4 x s16>), 32 490 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 491 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 492 %0:_(<4 x s8>) = G_IMPLICIT_DEF 493 %1:_(s8) = G_EXTRACT %0, 16 494 %2:_(s32) = G_ANYEXT %1 495 $vgpr0 = COPY %2 496... 497 498--- 499name: extract_s8_v4s8_offset24 500body: | 501 bb.0: 502 ; CHECK-LABEL: name: extract_s8_v4s8_offset24 503 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF 504 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[DEF]](<4 x s32>) 505 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>) 506 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>) 507 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC]](<2 x s16>), [[TRUNC1]](<2 x s16>) 508 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[CONCAT_VECTORS]](<4 x s16>), 48 509 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 510 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 511 %0:_(<4 x s8>) = G_IMPLICIT_DEF 512 %1:_(s8) = G_EXTRACT %0, 24 513 %2:_(s32) = G_ANYEXT %1 514 $vgpr0 = COPY %2 515... 516 517# FIXME: Leaves behind dead G_TRUNC 518--- 519name: extract_s8_v3s8_offset16 520body: | 521 bb.0: 522 ; CHECK-LABEL: name: extract_s8_v3s8_offset16 523 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF 524 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<4 x s32>) 525 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 526 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C]] 527 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C]] 528 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 529 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 530 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 531 ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 532 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[UV2]], [[C]] 533 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 534 ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C1]](s32) 535 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 536 ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 537 ; CHECK: [[DEF1:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF 538 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[BITCAST]](<2 x s16>), [[BITCAST1]](<2 x s16>), [[DEF1]](<2 x s16>) 539 ; CHECK: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>) 540 ; CHECK: [[DEF2:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 541 ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF2]], [[UV4]](<3 x s16>), 0 542 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[INSERT]](<4 x s16>), 32 543 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 544 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 545 %0:_(<3 x s8>) = G_IMPLICIT_DEF 546 %1:_(s8) = G_EXTRACT %0, 16 547 %2:_(s32) = G_ANYEXT %1 548 $vgpr0 = COPY %2 549... 550 551--- 552name: extract_s8_v5s1_offset4 553body: | 554 bb.0: 555 ; CHECK-LABEL: name: extract_s8_v5s1_offset4 556 ; CHECK: [[DEF:%[0-9]+]]:_(<5 x s32>) = G_IMPLICIT_DEF 557 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<5 x s32>) 558 ; CHECK: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF 559 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[UV1]](s32) 560 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UV2]](s32), [[UV3]](s32) 561 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UV4]](s32), [[DEF1]](s32) 562 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BUILD_VECTOR]](<2 x s32>) 563 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BUILD_VECTOR1]](<2 x s32>) 564 ; CHECK: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BUILD_VECTOR2]](<2 x s32>) 565 ; CHECK: [[DEF2:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF 566 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<10 x s16>) = G_CONCAT_VECTORS [[TRUNC]](<2 x s16>), [[TRUNC1]](<2 x s16>), [[TRUNC2]](<2 x s16>), [[DEF2]](<2 x s16>), [[DEF2]](<2 x s16>) 567 ; CHECK: [[UV5:%[0-9]+]]:_(<5 x s16>), [[UV6:%[0-9]+]]:_(<5 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<10 x s16>) 568 ; CHECK: [[DEF3:%[0-9]+]]:_(<6 x s16>) = G_IMPLICIT_DEF 569 ; CHECK: [[INSERT:%[0-9]+]]:_(<6 x s16>) = G_INSERT [[DEF3]], [[UV5]](<5 x s16>), 0 570 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[INSERT]](<6 x s16>), 64 571 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 572 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 573 %0:_(<5 x s1>) = G_IMPLICIT_DEF 574 %1:_(s1) = G_EXTRACT %0, 4 575 %2:_(s32) = G_ANYEXT %1 576 $vgpr0 = COPY %2 577... 578 579--- 580name: extract_v2s16_v4s16_offset32 581body: | 582 bb.0: 583 ; CHECK-LABEL: name: extract_v2s16_v4s16_offset32 584 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 585 ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s16>) = G_EXTRACT [[DEF]](<4 x s16>), 32 586 ; CHECK: $vgpr0 = COPY [[EXTRACT]](<2 x s16>) 587 %0:_(<4 x s16>) = G_IMPLICIT_DEF 588 %1:_(<2 x s16>) = G_EXTRACT %0, 32 589 $vgpr0 = COPY %1 590... 591 592--- 593name: extract_v2s16_v6s16_offset32 594body: | 595 bb.0: 596 ; CHECK-LABEL: name: extract_v2s16_v6s16_offset32 597 ; CHECK: [[DEF:%[0-9]+]]:_(<6 x s16>) = G_IMPLICIT_DEF 598 ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s16>) = G_EXTRACT [[DEF]](<6 x s16>), 32 599 ; CHECK: $vgpr0 = COPY [[EXTRACT]](<2 x s16>) 600 %0:_(<6 x s16>) = G_IMPLICIT_DEF 601 %1:_(<2 x s16>) = G_EXTRACT %0, 32 602 $vgpr0 = COPY %1 603... 604 605--- 606name: test_extract_s8_s16_offset0 607body: | 608 bb.0: 609 liveins: $vgpr0 610 ; CHECK-LABEL: name: test_extract_s8_s16_offset0 611 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 612 ; CHECK: $vgpr0 = COPY [[COPY]](s32) 613 %0:_(s32) = COPY $vgpr0 614 %1:_(s16) = G_TRUNC %0 615 %2:_(s8) = G_EXTRACT %1, 0 616 %3:_(s32) = G_ANYEXT %2 617 $vgpr0 = COPY %3 618... 619 620--- 621name: test_extract_s8_s16_offset1 622body: | 623 bb.0: 624 liveins: $vgpr0 625 ; CHECK-LABEL: name: test_extract_s8_s16_offset1 626 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 627 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 628 ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 1 629 ; CHECK: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[TRUNC]], [[C]](s16) 630 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16) 631 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 632 %0:_(s32) = COPY $vgpr0 633 %1:_(s16) = G_TRUNC %0 634 %2:_(s8) = G_EXTRACT %1, 1 635 %3:_(s32) = G_ANYEXT %2 636 $vgpr0 = COPY %3 637... 638 639--- 640name: test_extract_s8_s16_offset8 641body: | 642 bb.0: 643 liveins: $vgpr0 644 ; CHECK-LABEL: name: test_extract_s8_s16_offset8 645 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 646 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 647 ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 8 648 ; CHECK: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[TRUNC]], [[C]](s16) 649 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16) 650 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 651 %0:_(s32) = COPY $vgpr0 652 %1:_(s16) = G_TRUNC %0 653 %2:_(s8) = G_EXTRACT %1, 8 654 %3:_(s32) = G_ANYEXT %2 655 $vgpr0 = COPY %3 656... 657 658--- 659name: test_extract_s8_s32_offset0 660body: | 661 bb.0: 662 liveins: $vgpr0 663 ; CHECK-LABEL: name: test_extract_s8_s32_offset0 664 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 665 ; CHECK: $vgpr0 = COPY [[COPY]](s32) 666 %0:_(s32) = COPY $vgpr0 667 %1:_(s8) = G_EXTRACT %0, 0 668 %2:_(s32) = G_ANYEXT %1 669 $vgpr0 = COPY %2 670... 671 672--- 673name: test_extract_s8_s32_offset1 674body: | 675 bb.0: 676 liveins: $vgpr0 677 ; CHECK-LABEL: name: test_extract_s8_s32_offset1 678 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 679 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 680 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 681 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 682 %0:_(s32) = COPY $vgpr0 683 %1:_(s8) = G_EXTRACT %0, 1 684 %2:_(s32) = G_ANYEXT %1 685 $vgpr0 = COPY %2 686... 687 688--- 689name: test_extract_s8_s32_offset8 690body: | 691 bb.0: 692 liveins: $vgpr0 693 ; CHECK-LABEL: name: test_extract_s8_s32_offset8 694 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 695 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 696 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 697 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 698 %0:_(s32) = COPY $vgpr0 699 %1:_(s8) = G_EXTRACT %0, 8 700 %2:_(s32) = G_ANYEXT %1 701 $vgpr0 = COPY %2 702... 703 704--- 705name: test_extract_s8_s32_offset16 706body: | 707 bb.0: 708 liveins: $vgpr0 709 ; CHECK-LABEL: name: test_extract_s8_s32_offset16 710 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 711 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 712 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 713 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 714 %0:_(s32) = COPY $vgpr0 715 %1:_(s8) = G_EXTRACT %0, 16 716 %2:_(s32) = G_ANYEXT %1 717 $vgpr0 = COPY %2 718... 719 720--- 721name: test_extract_s8_s32_offset24 722body: | 723 bb.0: 724 liveins: $vgpr0 725 ; CHECK-LABEL: name: test_extract_s8_s32_offset24 726 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 727 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 728 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 729 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 730 %0:_(s32) = COPY $vgpr0 731 %1:_(s8) = G_EXTRACT %0, 16 732 %2:_(s32) = G_ANYEXT %1 733 $vgpr0 = COPY %2 734... 735 736--- 737name: test_extract_s8_p3_offset0 738body: | 739 bb.0: 740 liveins: $vgpr0 741 ; CHECK-LABEL: name: test_extract_s8_p3_offset0 742 ; CHECK: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0 743 ; CHECK: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p3) 744 ; CHECK: $vgpr0 = COPY [[PTRTOINT]](s32) 745 %0:_(p3) = COPY $vgpr0 746 %1:_(s8) = G_EXTRACT %0, 0 747 %2:_(s32) = G_ANYEXT %1 748 $vgpr0 = COPY %2 749... 750 751--- 752name: test_extract_s8_p3_offset8 753body: | 754 bb.0: 755 liveins: $vgpr0 756 ; CHECK-LABEL: name: test_extract_s8_p3_offset8 757 ; CHECK: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0 758 ; CHECK: [[PTRTOINT:%[0-9]+]]:_(s32) = G_PTRTOINT [[COPY]](p3) 759 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 760 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[PTRTOINT]], [[C]](s32) 761 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 762 %0:_(p3) = COPY $vgpr0 763 %1:_(s8) = G_EXTRACT %0, 8 764 %2:_(s32) = G_ANYEXT %1 765 $vgpr0 = COPY %2 766... 767 768--- 769name: test_extract_s1_s8_offset0 770body: | 771 bb.0: 772 liveins: $vgpr0 773 ; CHECK-LABEL: name: test_extract_s1_s8_offset0 774 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 775 ; CHECK: $vgpr0 = COPY [[COPY]](s32) 776 %0:_(s32) = COPY $vgpr0 777 %1:_(s8) = G_TRUNC %0 778 %2:_(s1) = G_EXTRACT %1, 0 779 %3:_(s32) = G_ANYEXT %2 780 $vgpr0 = COPY %3 781... 782 783--- 784name: test_extract_s1_s8_offset2 785body: | 786 bb.0: 787 liveins: $vgpr0 788 ; CHECK-LABEL: name: test_extract_s1_s8_offset2 789 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 790 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 791 ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 2 792 ; CHECK: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[TRUNC]], [[C]](s16) 793 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16) 794 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 795 %0:_(s32) = COPY $vgpr0 796 %1:_(s8) = G_TRUNC %0 797 %2:_(s1) = G_EXTRACT %1, 2 798 %3:_(s32) = G_ANYEXT %2 799 $vgpr0 = COPY %3 800... 801 802--- 803name: test_extract_s8_s64_offset2 804body: | 805 bb.0: 806 liveins: $vgpr0_vgpr1 807 ; CHECK-LABEL: name: test_extract_s8_s64_offset2 808 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 809 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2 810 ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY]], [[C]](s32) 811 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64) 812 ; CHECK: $vgpr0 = COPY [[TRUNC]](s32) 813 %0:_(s64) = COPY $vgpr0_vgpr1 814 %1:_(s8) = G_EXTRACT %0, 2 815 %2:_(s32) = G_ANYEXT %1 816 $vgpr0 = COPY %2 817... 818 819--- 820name: extract_s16_v3s16_offset0 821body: | 822 bb.0: 823 824 ; CHECK-LABEL: name: extract_s16_v3s16_offset0 825 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 826 ; CHECK: [[DEF1:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 827 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x s16>) = G_CONCAT_VECTORS [[DEF]](<4 x s16>), [[DEF1]](<4 x s16>), [[DEF1]](<4 x s16>) 828 ; CHECK: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>), [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<12 x s16>) 829 ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF1]], [[UV]](<3 x s16>), 0 830 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[INSERT]](<4 x s16>), 0 831 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 832 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 833 %0:_(<3 x s16>) = G_IMPLICIT_DEF 834 %1:_(s16) = G_EXTRACT %0, 0 835 %2:_(s32) = G_ANYEXT %1 836 $vgpr0 = COPY %2 837... 838 839--- 840name: test_extract_s8_s64_offset16 841body: | 842 bb.0: 843 liveins: $vgpr0_vgpr1 844 ; CHECK-LABEL: name: test_extract_s8_s64_offset16 845 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 846 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 847 ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY]], [[C]](s32) 848 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64) 849 ; CHECK: $vgpr0 = COPY [[TRUNC]](s32) 850 %0:_(s64) = COPY $vgpr0_vgpr1 851 %1:_(s8) = G_EXTRACT %0, 16 852 %2:_(s32) = G_ANYEXT %1 853 $vgpr0 = COPY %2 854... 855 856--- 857name: test_extract_s16_s64_offset16 858body: | 859 bb.0: 860 liveins: $vgpr0_vgpr1 861 ; CHECK-LABEL: name: test_extract_s16_s64_offset16 862 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 863 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](s64), 16 864 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 865 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 866 %0:_(s64) = COPY $vgpr0_vgpr1 867 %1:_(s16) = G_EXTRACT %0, 16 868 %2:_(s32) = G_ANYEXT %1 869 $vgpr0 = COPY %2 870... 871 872--- 873name: test_extract_s16_s64_offset32 874body: | 875 bb.0: 876 liveins: $vgpr0_vgpr1 877 ; CHECK-LABEL: name: test_extract_s16_s64_offset32 878 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 879 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](s64), 32 880 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 881 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 882 %0:_(s64) = COPY $vgpr0_vgpr1 883 %1:_(s16) = G_EXTRACT %0, 32 884 %2:_(s32) = G_ANYEXT %1 885 $vgpr0 = COPY %2 886... 887 888--- 889name: test_extract_s16_s64_offset48 890body: | 891 bb.0: 892 liveins: $vgpr0_vgpr1 893 ; CHECK-LABEL: name: test_extract_s16_s64_offset48 894 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 895 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](s64), 48 896 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 897 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 898 %0:_(s64) = COPY $vgpr0_vgpr1 899 %1:_(s16) = G_EXTRACT %0, 48 900 %2:_(s32) = G_ANYEXT %1 901 $vgpr0 = COPY %2 902... 903 904--- 905name: extract_v2s16_v3s16_offset0 906body: | 907 bb.0: 908 909 ; CHECK-LABEL: name: extract_v2s16_v3s16_offset0 910 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 911 ; CHECK: [[DEF1:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 912 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x s16>) = G_CONCAT_VECTORS [[DEF]](<4 x s16>), [[DEF1]](<4 x s16>), [[DEF1]](<4 x s16>) 913 ; CHECK: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>), [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<12 x s16>) 914 ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF1]], [[UV]](<3 x s16>), 0 915 ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s16>) = G_EXTRACT [[INSERT]](<4 x s16>), 0 916 ; CHECK: $vgpr0 = COPY [[EXTRACT]](<2 x s16>) 917 %0:_(<3 x s16>) = G_IMPLICIT_DEF 918 %1:_(<2 x s16>) = G_EXTRACT %0, 0 919 $vgpr0 = COPY %1 920... 921 922--- 923name: extract_v2s16_v5s16_offset0 924body: | 925 bb.0: 926 927 ; CHECK-LABEL: name: extract_v2s16_v5s16_offset0 928 ; CHECK: [[DEF:%[0-9]+]]:_(<6 x s16>) = G_IMPLICIT_DEF 929 ; CHECK: [[DEF1:%[0-9]+]]:_(<6 x s16>) = G_IMPLICIT_DEF 930 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<30 x s16>) = G_CONCAT_VECTORS [[DEF]](<6 x s16>), [[DEF1]](<6 x s16>), [[DEF1]](<6 x s16>), [[DEF1]](<6 x s16>), [[DEF1]](<6 x s16>) 931 ; CHECK: [[UV:%[0-9]+]]:_(<5 x s16>), [[UV1:%[0-9]+]]:_(<5 x s16>), [[UV2:%[0-9]+]]:_(<5 x s16>), [[UV3:%[0-9]+]]:_(<5 x s16>), [[UV4:%[0-9]+]]:_(<5 x s16>), [[UV5:%[0-9]+]]:_(<5 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<30 x s16>) 932 ; CHECK: [[INSERT:%[0-9]+]]:_(<6 x s16>) = G_INSERT [[DEF1]], [[UV]](<5 x s16>), 0 933 ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s16>) = G_EXTRACT [[INSERT]](<6 x s16>), 0 934 ; CHECK: $vgpr0 = COPY [[EXTRACT]](<2 x s16>) 935 %0:_(<5 x s16>) = G_IMPLICIT_DEF 936 %1:_(<2 x s16>) = G_EXTRACT %0, 0 937 $vgpr0 = COPY %1 938... 939 940--- 941name: extract_s16_v2s16_offset0 942body: | 943 bb.0: 944 liveins: $vgpr0 945 946 ; CHECK-LABEL: name: extract_s16_v2s16_offset0 947 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 948 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 949 ; CHECK: $vgpr0 = COPY [[BITCAST]](s32) 950 %0:_(<2 x s16>) = COPY $vgpr0 951 %1:_(s16) = G_EXTRACT %0, 0 952 %2:_(s32) = G_ANYEXT %1 953 $vgpr0 = COPY %2 954... 955 956--- 957name: extract_s16_v2s16_offset1 958body: | 959 bb.0: 960 liveins: $vgpr0 961 962 ; CHECK-LABEL: name: extract_s16_v2s16_offset1 963 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 964 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 965 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 966 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 967 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 968 %0:_(<2 x s16>) = COPY $vgpr0 969 %1:_(s16) = G_EXTRACT %0, 1 970 %2:_(s32) = G_ANYEXT %1 971 $vgpr0 = COPY %2 972... 973 974--- 975name: extract_s16_v2s16_offset8 976body: | 977 bb.0: 978 liveins: $vgpr0 979 980 ; CHECK-LABEL: name: extract_s16_v2s16_offset8 981 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 982 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 983 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 984 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 985 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 986 %0:_(<2 x s16>) = COPY $vgpr0 987 %1:_(s16) = G_EXTRACT %0, 8 988 %2:_(s32) = G_ANYEXT %1 989 $vgpr0 = COPY %2 990... 991 992--- 993name: extract_s16_v2s16_offset16 994body: | 995 bb.0: 996 liveins: $vgpr0 997 998 ; CHECK-LABEL: name: extract_s16_v2s16_offset16 999 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 1000 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 1001 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1002 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 1003 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 1004 %0:_(<2 x s16>) = COPY $vgpr0 1005 %1:_(s16) = G_EXTRACT %0, 16 1006 %2:_(s32) = G_ANYEXT %1 1007 $vgpr0 = COPY %2 1008... 1009 1010--- 1011name: extract_s16_s32_offset0 1012body: | 1013 bb.0: 1014 liveins: $vgpr0 1015 1016 ; CHECK-LABEL: name: extract_s16_s32_offset0 1017 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1018 ; CHECK: $vgpr0 = COPY [[COPY]](s32) 1019 %0:_(s32) = COPY $vgpr0 1020 %1:_(s16) = G_EXTRACT %0, 0 1021 %2:_(s32) = G_ANYEXT %1 1022 $vgpr0 = COPY %2 1023... 1024 1025--- 1026name: extract_s16_s32_offset1 1027body: | 1028 bb.0: 1029 liveins: $vgpr0 1030 1031 ; CHECK-LABEL: name: extract_s16_s32_offset1 1032 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1033 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 1034 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 1035 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 1036 %0:_(s32) = COPY $vgpr0 1037 %1:_(s16) = G_EXTRACT %0, 1 1038 %2:_(s32) = G_ANYEXT %1 1039 $vgpr0 = COPY %2 1040... 1041 1042--- 1043name: extract_s16_s32_offset8 1044body: | 1045 bb.0: 1046 liveins: $vgpr0 1047 1048 ; CHECK-LABEL: name: extract_s16_s32_offset8 1049 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1050 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 1051 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 1052 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 1053 %0:_(s32) = COPY $vgpr0 1054 %1:_(s16) = G_EXTRACT %0, 8 1055 %2:_(s32) = G_ANYEXT %1 1056 $vgpr0 = COPY %2 1057... 1058 1059--- 1060name: extract_s16_s32_offset16 1061body: | 1062 bb.0: 1063 liveins: $vgpr0 1064 1065 ; CHECK-LABEL: name: extract_s16_s32_offset16 1066 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1067 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1068 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 1069 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 1070 %0:_(s32) = COPY $vgpr0 1071 %1:_(s16) = G_EXTRACT %0, 16 1072 %2:_(s32) = G_ANYEXT %1 1073 $vgpr0 = COPY %2 1074... 1075 1076--- 1077name: extract_s16_p3_offset0 1078body: | 1079 bb.0: 1080 liveins: $vgpr0 1081 1082 ; CHECK-LABEL: name: extract_s16_p3_offset0 1083 ; CHECK: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0 1084 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](p3), 0 1085 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 1086 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 1087 %0:_(p3) = COPY $vgpr0 1088 %1:_(s16) = G_EXTRACT %0, 0 1089 %2:_(s32) = G_ANYEXT %1 1090 $vgpr0 = COPY %2 1091... 1092 1093--- 1094name: extract_s16_p3_offset1 1095body: | 1096 bb.0: 1097 liveins: $vgpr0 1098 1099 ; CHECK-LABEL: name: extract_s16_p3_offset1 1100 ; CHECK: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0 1101 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](p3), 1 1102 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16) 1103 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32) 1104 %0:_(p3) = COPY $vgpr0 1105 %1:_(s16) = G_EXTRACT %0, 1 1106 %2:_(s32) = G_ANYEXT %1 1107 $vgpr0 = COPY %2 1108... 1109