@@ -330,3 +330,208 @@ body: |
330
330
successors:
331
331
bb.3:
332
332
RET_ReallyLR
333
+ ...
334
+ ---
335
+ name : test_3xs32_eq_pr_78181
336
+ tracksRegLiveness : true
337
+ body : |
338
+ bb.1:
339
+ liveins: $x0
340
+ ; CHECK-LABEL: name: test_3xs32_eq_pr_78181
341
+ ; CHECK: liveins: $x0
342
+ ; CHECK-NEXT: {{ $}}
343
+ ; CHECK-NEXT: %const:_(s32) = G_IMPLICIT_DEF
344
+ ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR %const(s32), %const(s32), %const(s32), %const(s32)
345
+ ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR %const(s32), %const(s32), %const(s32), %const(s32)
346
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s32>) = G_ICMP intpred(eq), [[BUILD_VECTOR]](<4 x s32>), [[BUILD_VECTOR1]]
347
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
348
+ ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[ICMP]](<4 x s32>), [[C]](s64)
349
+ ; CHECK-NEXT: $w0 = COPY [[EVEC]](s32)
350
+ ; CHECK-NEXT: RET_ReallyLR
351
+ %const:_(s32) = G_IMPLICIT_DEF
352
+ %rhs:_(<3 x s32>) = G_BUILD_VECTOR %const(s32), %const(s32), %const(s32)
353
+ %lhs:_(<3 x s32>) = G_BUILD_VECTOR %const(s32), %const(s32), %const(s32)
354
+ %cmp:_(<3 x s32>) = G_ICMP intpred(eq), %lhs(<3 x s32>), %rhs
355
+ %1:_(s32) = G_CONSTANT i32 1
356
+ %2:_(s32) = G_EXTRACT_VECTOR_ELT %cmp(<3 x s32>), %1(s32)
357
+ $w0 = COPY %2(s32)
358
+ RET_ReallyLR
359
+ ...
360
+ ---
361
+ name : test_3xs16_eq_pr_78181
362
+ tracksRegLiveness : true
363
+ body : |
364
+ bb.1:
365
+ liveins: $x0
366
+ ; CHECK-LABEL: name: test_3xs16_eq_pr_78181
367
+ ; CHECK: liveins: $x0
368
+ ; CHECK-NEXT: {{ $}}
369
+ ; CHECK-NEXT: %const:_(s16) = G_IMPLICIT_DEF
370
+ ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR %const(s16), %const(s16), %const(s16), %const(s16)
371
+ ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR %const(s16), %const(s16), %const(s16), %const(s16)
372
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s16>) = G_ICMP intpred(eq), [[BUILD_VECTOR]](<4 x s16>), [[BUILD_VECTOR1]]
373
+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[ICMP]](<4 x s16>)
374
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
375
+ ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
376
+ ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
377
+ ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
378
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
379
+ ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[DEF]](s32)
380
+ ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR2]](<4 x s32>), [[C]](s64)
381
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
382
+ ; CHECK-NEXT: %zext:_(s32) = G_AND [[EVEC]], [[C1]]
383
+ ; CHECK-NEXT: $w0 = COPY %zext(s32)
384
+ ; CHECK-NEXT: RET_ReallyLR
385
+ %const:_(s16) = G_IMPLICIT_DEF
386
+ %rhs:_(<3 x s16>) = G_BUILD_VECTOR %const(s16), %const(s16), %const(s16)
387
+ %lhs:_(<3 x s16>) = G_BUILD_VECTOR %const(s16), %const(s16), %const(s16)
388
+ %cmp:_(<3 x s16>) = G_ICMP intpred(eq), %lhs(<3 x s16>), %rhs
389
+ %1:_(s32) = G_CONSTANT i32 1
390
+ %2:_(s16) = G_EXTRACT_VECTOR_ELT %cmp(<3 x s16>), %1(s32)
391
+ %zext:_(s32) = G_ZEXT %2(s16)
392
+ $w0 = COPY %zext(s32)
393
+ RET_ReallyLR
394
+ ...
395
+ ---
396
+ name : test_3xs8_eq_pr_78181
397
+ tracksRegLiveness : true
398
+ body : |
399
+ bb.1:
400
+ liveins: $x0
401
+ ; CHECK-LABEL: name: test_3xs8_eq_pr_78181
402
+ ; CHECK: liveins: $x0
403
+ ; CHECK-NEXT: {{ $}}
404
+ ; CHECK-NEXT: %const:_(s8) = G_IMPLICIT_DEF
405
+ ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s8>) = G_BUILD_VECTOR %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8)
406
+ ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s8>) = G_BUILD_VECTOR %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8)
407
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<8 x s8>) = G_ICMP intpred(eq), [[BUILD_VECTOR]](<8 x s8>), [[BUILD_VECTOR1]]
408
+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<4 x s8>), [[UV1:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[ICMP]](<8 x s8>)
409
+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8), [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[UV]](<4 x s8>)
410
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
411
+ ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
412
+ ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
413
+ ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
414
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
415
+ ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[DEF]](s32)
416
+ ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR2]](<4 x s32>), [[C]](s64)
417
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
418
+ ; CHECK-NEXT: %zext:_(s32) = G_AND [[EVEC]], [[C1]]
419
+ ; CHECK-NEXT: $w0 = COPY %zext(s32)
420
+ ; CHECK-NEXT: RET_ReallyLR
421
+ %const:_(s8) = G_IMPLICIT_DEF
422
+ %rhs:_(<3 x s8>) = G_BUILD_VECTOR %const(s8), %const(s8), %const(s8)
423
+ %lhs:_(<3 x s8>) = G_BUILD_VECTOR %const(s8), %const(s8), %const(s8)
424
+ %cmp:_(<3 x s8>) = G_ICMP intpred(eq), %lhs(<3 x s8>), %rhs
425
+ %1:_(s32) = G_CONSTANT i32 1
426
+ %2:_(s8) = G_EXTRACT_VECTOR_ELT %cmp(<3 x s8>), %1(s32)
427
+ %zext:_(s32) = G_ZEXT %2(s8)
428
+ $w0 = COPY %zext(s32)
429
+ RET_ReallyLR
430
+ ...
431
+ ---
432
+ name : test_3xs64_eq_clamp
433
+ tracksRegLiveness : true
434
+ body : |
435
+ bb.1:
436
+ liveins: $x0
437
+ ; CHECK-LABEL: name: test_3xs64_eq_clamp
438
+ ; CHECK: liveins: $x0
439
+ ; CHECK-NEXT: {{ $}}
440
+ ; CHECK-NEXT: %const:_(s64) = G_IMPLICIT_DEF
441
+ ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR %const(s64), %const(s64)
442
+ ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR %const(s64), %const(s64)
443
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(eq), [[BUILD_VECTOR]](<2 x s64>), [[BUILD_VECTOR1]]
444
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
445
+ ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s64) = G_EXTRACT_VECTOR_ELT [[ICMP]](<2 x s64>), [[C]](s64)
446
+ ; CHECK-NEXT: $x0 = COPY [[EVEC]](s64)
447
+ ; CHECK-NEXT: RET_ReallyLR
448
+ %const:_(s64) = G_IMPLICIT_DEF
449
+ %rhs:_(<3 x s64>) = G_BUILD_VECTOR %const(s64), %const(s64), %const(s64)
450
+ %lhs:_(<3 x s64>) = G_BUILD_VECTOR %const(s64), %const(s64), %const(s64)
451
+ %cmp:_(<3 x s64>) = G_ICMP intpred(eq), %lhs(<3 x s64>), %rhs
452
+ %1:_(s32) = G_CONSTANT i32 1
453
+ %2:_(s64) = G_EXTRACT_VECTOR_ELT %cmp(<3 x s64>), %1(s32)
454
+ $x0 = COPY %2(s64)
455
+ RET_ReallyLR
456
+ ...
457
+ ---
458
+ name : test_5xs32_eq_clamp
459
+ tracksRegLiveness : true
460
+ body : |
461
+ bb.1:
462
+ liveins: $x0
463
+ ; CHECK-LABEL: name: test_5xs32_eq_clamp
464
+ ; CHECK: liveins: $x0
465
+ ; CHECK-NEXT: {{ $}}
466
+ ; CHECK-NEXT: %const:_(s32) = G_IMPLICIT_DEF
467
+ ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR %const(s32), %const(s32), %const(s32), %const(s32)
468
+ ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR %const(s32), %const(s32), %const(s32), %const(s32)
469
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s32>) = G_ICMP intpred(eq), [[BUILD_VECTOR]](<4 x s32>), [[BUILD_VECTOR1]]
470
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
471
+ ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[ICMP]](<4 x s32>), [[C]](s64)
472
+ ; CHECK-NEXT: $w0 = COPY [[EVEC]](s32)
473
+ ; CHECK-NEXT: RET_ReallyLR
474
+ %const:_(s32) = G_IMPLICIT_DEF
475
+ %rhs:_(<5 x s32>) = G_BUILD_VECTOR %const(s32), %const(s32), %const(s32), %const(s32), %const(s32)
476
+ %lhs:_(<5 x s32>) = G_BUILD_VECTOR %const(s32), %const(s32), %const(s32), %const(s32), %const(s32)
477
+ %cmp:_(<5 x s32>) = G_ICMP intpred(eq), %lhs(<5 x s32>), %rhs
478
+ %1:_(s32) = G_CONSTANT i32 1
479
+ %2:_(s32) = G_EXTRACT_VECTOR_ELT %cmp(<5 x s32>), %1(s32)
480
+ $w0 = COPY %2(s32)
481
+ RET_ReallyLR
482
+ ...
483
+ ---
484
+ name : test_7xs16_eq_clamp
485
+ tracksRegLiveness : true
486
+ body : |
487
+ bb.1:
488
+ liveins: $x0
489
+ ; CHECK-LABEL: name: test_7xs16_eq_clamp
490
+ ; CHECK: liveins: $x0
491
+ ; CHECK-NEXT: {{ $}}
492
+ ; CHECK-NEXT: %const:_(s16) = G_IMPLICIT_DEF
493
+ ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16)
494
+ ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16)
495
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<8 x s16>) = G_ICMP intpred(eq), [[BUILD_VECTOR]](<8 x s16>), [[BUILD_VECTOR1]]
496
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
497
+ ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s16) = G_EXTRACT_VECTOR_ELT [[ICMP]](<8 x s16>), [[C]](s64)
498
+ ; CHECK-NEXT: %zext:_(s32) = G_ZEXT [[EVEC]](s16)
499
+ ; CHECK-NEXT: $w0 = COPY %zext(s32)
500
+ ; CHECK-NEXT: RET_ReallyLR
501
+ %const:_(s16) = G_IMPLICIT_DEF
502
+ %rhs:_(<7 x s16>) = G_BUILD_VECTOR %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16)
503
+ %lhs:_(<7 x s16>) = G_BUILD_VECTOR %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16), %const(s16)
504
+ %cmp:_(<7 x s16>) = G_ICMP intpred(eq), %lhs(<7 x s16>), %rhs
505
+ %1:_(s32) = G_CONSTANT i32 1
506
+ %2:_(s16) = G_EXTRACT_VECTOR_ELT %cmp(<7 x s16>), %1(s32)
507
+ %zext:_(s32) = G_ZEXT %2(s16)
508
+ $w0 = COPY %zext(s32)
509
+ RET_ReallyLR
510
+ ...
511
+ ---
512
+ name : test_9xs8_eq_clamp
513
+ tracksRegLiveness : true
514
+ body : |
515
+ bb.1:
516
+ liveins: $x0
517
+ ; CHECK-LABEL: name: test_9xs8_eq_clamp
518
+ ; CHECK: liveins: $x0
519
+ ; CHECK-NEXT: {{ $}}
520
+ ; CHECK-NEXT: %const:_(s8) = G_IMPLICIT_DEF
521
+ ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8)
522
+ ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8)
523
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[BUILD_VECTOR]](<16 x s8>), [[BUILD_VECTOR1]]
524
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
525
+ ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s8) = G_EXTRACT_VECTOR_ELT [[ICMP]](<16 x s8>), [[C]](s64)
526
+ ; CHECK-NEXT: %zext:_(s32) = G_ZEXT [[EVEC]](s8)
527
+ ; CHECK-NEXT: $w0 = COPY %zext(s32)
528
+ ; CHECK-NEXT: RET_ReallyLR
529
+ %const:_(s8) = G_IMPLICIT_DEF
530
+ %rhs:_(<9 x s8>) = G_BUILD_VECTOR %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8)
531
+ %lhs:_(<9 x s8>) = G_BUILD_VECTOR %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8), %const(s8)
532
+ %cmp:_(<9 x s8>) = G_ICMP intpred(eq), %lhs(<9 x s8>), %rhs
533
+ %1:_(s32) = G_CONSTANT i32 1
534
+ %2:_(s8) = G_EXTRACT_VECTOR_ELT %cmp(<9 x s8>), %1(s32)
535
+ %zext:_(s32) = G_ZEXT %2(s8)
536
+ $w0 = COPY %zext(s32)
537
+ RET_ReallyLR
0 commit comments