@@ -23,6 +23,18 @@ define i1 @icmp_ne_common_op00(i1 %c, i6 %x, i6 %y, i6 %z) {
2323 ret i1 %r
2424}
2525
26+ define i1 @icmp_ne_samesign_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
27+ ; CHECK-LABEL: @icmp_ne_samesign_common(
28+ ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
29+ ; CHECK-NEXT: [[R:%.*]] = icmp ne i6 [[X:%.*]], [[R_V]]
30+ ; CHECK-NEXT: ret i1 [[R]]
31+ ;
32+ %cmp1 = icmp samesign ne i6 %x , %y
33+ %cmp2 = icmp ne i6 %x , %z
34+ %r = select i1 %c , i1 %cmp1 , i1 %cmp2
35+ ret i1 %r
36+ }
37+
2638define i1 @icmp_ne_common_op01 (i1 %c , i3 %x , i3 %y , i3 %z ) {
2739; CHECK-LABEL: @icmp_ne_common_op01(
2840; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i3 [[Y:%.*]], i3 [[Z:%.*]]
@@ -71,6 +83,18 @@ define i1 @icmp_eq_common_op00(i1 %c, i5 %x, i5 %y, i5 %z) {
7183 ret i1 %r
7284}
7385
86+ define i1 @icmp_eq_samesign_common (i1 %c , i5 %x , i5 %y , i5 %z ) {
87+ ; CHECK-LABEL: @icmp_eq_samesign_common(
88+ ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i5 [[Y:%.*]], i5 [[Z:%.*]]
89+ ; CHECK-NEXT: [[R:%.*]] = icmp eq i5 [[X:%.*]], [[R_V]]
90+ ; CHECK-NEXT: ret i1 [[R]]
91+ ;
92+ %cmp1 = icmp eq i5 %x , %y
93+ %cmp2 = icmp samesign eq i5 %x , %z
94+ %r = select i1 %c , i1 %cmp1 , i1 %cmp2
95+ ret i1 %r
96+ }
97+
7498define <5 x i1 > @icmp_eq_common_op01 (<5 x i1 > %c , <5 x i7 > %x , <5 x i7 > %y , <5 x i7 > %z ) {
7599; CHECK-LABEL: @icmp_eq_common_op01(
76100; CHECK-NEXT: [[R_V:%.*]] = select <5 x i1> [[C:%.*]], <5 x i7> [[Y:%.*]], <5 x i7> [[Z:%.*]]
@@ -134,6 +158,18 @@ define i1 @icmp_slt_common(i1 %c, i6 %x, i6 %y, i6 %z) {
134158 ret i1 %r
135159}
136160
161+ define i1 @icmp_slt_samesign_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
162+ ; CHECK-LABEL: @icmp_slt_samesign_common(
163+ ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
164+ ; CHECK-NEXT: [[R:%.*]] = icmp ult i6 [[X:%.*]], [[R_V]]
165+ ; CHECK-NEXT: ret i1 [[R]]
166+ ;
167+ %cmp1 = icmp samesign ult i6 %x , %y
168+ %cmp2 = icmp slt i6 %x , %z
169+ %r = select i1 %c , i1 %cmp1 , i1 %cmp2
170+ ret i1 %r
171+ }
172+
137173define i1 @icmp_sgt_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
138174; CHECK-LABEL: @icmp_sgt_common(
139175; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
@@ -146,6 +182,18 @@ define i1 @icmp_sgt_common(i1 %c, i6 %x, i6 %y, i6 %z) {
146182 ret i1 %r
147183}
148184
185+ define i1 @icmp_sgt_samesign_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
186+ ; CHECK-LABEL: @icmp_sgt_samesign_common(
187+ ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
188+ ; CHECK-NEXT: [[R:%.*]] = icmp ugt i6 [[X:%.*]], [[R_V]]
189+ ; CHECK-NEXT: ret i1 [[R]]
190+ ;
191+ %cmp1 = icmp samesign ugt i6 %x , %y
192+ %cmp2 = icmp sgt i6 %x , %z
193+ %r = select i1 %c , i1 %cmp1 , i1 %cmp2
194+ ret i1 %r
195+ }
196+
149197define i1 @icmp_sle_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
150198; CHECK-LABEL: @icmp_sle_common(
151199; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
@@ -158,6 +206,18 @@ define i1 @icmp_sle_common(i1 %c, i6 %x, i6 %y, i6 %z) {
158206 ret i1 %r
159207}
160208
209+ define i1 @icmp_sle_samesign_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
210+ ; CHECK-LABEL: @icmp_sle_samesign_common(
211+ ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
212+ ; CHECK-NEXT: [[R:%.*]] = icmp sge i6 [[X:%.*]], [[R_V]]
213+ ; CHECK-NEXT: ret i1 [[R]]
214+ ;
215+ %cmp1 = icmp sle i6 %y , %x
216+ %cmp2 = icmp samesign ule i6 %z , %x
217+ %r = select i1 %c , i1 %cmp1 , i1 %cmp2
218+ ret i1 %r
219+ }
220+
161221define i1 @icmp_sge_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
162222; CHECK-LABEL: @icmp_sge_common(
163223; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
@@ -170,6 +230,18 @@ define i1 @icmp_sge_common(i1 %c, i6 %x, i6 %y, i6 %z) {
170230 ret i1 %r
171231}
172232
233+ define i1 @icmp_sge_samesign_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
234+ ; CHECK-LABEL: @icmp_sge_samesign_common(
235+ ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
236+ ; CHECK-NEXT: [[R:%.*]] = icmp sle i6 [[X:%.*]], [[R_V]]
237+ ; CHECK-NEXT: ret i1 [[R]]
238+ ;
239+ %cmp1 = icmp sge i6 %y , %x
240+ %cmp2 = icmp samesign uge i6 %z , %x
241+ %r = select i1 %c , i1 %cmp1 , i1 %cmp2
242+ ret i1 %r
243+ }
244+
173245define i1 @icmp_slt_sgt_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
174246; CHECK-LABEL: @icmp_slt_sgt_common(
175247; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
@@ -182,6 +254,18 @@ define i1 @icmp_slt_sgt_common(i1 %c, i6 %x, i6 %y, i6 %z) {
182254 ret i1 %r
183255}
184256
257+ define i1 @icmp_slt_sgt_samesign_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
258+ ; CHECK-LABEL: @icmp_slt_sgt_samesign_common(
259+ ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
260+ ; CHECK-NEXT: [[R:%.*]] = icmp ult i6 [[X:%.*]], [[R_V]]
261+ ; CHECK-NEXT: ret i1 [[R]]
262+ ;
263+ %cmp1 = icmp samesign ult i6 %x , %y
264+ %cmp2 = icmp sgt i6 %z , %x
265+ %r = select i1 %c , i1 %cmp1 , i1 %cmp2
266+ ret i1 %r
267+ }
268+
185269define i1 @icmp_sle_sge_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
186270; CHECK-LABEL: @icmp_sle_sge_common(
187271; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
@@ -194,6 +278,18 @@ define i1 @icmp_sle_sge_common(i1 %c, i6 %x, i6 %y, i6 %z) {
194278 ret i1 %r
195279}
196280
281+ define i1 @icmp_sle_sge_samesign_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
282+ ; CHECK-LABEL: @icmp_sle_sge_samesign_common(
283+ ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
284+ ; CHECK-NEXT: [[R:%.*]] = icmp sge i6 [[X:%.*]], [[R_V]]
285+ ; CHECK-NEXT: ret i1 [[R]]
286+ ;
287+ %cmp1 = icmp sle i6 %y , %x
288+ %cmp2 = icmp samesign uge i6 %x , %z
289+ %r = select i1 %c , i1 %cmp1 , i1 %cmp2
290+ ret i1 %r
291+ }
292+
197293define i1 @icmp_ult_common (i1 %c , i6 %x , i6 %y , i6 %z ) {
198294; CHECK-LABEL: @icmp_ult_common(
199295; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]]
0 commit comments