@@ -573,3 +573,104 @@ body: |
573
573
S_ENDPGM 0, implicit %2
574
574
575
575
...
576
+
577
+ ---
578
+ name : no_fold_multiple_fi_s_cselect_b32
579
+ tracksRegLiveness : true
580
+ stack :
581
+ - { id: 0, size: 64, alignment: 4 }
582
+ - { id: 1, size: 32, alignment: 4 }
583
+ body : |
584
+ bb.0:
585
+ ; CHECK-LABEL: name: no_fold_multiple_fi_s_cselect_b32
586
+ ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.1
587
+ ; CHECK-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 killed [[S_MOV_B32_]], %stack.0, implicit undef $scc
588
+ ; CHECK-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]]
589
+ %0:sreg_32 = S_MOV_B32 %stack.0
590
+ %1:sreg_32 = S_MOV_B32 %stack.1
591
+ %2:sreg_32 = S_CSELECT_B32 killed %1, killed %0, implicit undef $scc
592
+ S_ENDPGM 0, implicit %2
593
+
594
+ ...
595
+
596
+ ---
597
+ name : no_fold_multiple_fi_v_cndmask_b32_e64
598
+ tracksRegLiveness : true
599
+ stack :
600
+ - { id: 0, size: 64, alignment: 4 }
601
+ - { id: 1, size: 32, alignment: 4 }
602
+ body : |
603
+ bb.0:
604
+ liveins: $sgpr8_sgpr9
605
+ ; GFX9-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e64
606
+ ; GFX9: liveins: $sgpr8_sgpr9
607
+ ; GFX9-NEXT: {{ $}}
608
+ ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr8_sgpr9
609
+ ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
610
+ ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec
611
+ ; GFX9-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, killed [[V_MOV_B32_e32_]], 0, killed [[V_MOV_B32_e32_1]], [[COPY]], implicit $exec
612
+ ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]
613
+ ;
614
+ ; GFX10-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e64
615
+ ; GFX10: liveins: $sgpr8_sgpr9
616
+ ; GFX10-NEXT: {{ $}}
617
+ ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr8_sgpr9
618
+ ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec
619
+ ; GFX10-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, %stack.0, 0, killed [[V_MOV_B32_e32_]], [[COPY]], implicit $exec
620
+ ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]
621
+ ;
622
+ ; GFX12-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e64
623
+ ; GFX12: liveins: $sgpr8_sgpr9
624
+ ; GFX12-NEXT: {{ $}}
625
+ ; GFX12-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr8_sgpr9
626
+ ; GFX12-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec
627
+ ; GFX12-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, %stack.0, 0, killed [[V_MOV_B32_e32_]], [[COPY]], implicit $exec
628
+ ; GFX12-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]
629
+ %0:sreg_64_xexec = COPY $sgpr8_sgpr9
630
+ %1:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
631
+ %2:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec
632
+ %3:vgpr_32 = V_CNDMASK_B32_e64 0, killed %1, 0, killed %2, %0, implicit $exec
633
+ S_ENDPGM 0, implicit %3
634
+
635
+ ...
636
+
637
+ ---
638
+ name : no_fold_multiple_fi_v_cndmask_b32_e32
639
+ tracksRegLiveness : true
640
+ stack :
641
+ - { id: 0, size: 64, alignment: 4 }
642
+ - { id: 1, size: 32, alignment: 4 }
643
+ body : |
644
+ bb.0:
645
+ liveins: $sgpr8_sgpr9
646
+ ; GFX9-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e32
647
+ ; GFX9: liveins: $sgpr8_sgpr9
648
+ ; GFX9-NEXT: {{ $}}
649
+ ; GFX9-NEXT: $vcc = COPY $sgpr8_sgpr9
650
+ ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
651
+ ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec
652
+ ; GFX9-NEXT: [[V_CNDMASK_B32_e32_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e32 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B32_e32_1]], implicit $vcc, implicit $exec
653
+ ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e32_]]
654
+ ;
655
+ ; GFX10-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e32
656
+ ; GFX10: liveins: $sgpr8_sgpr9
657
+ ; GFX10-NEXT: {{ $}}
658
+ ; GFX10-NEXT: $vcc = COPY $sgpr8_sgpr9
659
+ ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec
660
+ ; GFX10-NEXT: [[V_CNDMASK_B32_e32_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e32 %stack.0, killed [[V_MOV_B32_e32_]], implicit $vcc, implicit $exec
661
+ ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e32_]]
662
+ ;
663
+ ; GFX12-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e32
664
+ ; GFX12: liveins: $sgpr8_sgpr9
665
+ ; GFX12-NEXT: {{ $}}
666
+ ; GFX12-NEXT: $vcc = COPY $sgpr8_sgpr9
667
+ ; GFX12-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec
668
+ ; GFX12-NEXT: [[V_CNDMASK_B32_e32_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e32 %stack.0, killed [[V_MOV_B32_e32_]], implicit $vcc, implicit $exec
669
+ ; GFX12-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e32_]]
670
+ $vcc = COPY $sgpr8_sgpr9
671
+ %1:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
672
+ %2:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec
673
+ %3:vgpr_32 = V_CNDMASK_B32_e32 killed %1, killed %2, implicit $vcc, implicit $exec
674
+ S_ENDPGM 0, implicit %3
675
+
676
+ ...
0 commit comments