@@ -3706,3 +3706,59 @@ define i32 @src_select_xxory_eq0_xorxy_y(i32 %x, i32 %y) {
37063706 %cond = select i1 %xor0 , i32 %xor , i32 %y
37073707 ret i32 %cond
37083708}
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