3
3
4
4
define i32 @select_of_symmetric_selects (i32 %a , i32 %b , i1 %c1 , i1 %c2 ) {
5
5
; CHECK-LABEL: @select_of_symmetric_selects(
6
- ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
7
- ; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[C1]], i32 [[B]], i32 [[A]]
8
- ; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], i32 [[SEL1]], i32 [[SEL2]]
6
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[C1:%.*]], [[C2:%.*]]
7
+ ; CHECK-NEXT: [[RET:%.*]] = select i1 [[TMP1]], i32 [[B:%.*]], i32 [[A:%.*]]
9
8
; CHECK-NEXT: ret i32 [[RET]]
10
9
;
11
10
%sel1 = select i1 %c1 , i32 %a , i32 %b
@@ -75,9 +74,8 @@ define i32 @select_of_symmetric_selects_multi_use2(i32 %a, i32 %b, i1 %c1, i1 %c
75
74
76
75
define i32 @select_of_symmetric_selects_commuted (i32 %a , i32 %b , i1 %c1 , i1 %c2 ) {
77
76
; CHECK-LABEL: @select_of_symmetric_selects_commuted(
78
- ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
79
- ; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[C1]], i32 [[B]], i32 [[A]]
80
- ; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], i32 [[SEL2]], i32 [[SEL1]]
77
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[C1:%.*]], [[C2:%.*]]
78
+ ; CHECK-NEXT: [[RET:%.*]] = select i1 [[TMP1]], i32 [[A:%.*]], i32 [[B:%.*]]
81
79
; CHECK-NEXT: ret i32 [[RET]]
82
80
;
83
81
%sel1 = select i1 %c1 , i32 %a , i32 %b
@@ -88,9 +86,8 @@ define i32 @select_of_symmetric_selects_commuted(i32 %a, i32 %b, i1 %c1, i1 %c2)
88
86
89
87
define <4 x i32 > @select_of_symmetric_selects_vector1 (<4 x i32 > %a , <4 x i32 > %b , i1 %c1 , i1 %c2 ) {
90
88
; CHECK-LABEL: @select_of_symmetric_selects_vector1(
91
- ; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]
92
- ; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[C1]], <4 x i32> [[B]], <4 x i32> [[A]]
93
- ; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], <4 x i32> [[SEL2]], <4 x i32> [[SEL1]]
89
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[C1:%.*]], [[C2:%.*]]
90
+ ; CHECK-NEXT: [[RET:%.*]] = select i1 [[TMP1]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]
94
91
; CHECK-NEXT: ret <4 x i32> [[RET]]
95
92
;
96
93
%sel1 = select i1 %c1 , <4 x i32 > %a , <4 x i32 > %b
@@ -101,9 +98,8 @@ define <4 x i32> @select_of_symmetric_selects_vector1(<4 x i32> %a, <4 x i32> %b
101
98
102
99
define <4 x i32 > @select_of_symmetric_selects_vector2 (<4 x i32 > %a , <4 x i32 > %b , <4 x i1 > %c1 , <4 x i1 > %c2 ) {
103
100
; CHECK-LABEL: @select_of_symmetric_selects_vector2(
104
- ; CHECK-NEXT: [[SEL1:%.*]] = select <4 x i1> [[C1:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]
105
- ; CHECK-NEXT: [[SEL2:%.*]] = select <4 x i1> [[C1]], <4 x i32> [[B]], <4 x i32> [[A]]
106
- ; CHECK-NEXT: [[RET:%.*]] = select <4 x i1> [[C2:%.*]], <4 x i32> [[SEL2]], <4 x i32> [[SEL1]]
101
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <4 x i1> [[C1:%.*]], [[C2:%.*]]
102
+ ; CHECK-NEXT: [[RET:%.*]] = select <4 x i1> [[TMP1]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]
107
103
; CHECK-NEXT: ret <4 x i32> [[RET]]
108
104
;
109
105
%sel1 = select <4 x i1 > %c1 , <4 x i32 > %a , <4 x i32 > %b
0 commit comments