1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2 2# RUN: llc -mtriple=arm64-unknown-unknown -global-isel -run-pass=aarch64-prelegalizer-combiner %s -o - | FileCheck %s 3 4--- 5name: fshl_i8 6alignment: 4 7tracksRegLiveness: true 8body: | 9 bb.0: 10 liveins: $w0, $w1, $w2 11 12 ; CHECK-LABEL: name: fshl_i8 13 ; CHECK: liveins: $w0, $w1, $w2 14 ; CHECK-NEXT: {{ $}} 15 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 16 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32) 17 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 18 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32) 19 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2 20 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[COPY2]](s32) 21 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s8) = G_FSHL [[TRUNC]], [[TRUNC1]], [[TRUNC2]](s8) 22 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s8) 23 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32) 24 ; CHECK-NEXT: RET_ReallyLR implicit $w0 25 %3:_(s32) = COPY $w0 26 %0:_(s8) = G_TRUNC %3(s32) 27 %4:_(s32) = COPY $w1 28 %1:_(s8) = G_TRUNC %4(s32) 29 %5:_(s32) = COPY $w2 30 %2:_(s8) = G_TRUNC %5(s32) 31 %6:_(s8) = G_FSHL %0, %1, %2(s8) 32 %7:_(s32) = G_ANYEXT %6(s8) 33 $w0 = COPY %7(s32) 34 RET_ReallyLR implicit $w0 35 36... 37 38--- 39name: fshl_i16 40alignment: 4 41tracksRegLiveness: true 42body: | 43 bb.0: 44 liveins: $w0, $w1, $w2 45 46 ; CHECK-LABEL: name: fshl_i16 47 ; CHECK: liveins: $w0, $w1, $w2 48 ; CHECK-NEXT: {{ $}} 49 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 50 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 51 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 52 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 53 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2 54 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 55 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s16) = G_FSHL [[TRUNC]], [[TRUNC1]], [[TRUNC2]](s16) 56 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s16) 57 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32) 58 ; CHECK-NEXT: RET_ReallyLR implicit $w0 59 %3:_(s32) = COPY $w0 60 %0:_(s16) = G_TRUNC %3(s32) 61 %4:_(s32) = COPY $w1 62 %1:_(s16) = G_TRUNC %4(s32) 63 %5:_(s32) = COPY $w2 64 %2:_(s16) = G_TRUNC %5(s32) 65 %6:_(s16) = G_FSHL %0, %1, %2(s16) 66 %7:_(s32) = G_ANYEXT %6(s16) 67 $w0 = COPY %7(s32) 68 RET_ReallyLR implicit $w0 69 70... 71 72--- 73name: fshl_i32 74alignment: 4 75tracksRegLiveness: true 76body: | 77 bb.0: 78 liveins: $w0, $w1, $w2 79 80 ; CHECK-LABEL: name: fshl_i32 81 ; CHECK: liveins: $w0, $w1, $w2 82 ; CHECK-NEXT: {{ $}} 83 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 84 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 85 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2 86 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s32) = G_FSHL [[COPY]], [[COPY1]], [[COPY2]](s32) 87 ; CHECK-NEXT: $w0 = COPY [[FSHL]](s32) 88 ; CHECK-NEXT: RET_ReallyLR implicit $w0 89 %0:_(s32) = COPY $w0 90 %1:_(s32) = COPY $w1 91 %2:_(s32) = COPY $w2 92 %3:_(s32) = G_FSHL %0, %1, %2(s32) 93 $w0 = COPY %3(s32) 94 RET_ReallyLR implicit $w0 95 96... 97 98--- 99name: fshl_i64 100alignment: 4 101tracksRegLiveness: true 102body: | 103 bb.0: 104 liveins: $x0, $x1, $x2 105 106 ; CHECK-LABEL: name: fshl_i64 107 ; CHECK: liveins: $x0, $x1, $x2 108 ; CHECK-NEXT: {{ $}} 109 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 110 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 111 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2 112 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s64) = G_FSHL [[COPY]], [[COPY1]], [[COPY2]](s64) 113 ; CHECK-NEXT: $x0 = COPY [[FSHL]](s64) 114 ; CHECK-NEXT: RET_ReallyLR implicit $x0 115 %0:_(s64) = COPY $x0 116 %1:_(s64) = COPY $x1 117 %2:_(s64) = COPY $x2 118 %3:_(s64) = G_FSHL %0, %1, %2(s64) 119 $x0 = COPY %3(s64) 120 RET_ReallyLR implicit $x0 121 122... 123 124--- 125name: fshl_i8_const_shift 126alignment: 4 127tracksRegLiveness: true 128body: | 129 bb.0: 130 liveins: $w0, $w1 131 132 ; CHECK-LABEL: name: fshl_i8_const_shift 133 ; CHECK: liveins: $w0, $w1 134 ; CHECK-NEXT: {{ $}} 135 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 136 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32) 137 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 138 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32) 139 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 5 140 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s8) = G_FSHL [[TRUNC]], [[TRUNC1]], [[C]](s8) 141 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s8) 142 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32) 143 ; CHECK-NEXT: RET_ReallyLR implicit $w0 144 %2:_(s32) = COPY $w0 145 %0:_(s8) = G_TRUNC %2(s32) 146 %3:_(s32) = COPY $w1 147 %1:_(s8) = G_TRUNC %3(s32) 148 %4:_(s8) = G_CONSTANT i8 5 149 %5:_(s8) = G_FSHL %0, %1, %4(s8) 150 %6:_(s32) = G_ANYEXT %5(s8) 151 $w0 = COPY %6(s32) 152 RET_ReallyLR implicit $w0 153 154... 155 156--- 157name: fshl_i8_const_overshift 158alignment: 4 159tracksRegLiveness: true 160body: | 161 bb.0: 162 liveins: $w0, $w1 163 164 ; CHECK-LABEL: name: fshl_i8_const_overshift 165 ; CHECK: liveins: $w0, $w1 166 ; CHECK-NEXT: {{ $}} 167 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 168 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32) 169 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 170 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32) 171 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 2 172 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s8) = G_FSHL [[TRUNC]], [[TRUNC1]], [[C]](s8) 173 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s8) 174 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32) 175 ; CHECK-NEXT: RET_ReallyLR implicit $w0 176 %2:_(s32) = COPY $w0 177 %0:_(s8) = G_TRUNC %2(s32) 178 %3:_(s32) = COPY $w1 179 %1:_(s8) = G_TRUNC %3(s32) 180 %4:_(s8) = G_CONSTANT i8 10 181 %5:_(s8) = G_FSHL %0, %1, %4(s8) 182 %6:_(s32) = G_ANYEXT %5(s8) 183 $w0 = COPY %6(s32) 184 RET_ReallyLR implicit $w0 185 186... 187 188--- 189name: fshl_i8_shift_by_bidwidth 190alignment: 4 191tracksRegLiveness: true 192body: | 193 bb.0: 194 liveins: $w0, $w1 195 196 ; CHECK-LABEL: name: fshl_i8_shift_by_bidwidth 197 ; CHECK: liveins: $w0, $w1 198 ; CHECK-NEXT: {{ $}} 199 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 200 ; CHECK-NEXT: $w0 = COPY [[COPY]](s32) 201 ; CHECK-NEXT: RET_ReallyLR implicit $w0 202 %2:_(s32) = COPY $w0 203 %0:_(s8) = G_TRUNC %2(s32) 204 %3:_(s32) = COPY $w1 205 %1:_(s8) = G_TRUNC %3(s32) 206 %4:_(s8) = G_CONSTANT i8 8 207 %5:_(s8) = G_FSHL %0, %1, %4(s8) 208 %6:_(s32) = G_ANYEXT %5(s8) 209 $w0 = COPY %6(s32) 210 RET_ReallyLR implicit $w0 211 212... 213 214--- 215name: fshl_i16_const_shift 216alignment: 4 217tracksRegLiveness: true 218body: | 219 bb.0: 220 liveins: $w0, $w1 221 222 ; CHECK-LABEL: name: fshl_i16_const_shift 223 ; CHECK: liveins: $w0, $w1 224 ; CHECK-NEXT: {{ $}} 225 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 226 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 227 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 228 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 229 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 5 230 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s16) = G_FSHL [[TRUNC]], [[TRUNC1]], [[C]](s16) 231 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s16) 232 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32) 233 ; CHECK-NEXT: RET_ReallyLR implicit $w0 234 %2:_(s32) = COPY $w0 235 %0:_(s16) = G_TRUNC %2(s32) 236 %3:_(s32) = COPY $w1 237 %1:_(s16) = G_TRUNC %3(s32) 238 %4:_(s16) = G_CONSTANT i16 5 239 %5:_(s16) = G_FSHL %0, %1, %4(s16) 240 %6:_(s32) = G_ANYEXT %5(s16) 241 $w0 = COPY %6(s32) 242 RET_ReallyLR implicit $w0 243 244... 245 246--- 247name: fshl_i16_const_overshift 248alignment: 4 249tracksRegLiveness: true 250body: | 251 bb.0: 252 liveins: $w0, $w1 253 254 ; CHECK-LABEL: name: fshl_i16_const_overshift 255 ; CHECK: liveins: $w0, $w1 256 ; CHECK-NEXT: {{ $}} 257 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 258 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 259 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 260 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 261 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 4 262 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s16) = G_FSHL [[TRUNC]], [[TRUNC1]], [[C]](s16) 263 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s16) 264 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32) 265 ; CHECK-NEXT: RET_ReallyLR implicit $w0 266 %2:_(s32) = COPY $w0 267 %0:_(s16) = G_TRUNC %2(s32) 268 %3:_(s32) = COPY $w1 269 %1:_(s16) = G_TRUNC %3(s32) 270 %4:_(s16) = G_CONSTANT i16 20 271 %5:_(s16) = G_FSHL %0, %1, %4(s16) 272 %6:_(s32) = G_ANYEXT %5(s16) 273 $w0 = COPY %6(s32) 274 RET_ReallyLR implicit $w0 275 276... 277 278--- 279name: fshl_i16_shift_by_bidwidth 280alignment: 4 281tracksRegLiveness: true 282body: | 283 bb.0: 284 liveins: $w0, $w1 285 286 ; CHECK-LABEL: name: fshl_i16_shift_by_bidwidth 287 ; CHECK: liveins: $w0, $w1 288 ; CHECK-NEXT: {{ $}} 289 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 290 ; CHECK-NEXT: $w0 = COPY [[COPY]](s32) 291 ; CHECK-NEXT: RET_ReallyLR implicit $w0 292 %2:_(s32) = COPY $w0 293 %0:_(s16) = G_TRUNC %2(s32) 294 %3:_(s32) = COPY $w1 295 %1:_(s16) = G_TRUNC %3(s32) 296 %4:_(s16) = G_CONSTANT i16 16 297 %5:_(s16) = G_FSHL %0, %1, %4(s16) 298 %6:_(s32) = G_ANYEXT %5(s16) 299 $w0 = COPY %6(s32) 300 RET_ReallyLR implicit $w0 301 302... 303 304--- 305name: fshl_i32_const_shift 306alignment: 4 307tracksRegLiveness: true 308body: | 309 bb.0: 310 liveins: $w0, $w1 311 312 ; CHECK-LABEL: name: fshl_i32_const_shift 313 ; CHECK: liveins: $w0, $w1 314 ; CHECK-NEXT: {{ $}} 315 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 316 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 317 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 5 318 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s32) = G_FSHL [[COPY]], [[COPY1]], [[C]](s32) 319 ; CHECK-NEXT: $w0 = COPY [[FSHL]](s32) 320 ; CHECK-NEXT: RET_ReallyLR implicit $w0 321 %0:_(s32) = COPY $w0 322 %1:_(s32) = COPY $w1 323 %2:_(s32) = G_CONSTANT i32 5 324 %3:_(s32) = G_FSHL %0, %1, %2(s32) 325 $w0 = COPY %3(s32) 326 RET_ReallyLR implicit $w0 327 328... 329 330--- 331name: fshl_i32_const_overshift 332alignment: 4 333tracksRegLiveness: true 334body: | 335 bb.0: 336 liveins: $w0, $w1 337 338 ; CHECK-LABEL: name: fshl_i32_const_overshift 339 ; CHECK: liveins: $w0, $w1 340 ; CHECK-NEXT: {{ $}} 341 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 342 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 343 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10 344 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s32) = G_FSHL [[COPY]], [[COPY1]], [[C]](s32) 345 ; CHECK-NEXT: $w0 = COPY [[FSHL]](s32) 346 ; CHECK-NEXT: RET_ReallyLR implicit $w0 347 %0:_(s32) = COPY $w0 348 %1:_(s32) = COPY $w1 349 %2:_(s32) = G_CONSTANT i32 42 350 %3:_(s32) = G_FSHL %0, %1, %2(s32) 351 $w0 = COPY %3(s32) 352 RET_ReallyLR implicit $w0 353 354... 355 356--- 357name: fshl_i32_shift_by_bidwidth 358alignment: 4 359tracksRegLiveness: true 360body: | 361 bb.0: 362 liveins: $w0, $w1 363 364 ; CHECK-LABEL: name: fshl_i32_shift_by_bidwidth 365 ; CHECK: liveins: $w0, $w1 366 ; CHECK-NEXT: {{ $}} 367 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 368 ; CHECK-NEXT: $w0 = COPY [[COPY]](s32) 369 ; CHECK-NEXT: RET_ReallyLR implicit $w0 370 %0:_(s32) = COPY $w0 371 %1:_(s32) = COPY $w1 372 %2:_(s32) = G_CONSTANT i32 32 373 %3:_(s32) = G_FSHL %0, %1, %2(s32) 374 $w0 = COPY %3(s32) 375 RET_ReallyLR implicit $w0 376 377... 378 379--- 380name: fshl_i64_const_shift 381alignment: 4 382tracksRegLiveness: true 383body: | 384 bb.0: 385 liveins: $x0, $x1 386 387 ; CHECK-LABEL: name: fshl_i64_const_shift 388 ; CHECK: liveins: $x0, $x1 389 ; CHECK-NEXT: {{ $}} 390 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 391 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 392 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 5 393 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s64) = G_FSHL [[COPY]], [[COPY1]], [[C]](s64) 394 ; CHECK-NEXT: $x0 = COPY [[FSHL]](s64) 395 ; CHECK-NEXT: RET_ReallyLR implicit $x0 396 %0:_(s64) = COPY $x0 397 %1:_(s64) = COPY $x1 398 %2:_(s64) = G_CONSTANT i64 5 399 %3:_(s64) = G_FSHL %0, %1, %2(s64) 400 $x0 = COPY %3(s64) 401 RET_ReallyLR implicit $x0 402 403... 404 405--- 406name: fshl_i64_const_overshift 407alignment: 4 408tracksRegLiveness: true 409body: | 410 bb.0: 411 liveins: $x0, $x1 412 413 ; CHECK-LABEL: name: fshl_i64_const_overshift 414 ; CHECK: liveins: $x0, $x1 415 ; CHECK-NEXT: {{ $}} 416 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 417 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 418 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8 419 ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s64) = G_FSHL [[COPY]], [[COPY1]], [[C]](s64) 420 ; CHECK-NEXT: $x0 = COPY [[FSHL]](s64) 421 ; CHECK-NEXT: RET_ReallyLR implicit $x0 422 %0:_(s64) = COPY $x0 423 %1:_(s64) = COPY $x1 424 %2:_(s64) = G_CONSTANT i64 72 425 %3:_(s64) = G_FSHL %0, %1, %2(s64) 426 $x0 = COPY %3(s64) 427 RET_ReallyLR implicit $x0 428 429... 430 431--- 432name: fshl_i64_shift_by_bidwidth 433alignment: 4 434tracksRegLiveness: true 435body: | 436 bb.0: 437 liveins: $x0, $x1 438 439 ; CHECK-LABEL: name: fshl_i64_shift_by_bidwidth 440 ; CHECK: liveins: $x0, $x1 441 ; CHECK-NEXT: {{ $}} 442 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 443 ; CHECK-NEXT: $x0 = COPY [[COPY]](s64) 444 ; CHECK-NEXT: RET_ReallyLR implicit $x0 445 %0:_(s64) = COPY $x0 446 %1:_(s64) = COPY $x1 447 %2:_(s64) = G_CONSTANT i64 64 448 %3:_(s64) = G_FSHL %0, %1, %2(s64) 449 $x0 = COPY %3(s64) 450 RET_ReallyLR implicit $x0 451 452... 453