@@ -3706,3 +3706,59 @@ define i32 @src_select_xxory_eq0_xorxy_y(i32 %x, i32 %y) {
3706
3706
%cond = select i1 %xor0 , i32 %xor , i32 %y
3707
3707
ret i32 %cond
3708
3708
}
3709
+
3710
+ define i32 @sequence_select_with_same_cond_false (i1 %c1 , i1 %c2 ){
3711
+ ; CHECK-LABEL: @sequence_select_with_same_cond_false(
3712
+ ; CHECK-NEXT: [[S1:%.*]] = select i1 [[C1:%.*]], i32 23, i32 45
3713
+ ; CHECK-NEXT: [[S2:%.*]] = select i1 [[C2:%.*]], i32 666, i32 [[S1]]
3714
+ ; CHECK-NEXT: [[S3:%.*]] = select i1 [[C1]], i32 789, i32 [[S2]]
3715
+ ; CHECK-NEXT: ret i32 [[S3]]
3716
+ ;
3717
+ %s1 = select i1 %c1 , i32 23 , i32 45
3718
+ %s2 = select i1 %c2 , i32 666 , i32 %s1
3719
+ %s3 = select i1 %c1 , i32 789 , i32 %s2
3720
+ ret i32 %s3
3721
+ }
3722
+
3723
+ define i32 @sequence_select_with_same_cond_true (i1 %c1 , i1 %c2 ){
3724
+ ; CHECK-LABEL: @sequence_select_with_same_cond_true(
3725
+ ; CHECK-NEXT: [[S1:%.*]] = select i1 [[C1:%.*]], i32 45, i32 23
3726
+ ; CHECK-NEXT: [[S2:%.*]] = select i1 [[C2:%.*]], i32 [[S1]], i32 666
3727
+ ; CHECK-NEXT: [[S3:%.*]] = select i1 [[C1]], i32 [[S2]], i32 789
3728
+ ; CHECK-NEXT: ret i32 [[S3]]
3729
+ ;
3730
+ %s1 = select i1 %c1 , i32 45 , i32 23
3731
+ %s2 = select i1 %c2 , i32 %s1 , i32 666
3732
+ %s3 = select i1 %c1 , i32 %s2 , i32 789
3733
+ ret i32 %s3
3734
+ }
3735
+
3736
+ define double @sequence_select_with_same_cond_double (double %a , i1 %c1 , i1 %c2 , double %r1 , double %r2 ){
3737
+ ; CHECK-LABEL: @sequence_select_with_same_cond_double(
3738
+ ; CHECK-NEXT: [[S1:%.*]] = select i1 [[C1:%.*]], double 1.000000e+00, double 0.000000e+00
3739
+ ; CHECK-NEXT: [[S2:%.*]] = select i1 [[C2:%.*]], double [[S1]], double 2.000000e+00
3740
+ ; CHECK-NEXT: [[S3:%.*]] = select i1 [[C1]], double [[S2]], double 3.000000e+00
3741
+ ; CHECK-NEXT: ret double [[S3]]
3742
+ ;
3743
+ %s1 = select i1 %c1 , double 1 .0 , double 0 .0
3744
+ %s2 = select i1 %c2 , double %s1 , double 2 .0
3745
+ %s3 = select i1 %c1 , double %s2 , double 3 .0
3746
+ ret double %s3
3747
+ }
3748
+
3749
+ declare void @use32 (i32 )
3750
+
3751
+ define i32 @sequence_select_with_same_cond_extra_use (i1 %c1 , i1 %c2 ){
3752
+ ; CHECK-LABEL: @sequence_select_with_same_cond_extra_use(
3753
+ ; CHECK-NEXT: [[S1:%.*]] = select i1 [[C1:%.*]], i32 23, i32 45
3754
+ ; CHECK-NEXT: call void @use32(i32 [[S1]])
3755
+ ; CHECK-NEXT: [[S2:%.*]] = select i1 [[C2:%.*]], i32 666, i32 [[S1]]
3756
+ ; CHECK-NEXT: [[S3:%.*]] = select i1 [[C1]], i32 789, i32 [[S2]]
3757
+ ; CHECK-NEXT: ret i32 [[S3]]
3758
+ ;
3759
+ %s1 = select i1 %c1 , i32 23 , i32 45
3760
+ call void @use32 (i32 %s1 )
3761
+ %s2 = select i1 %c2 , i32 666 , i32 %s1
3762
+ %s3 = select i1 %c1 , i32 789 , i32 %s2
3763
+ ret i32 %s3
3764
+ }
0 commit comments