llvm.org GIT mirror llvm / b4d7428
add vector bool select tests and regenerate checks for scalar bool select tests git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274460 91177308-0d34-0410-b5e6-96231b3b80d8 Sanjay Patel 4 years ago
1 changed file(s) with 139 addition(s) and 59 deletion(s). Raw diff Collapse all Expand all
0 ; RUN: opt < %s -instcombine -S | FileCheck %s
1 ; This test makes sure that these instructions are properly eliminated.
1
22 ; PR1822
33
44 target datalayout = "e-p:64:64-p1:16:16-p2:32:32:32-p3:64:64:64"
5353 }
5454
5555 define i1 @test7(i1 %C, i1 %X) {
56 ; R = or C, X
57 %R = select i1 %C, i1 true, i1 %X
58 ret i1 %R
5956 ; CHECK-LABEL: @test7(
60 ; CHECK: %R = or i1 %C, %X
61 ; CHECK: ret i1 %R
57 ; CHECK-NEXT: [[R:%.*]] = or i1 %C, %X
58 ; CHECK-NEXT: ret i1 [[R]]
59 ;
60 %R = select i1 %C, i1 true, i1 %X
61 ret i1 %R
62 }
63
64 define <2 x i1> @test7vec(<2 x i1> %C, <2 x i1> %X) {
65 ; CHECK-LABEL: @test7vec(
66 ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> %C, <2 x i1> , <2 x i1> %X
67 ; CHECK-NEXT: ret <2 x i1> [[R]]
68 ;
69 %R = select <2 x i1> %C, <2 x i1> , <2 x i1> %X
70 ret <2 x i1> %R
6271 }
6372
6473 define i1 @test8(i1 %C, i1 %X) {
65 ; R = and C, X
66 %R = select i1 %C, i1 %X, i1 false
67 ret i1 %R
6874 ; CHECK-LABEL: @test8(
69 ; CHECK: %R = and i1 %C, %X
70 ; CHECK: ret i1 %R
75 ; CHECK-NEXT: [[R:%.*]] = and i1 %C, %X
76 ; CHECK-NEXT: ret i1 [[R]]
77 ;
78 %R = select i1 %C, i1 %X, i1 false
79 ret i1 %R
80 }
81
82 define <2 x i1> @test8vec(<2 x i1> %C, <2 x i1> %X) {
83 ; CHECK-LABEL: @test8vec(
84 ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> %C, <2 x i1> %X, <2 x i1> zeroinitializer
85 ; CHECK-NEXT: ret <2 x i1> [[R]]
86 ;
87 %R = select <2 x i1> %C, <2 x i1> %X, <2 x i1>
88 ret <2 x i1> %R
7189 }
7290
7391 define i1 @test9(i1 %C, i1 %X) {
74 ; R = and !C, X
75 %R = select i1 %C, i1 false, i1 %X
76 ret i1 %R
7792 ; CHECK-LABEL: @test9(
78 ; CHECK: xor i1 %C, true
79 ; CHECK: %R = and i1
80 ; CHECK: ret i1 %R
93 ; CHECK-NEXT: [[NOT_C:%.*]] = xor i1 %C, true
94 ; CHECK-NEXT: [[R:%.*]] = and i1 [[NOT_C]], %X
95 ; CHECK-NEXT: ret i1 [[R]]
96 ;
97 %R = select i1 %C, i1 false, i1 %X
98 ret i1 %R
99 }
100
101 define <2 x i1> @test9vec(<2 x i1> %C, <2 x i1> %X) {
102 ; CHECK-LABEL: @test9vec(
103 ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> %C, <2 x i1> zeroinitializer, <2 x i1> %X
104 ; CHECK-NEXT: ret <2 x i1> [[R]]
105 ;
106 %R = select <2 x i1> %C, <2 x i1> , <2 x i1> %X
107 ret <2 x i1> %R
81108 }
82109
83110 define i1 @test10(i1 %C, i1 %X) {
84 ; R = or !C, X
85 %R = select i1 %C, i1 %X, i1 true
86 ret i1 %R
87111 ; CHECK-LABEL: @test10(
88 ; CHECK: xor i1 %C, true
89 ; CHECK: %R = or i1
90 ; CHECK: ret i1 %R
112 ; CHECK-NEXT: [[NOT_C:%.*]] = xor i1 %C, true
113 ; CHECK-NEXT: [[R:%.*]] = or i1 [[NOT_C]], %X
114 ; CHECK-NEXT: ret i1 [[R]]
115 ;
116 %R = select i1 %C, i1 %X, i1 true
117 ret i1 %R
118 }
119
120 define <2 x i1> @test10vec(<2 x i1> %C, <2 x i1> %X) {
121 ; CHECK-LABEL: @test10vec(
122 ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> %C, <2 x i1> %X, <2 x i1>
123 ; CHECK-NEXT: ret <2 x i1> [[R]]
124 ;
125 %R = select <2 x i1> %C, <2 x i1> %X, <2 x i1>
126 ret <2 x i1> %R
127 }
128
129 define i1 @test23(i1 %a, i1 %b) {
130 ; CHECK-LABEL: @test23(
131 ; CHECK-NEXT: [[C:%.*]] = and i1 %a, %b
132 ; CHECK-NEXT: ret i1 [[C]]
133 ;
134 %c = select i1 %a, i1 %b, i1 %a
135 ret i1 %c
136 }
137
138 define <2 x i1> @test23vec(<2 x i1> %a, <2 x i1> %b) {
139 ; CHECK-LABEL: @test23vec(
140 ; CHECK-NEXT: [[C:%.*]] = select <2 x i1> %a, <2 x i1> %b, <2 x i1> %a
141 ; CHECK-NEXT: ret <2 x i1> [[C]]
142 ;
143 %c = select <2 x i1> %a, <2 x i1> %b, <2 x i1> %a
144 ret <2 x i1> %c
145 }
146
147 define i1 @test24(i1 %a, i1 %b) {
148 ; CHECK-LABEL: @test24(
149 ; CHECK-NEXT: [[C:%.*]] = or i1 %a, %b
150 ; CHECK-NEXT: ret i1 [[C]]
151 ;
152 %c = select i1 %a, i1 %a, i1 %b
153 ret i1 %c
154 }
155
156 define <2 x i1> @test24vec(<2 x i1> %a, <2 x i1> %b) {
157 ; CHECK-LABEL: @test24vec(
158 ; CHECK-NEXT: [[C:%.*]] = select <2 x i1> %a, <2 x i1> %a, <2 x i1> %b
159 ; CHECK-NEXT: ret <2 x i1> [[C]]
160 ;
161 %c = select <2 x i1> %a, <2 x i1> %a, <2 x i1> %b
162 ret <2 x i1> %c
163 }
164
165 define i1 @test62(i1 %A, i1 %B) {
166 ; CHECK-LABEL: @test62(
167 ; CHECK-NEXT: [[NOT:%.*]] = xor i1 %A, true
168 ; CHECK-NEXT: [[C:%.*]] = and i1 [[NOT]], %B
169 ; CHECK-NEXT: ret i1 [[C]]
170 ;
171 %not = xor i1 %A, true
172 %C = select i1 %A, i1 %not, i1 %B
173 ret i1 %C
174 }
175
176 define <2 x i1> @test62vec(<2 x i1> %A, <2 x i1> %B) {
177 ; CHECK-LABEL: @test62vec(
178 ; CHECK-NEXT: [[NOT:%.*]] = xor <2 x i1> %A,
179 ; CHECK-NEXT: [[C:%.*]] = select <2 x i1> %A, <2 x i1> [[NOT]], <2 x i1> %B
180 ; CHECK-NEXT: ret <2 x i1> [[C]]
181 ;
182 %not = xor <2 x i1> %A,
183 %C = select <2 x i1> %A, <2 x i1> %not, <2 x i1> %B
184 ret <2 x i1> %C
185 }
186
187 define i1 @test63(i1 %A, i1 %B) {
188 ; CHECK-LABEL: @test63(
189 ; CHECK-NEXT: [[NOT:%.*]] = xor i1 %A, true
190 ; CHECK-NEXT: [[C:%.*]] = or i1 %B, [[NOT]]
191 ; CHECK-NEXT: ret i1 [[C]]
192 ;
193 %not = xor i1 %A, true
194 %C = select i1 %A, i1 %B, i1 %not
195 ret i1 %C
196 }
197
198 define <2 x i1> @test63vec(<2 x i1> %A, <2 x i1> %B) {
199 ; CHECK-LABEL: @test63vec(
200 ; CHECK-NEXT: [[NOT:%.*]] = xor <2 x i1> %A,
201 ; CHECK-NEXT: [[C:%.*]] = select <2 x i1> %A, <2 x i1> %B, <2 x i1> [[NOT]]
202 ; CHECK-NEXT: ret <2 x i1> [[C]]
203 ;
204 %not = xor <2 x i1> %A,
205 %C = select <2 x i1> %A, <2 x i1> %B, <2 x i1> %not
206 ret <2 x i1> %C
91207 }
92208
93209 define i32 @test11(i32 %a) {
385501 ; CHECK-NEXT: ret i16
386502 }
387503
388 define i1 @test23(i1 %a, i1 %b) {
389 %c = select i1 %a, i1 %b, i1 %a
390 ret i1 %c
391 ; CHECK-LABEL: @test23(
392 ; CHECK-NEXT: %c = and i1 %a, %b
393 ; CHECK-NEXT: ret i1 %c
394 }
395
396 define i1 @test24(i1 %a, i1 %b) {
397 %c = select i1 %a, i1 %a, i1 %b
398 ret i1 %c
399 ; CHECK-LABEL: @test24(
400 ; CHECK-NEXT: %c = or i1 %a, %b
401 ; CHECK-NEXT: ret i1 %c
402 }
403
404504 define i32 @test25(i1 %c) {
405505 entry:
406506 br i1 %c, label %jump, label %ret
875975 ret i32 %C
876976 ; CHECK-LABEL: @test61(
877977 ; CHECK: ret i32 10
878 }
879
880 define i1 @test62(i1 %A, i1 %B) {
881 %not = xor i1 %A, true
882 %C = select i1 %A, i1 %not, i1 %B
883 ret i1 %C
884 ; CHECK-LABEL: @test62(
885 ; CHECK: %not = xor i1 %A, true
886 ; CHECK: %C = and i1 %not, %B
887 ; CHECK: ret i1 %C
888 }
889
890 define i1 @test63(i1 %A, i1 %B) {
891 %not = xor i1 %A, true
892 %C = select i1 %A, i1 %B, i1 %not
893 ret i1 %C
894 ; CHECK-LABEL: @test63(
895 ; CHECK: %not = xor i1 %A, true
896 ; CHECK: %C = or i1 %B, %not
897 ; CHECK: ret i1 %C
898978 }
899979
900980 ; PR14131