Skip to content

Commit 9b00a8e

Browse files
author
Chen Zheng
committedJul 12, 2018
[InstCombine]add testcases for folding more SPFofSPF pattern
Differential Revision: https://reviews.llvm.org/D49222 llvm-svn: 336902
1 parent cc85244 commit 9b00a8e

File tree

1 file changed

+326
-0
lines changed

1 file changed

+326
-0
lines changed
 

‎llvm/test/Transforms/InstCombine/abs_abs.ll

Lines changed: 326 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,87 @@ define i32 @abs_abs_x16(i32 %x) {
289289
ret i32 %cond18
290290
}
291291

292+
; abs(abs(-x)) -> abs(-x)
293+
define i32 @abs_abs_x17(i32 %x) {
294+
; CHECK-LABEL: @abs_abs_x17(
295+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 0, [[X:%.*]]
296+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[X]], 0
297+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 [[X]]
298+
; CHECK-NEXT: ret i32 [[COND]]
299+
;
300+
%sub = sub nsw i32 0, %x
301+
%cmp = icmp sgt i32 %sub, -1
302+
%cond = select i1 %cmp, i32 %sub, i32 %x
303+
%cmp1 = icmp sgt i32 %cond, -1
304+
%sub16 = sub nsw i32 0, %cond
305+
%cond18 = select i1 %cmp1, i32 %cond, i32 %sub16
306+
ret i32 %cond18
307+
}
308+
309+
; abs(abs(x - y)) -> abs(x - y)
310+
define i32 @abs_abs_x18(i32 %x, i32 %y) {
311+
; CHECK-LABEL: @abs_abs_x18(
312+
; CHECK-NEXT: [[A:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]
313+
; CHECK-NEXT: [[B:%.*]] = sub nsw i32 [[Y]], [[X]]
314+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A]], -1
315+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[A]], i32 [[B]]
316+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[COND]], 0
317+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw i32 0, [[COND]]
318+
; CHECK-NEXT: [[COND18:%.*]] = select i1 [[CMP1]], i32 [[SUB16]], i32 [[COND]]
319+
; CHECK-NEXT: ret i32 [[COND18]]
320+
;
321+
%a = sub nsw i32 %x, %y
322+
%b = sub nsw i32 %y, %x
323+
%cmp = icmp sgt i32 %a, -1
324+
%cond = select i1 %cmp, i32 %a, i32 %b
325+
%cmp1 = icmp sgt i32 %cond, -1
326+
%sub16 = sub nsw i32 0, %cond
327+
%cond18 = select i1 %cmp1, i32 %cond, i32 %sub16
328+
ret i32 %cond18
329+
}
330+
331+
; abs(abs(-x)) -> abs(-x)
332+
define <2 x i32> @abs_abs_x02_vec(<2 x i32> %x) {
333+
; CHECK-LABEL: @abs_abs_x02_vec(
334+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw <2 x i32> zeroinitializer, [[X:%.*]]
335+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[SUB]], <i32 -1, i32 -1>
336+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i32> [[SUB]], <2 x i32> [[X]]
337+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt <2 x i32> [[COND]], zeroinitializer
338+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw <2 x i32> zeroinitializer, [[COND]]
339+
; CHECK-NEXT: [[COND18:%.*]] = select <2 x i1> [[CMP1]], <2 x i32> [[SUB16]], <2 x i32> [[COND]]
340+
; CHECK-NEXT: ret <2 x i32> [[COND18]]
341+
;
342+
%sub = sub nsw <2 x i32> zeroinitializer, %x
343+
%cmp = icmp sgt <2 x i32> %sub, <i32 -1, i32 -1>
344+
%cond = select <2 x i1> %cmp, <2 x i32> %sub, <2 x i32> %x
345+
%cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>
346+
%sub16 = sub nsw <2 x i32> zeroinitializer, %cond
347+
%cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub16
348+
ret <2 x i32> %cond18
349+
}
350+
351+
; abs(abs(x - y)) -> abs(x - y)
352+
define <2 x i32> @abs_abs_x03_vec(<2 x i32> %x, <2 x i32> %y) {
353+
; CHECK-LABEL: @abs_abs_x03_vec(
354+
; CHECK-NEXT: [[A:%.*]] = sub nsw <2 x i32> [[X:%.*]], [[Y:%.*]]
355+
; CHECK-NEXT: [[B:%.*]] = sub nsw <2 x i32> [[Y:%.*]], [[X:%.*]]
356+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[A]], <i32 -1, i32 -1>
357+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i32> [[A]], <2 x i32> [[B]]
358+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt <2 x i32> [[COND]], zeroinitializer
359+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw <2 x i32> zeroinitializer, [[COND]]
360+
; CHECK-NEXT: [[COND18:%.*]] = select <2 x i1> [[CMP1]], <2 x i32> [[SUB16]], <2 x i32> [[COND]]
361+
; CHECK-NEXT: ret <2 x i32> [[COND18]]
362+
;
363+
%a = sub nsw <2 x i32> %x, %y
364+
%b = sub nsw <2 x i32> %y, %x
365+
%cmp = icmp sgt <2 x i32> %a, <i32 -1, i32 -1>
366+
%cond = select <2 x i1> %cmp, <2 x i32> %a, <2 x i32> %b
367+
%cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>
368+
%sub16 = sub nsw <2 x i32> zeroinitializer, %cond
369+
%cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub16
370+
ret <2 x i32> %cond18
371+
}
372+
292373
define i32 @nabs_nabs_x01(i32 %x) {
293374
; CHECK-LABEL: @nabs_nabs_x01(
294375
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[X:%.*]], 0
@@ -545,6 +626,89 @@ define i32 @nabs_nabs_x16(i32 %x) {
545626
ret i32 %cond18
546627
}
547628

629+
; nabs(nabs(-x)) -> nabs(-x)
630+
define i32 @nabs_nabs_x17(i32 %x) {
631+
; CHECK-LABEL: @nabs_nabs_x17(
632+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 0, [[X:%.*]]
633+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[X]], 0
634+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[X]], i32 [[SUB]]
635+
; CHECK-NEXT: ret i32 [[COND]]
636+
;
637+
%sub = sub nsw i32 0, %x
638+
%cmp = icmp sgt i32 %sub, -1
639+
%cond = select i1 %cmp, i32 %x, i32 %sub
640+
%cmp1 = icmp sgt i32 %cond, -1
641+
%sub16 = sub nsw i32 0, %cond
642+
%cond18 = select i1 %cmp1, i32 %sub16, i32 %cond
643+
ret i32 %cond18
644+
}
645+
646+
; nabs(nabs(x - y)) -> nabs(x - y)
647+
define i32 @nabs_nabs_x18(i32 %x, i32 %y) {
648+
; CHECK-LABEL: @nabs_nabs_x18(
649+
; CHECK-NEXT: [[A:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]
650+
; CHECK-NEXT: [[B:%.*]] = sub nsw i32 [[Y]], [[X]]
651+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A]], -1
652+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[B]], i32 [[A]]
653+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[COND]], 0
654+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw i32 0, [[COND]]
655+
; CHECK-NEXT: [[COND18:%.*]] = select i1 [[CMP1]], i32 [[COND]], i32 [[SUB16]]
656+
; CHECK-NEXT: ret i32 [[COND18]]
657+
;
658+
%a = sub nsw i32 %x, %y
659+
%b = sub nsw i32 %y, %x
660+
%cmp = icmp sgt i32 %a, -1
661+
%cond = select i1 %cmp, i32 %b, i32 %a
662+
%cmp1 = icmp sgt i32 %cond, -1
663+
%sub16 = sub nsw i32 0, %cond
664+
%cond18 = select i1 %cmp1, i32 %sub16, i32 %cond
665+
ret i32 %cond18
666+
}
667+
668+
; nabs(nabs(-x)) -> nabs(-x)
669+
define <2 x i32> @nabs_nabs_x01_vec(<2 x i32> %x) {
670+
; CHECK-LABEL: @nabs_nabs_x01_vec(
671+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw <2 x i32> zeroinitializer, [[X:%.*]]
672+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[SUB]], <i32 -1, i32 -1>
673+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i32> [[X]], <2 x i32> [[SUB]]
674+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt <2 x i32> [[COND]], zeroinitializer
675+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw <2 x i32> zeroinitializer, [[COND]]
676+
; CHECK-NEXT: [[COND18:%.*]] = select <2 x i1> [[CMP1]], <2 x i32> [[COND]], <2 x i32> [[SUB16]]
677+
; CHECK-NEXT: ret <2 x i32> [[COND18]]
678+
;
679+
680+
;
681+
%sub = sub nsw <2 x i32> zeroinitializer, %x
682+
%cmp = icmp sgt <2 x i32> %sub, <i32 -1, i32 -1>
683+
%cond = select <2 x i1> %cmp, <2 x i32> %x, <2 x i32> %sub
684+
%cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>
685+
%sub16 = sub nsw <2 x i32> zeroinitializer, %cond
686+
%cond18 = select <2 x i1> %cmp1, <2 x i32> %sub16, <2 x i32> %cond
687+
ret <2 x i32> %cond18
688+
}
689+
690+
; nabs(nabs(x - y)) -> nabs(x - y)
691+
define <2 x i32> @nabs_nabs_x02_vec(<2 x i32> %x, <2 x i32> %y) {
692+
; CHECK-LABEL: @nabs_nabs_x02_vec(
693+
; CHECK-NEXT: [[A:%.*]] = sub nsw <2 x i32> [[X:%.*]], [[Y:%.*]]
694+
; CHECK-NEXT: [[B:%.*]] = sub nsw <2 x i32> [[Y:%.*]], [[X:%.*]]
695+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[A]], <i32 -1, i32 -1>
696+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i32> [[B]], <2 x i32> [[A]]
697+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt <2 x i32> [[COND]], zeroinitializer
698+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw <2 x i32> zeroinitializer, [[COND]]
699+
; CHECK-NEXT: [[COND18:%.*]] = select <2 x i1> [[CMP1]], <2 x i32> [[COND]], <2 x i32> [[SUB16]]
700+
; CHECK-NEXT: ret <2 x i32> [[COND18]]
701+
;
702+
%a = sub nsw <2 x i32> %x, %y
703+
%b = sub nsw <2 x i32> %y, %x
704+
%cmp = icmp sgt <2 x i32> %a, <i32 -1, i32 -1>
705+
%cond = select <2 x i1> %cmp, <2 x i32> %b, <2 x i32> %a
706+
%cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>
707+
%sub16 = sub nsw <2 x i32> zeroinitializer, %cond
708+
%cond18 = select <2 x i1> %cmp1, <2 x i32> %sub16, <2 x i32> %cond
709+
ret <2 x i32> %cond18
710+
}
711+
548712
define i32 @abs_nabs_x01(i32 %x) {
549713
; CHECK-LABEL: @abs_nabs_x01(
550714
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[X:%.*]], 0
@@ -801,6 +965,87 @@ define i32 @abs_nabs_x16(i32 %x) {
801965
ret i32 %cond18
802966
}
803967

968+
; abs(nabs(-x)) -> abs(-x)
969+
define i32 @abs_nabs_x17(i32 %x) {
970+
; CHECK-LABEL: @abs_nabs_x17(
971+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 0, [[X:%.*]]
972+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[X]], 0
973+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 [[X]]
974+
; CHECK-NEXT: ret i32 [[COND1]]
975+
;
976+
%sub = sub nsw i32 0, %x
977+
%cmp = icmp sgt i32 %sub, -1
978+
%cond = select i1 %cmp, i32 %x, i32 %sub
979+
%cmp1 = icmp sgt i32 %cond, -1
980+
%sub16 = sub nsw i32 0, %cond
981+
%cond18 = select i1 %cmp1, i32 %cond, i32 %sub16
982+
ret i32 %cond18
983+
}
984+
985+
; abs(nabs(x - y)) -> abs(x - y)
986+
define i32 @abs_nabs_x18(i32 %x, i32 %y) {
987+
; CHECK-LABEL: @abs_nabs_x18(
988+
; CHECK-NEXT: [[A:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]
989+
; CHECK-NEXT: [[B:%.*]] = sub nsw i32 [[Y]], [[X]]
990+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A]], -1
991+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[B]], i32 [[A]]
992+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[COND]], 0
993+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw i32 0, [[COND]]
994+
; CHECK-NEXT: [[COND18:%.*]] = select i1 [[CMP1]], i32 [[SUB16]], i32 [[COND]]
995+
; CHECK-NEXT: ret i32 [[COND18]]
996+
;
997+
%a = sub nsw i32 %x, %y
998+
%b = sub nsw i32 %y, %x
999+
%cmp = icmp sgt i32 %a, -1
1000+
%cond = select i1 %cmp, i32 %b, i32 %a
1001+
%cmp1 = icmp sgt i32 %cond, -1
1002+
%sub16 = sub nsw i32 0, %cond
1003+
%cond18 = select i1 %cmp1, i32 %cond, i32 %sub16
1004+
ret i32 %cond18
1005+
}
1006+
1007+
; abs(nabs(-x)) -> abs(-x)
1008+
define <2 x i32> @abs_nabs_x01_vec(<2 x i32> %x) {
1009+
; CHECK-LABEL: @abs_nabs_x01_vec(
1010+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw <2 x i32> zeroinitializer, [[X:%.*]]
1011+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[SUB]], <i32 -1, i32 -1>
1012+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i32> [[X]], <2 x i32> [[SUB]]
1013+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt <2 x i32> [[COND]], zeroinitializer
1014+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw <2 x i32> zeroinitializer, [[COND]]
1015+
; CHECK-NEXT: [[COND18:%.*]] = select <2 x i1> [[CMP1]], <2 x i32> [[SUB16]], <2 x i32> [[COND]]
1016+
; CHECK-NEXT: ret <2 x i32> [[COND18]]
1017+
;
1018+
%sub = sub nsw <2 x i32> zeroinitializer, %x
1019+
%cmp = icmp sgt <2 x i32> %sub, <i32 -1, i32 -1>
1020+
%cond = select <2 x i1> %cmp, <2 x i32> %x, <2 x i32> %sub
1021+
%cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>
1022+
%sub16 = sub nsw <2 x i32> zeroinitializer, %cond
1023+
%cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub16
1024+
ret <2 x i32> %cond18
1025+
}
1026+
1027+
; abs(nabs(x - y)) -> abs(x - y)
1028+
define <2 x i32> @abs_nabs_x02_vec(<2 x i32> %x, <2 x i32> %y) {
1029+
; CHECK-LABEL: @abs_nabs_x02_vec(
1030+
; CHECK-NEXT: [[A:%.*]] = sub nsw <2 x i32> [[X:%.*]], [[Y:%.*]]
1031+
; CHECK-NEXT: [[B:%.*]] = sub nsw <2 x i32> [[Y:%.*]], [[X:%.*]]
1032+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[A]], <i32 -1, i32 -1>
1033+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i32> [[B]], <2 x i32> [[A]]
1034+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt <2 x i32> [[COND]], zeroinitializer
1035+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw <2 x i32> zeroinitializer, [[COND]]
1036+
; CHECK-NEXT: [[COND18:%.*]] = select <2 x i1> [[CMP1]], <2 x i32> [[SUB16]], <2 x i32> [[COND]]
1037+
; CHECK-NEXT: ret <2 x i32> [[COND18]]
1038+
;
1039+
%a = sub nsw <2 x i32> %x, %y
1040+
%b = sub nsw <2 x i32> %y, %x
1041+
%cmp = icmp sgt <2 x i32> %a, <i32 -1, i32 -1>
1042+
%cond = select <2 x i1> %cmp, <2 x i32> %b, <2 x i32> %a
1043+
%cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>
1044+
%sub16 = sub nsw <2 x i32> zeroinitializer, %cond
1045+
%cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub16
1046+
ret <2 x i32> %cond18
1047+
}
1048+
8041049
define i32 @nabs_abs_x01(i32 %x) {
8051050
; CHECK-LABEL: @nabs_abs_x01(
8061051
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[X:%.*]], 0
@@ -1057,3 +1302,84 @@ define i32 @nabs_abs_x16(i32 %x) {
10571302
ret i32 %cond18
10581303
}
10591304

1305+
; nabs(abs(-x)) -> nabs(-x)
1306+
define i32 @nabs_abs_x17(i32 %x) {
1307+
; CHECK-LABEL: @nabs_abs_x17(
1308+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 0, [[X:%.*]]
1309+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[X]], 0
1310+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[X]], i32 [[SUB]]
1311+
; CHECK-NEXT: ret i32 [[COND1]]
1312+
;
1313+
%sub = sub nsw i32 0, %x
1314+
%cmp = icmp sgt i32 %sub, -1
1315+
%cond = select i1 %cmp, i32 %sub, i32 %x
1316+
%cmp1 = icmp sgt i32 %cond, -1
1317+
%sub16 = sub nsw i32 0, %cond
1318+
%cond18 = select i1 %cmp1, i32 %sub16, i32 %cond
1319+
ret i32 %cond18
1320+
}
1321+
1322+
; nabs(abs(x - y)) -> nabs(x - y)
1323+
define i32 @nabs_abs_x18(i32 %x, i32 %y) {
1324+
; CHECK-LABEL: @nabs_abs_x18(
1325+
; CHECK-NEXT: [[A:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]
1326+
; CHECK-NEXT: [[B:%.*]] = sub nsw i32 [[Y]], [[X]]
1327+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A]], -1
1328+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[A]], i32 [[B]]
1329+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[COND]], 0
1330+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw i32 0, [[COND]]
1331+
; CHECK-NEXT: [[COND18:%.*]] = select i1 [[CMP1]], i32 [[COND]], i32 [[SUB16]]
1332+
; CHECK-NEXT: ret i32 [[COND18]]
1333+
;
1334+
%a = sub nsw i32 %x, %y
1335+
%b = sub nsw i32 %y, %x
1336+
%cmp = icmp sgt i32 %a, -1
1337+
%cond = select i1 %cmp, i32 %a, i32 %b
1338+
%cmp1 = icmp sgt i32 %cond, -1
1339+
%sub16 = sub nsw i32 0, %cond
1340+
%cond18 = select i1 %cmp1, i32 %sub16, i32 %cond
1341+
ret i32 %cond18
1342+
}
1343+
1344+
; nabs(abs(-x)) -> nabs(-x)
1345+
define <2 x i32> @nabs_abs_x01_vec(<2 x i32> %x) {
1346+
; CHECK-LABEL: @nabs_abs_x01_vec(
1347+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw <2 x i32> zeroinitializer, [[X:%.*]]
1348+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[SUB]], <i32 -1, i32 -1>
1349+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i32> [[SUB]], <2 x i32> [[X]]
1350+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt <2 x i32> [[COND]], zeroinitializer
1351+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw <2 x i32> zeroinitializer, [[COND]]
1352+
; CHECK-NEXT: [[COND18:%.*]] = select <2 x i1> [[CMP1]], <2 x i32> [[COND]], <2 x i32> [[SUB16]]
1353+
; CHECK-NEXT: ret <2 x i32> [[COND18]]
1354+
;
1355+
;
1356+
%sub = sub nsw <2 x i32> zeroinitializer, %x
1357+
%cmp = icmp sgt <2 x i32> %sub, <i32 -1, i32 -1>
1358+
%cond = select <2 x i1> %cmp, <2 x i32> %sub, <2 x i32> %x
1359+
%cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>
1360+
%sub16 = sub nsw <2 x i32> zeroinitializer, %cond
1361+
%cond18 = select <2 x i1> %cmp1, <2 x i32> %sub16, <2 x i32> %cond
1362+
ret <2 x i32> %cond18
1363+
}
1364+
1365+
; nabs(abs(x - y)) -> nabs(x - y)
1366+
define <2 x i32> @nabs_abs_x02_vec(<2 x i32> %x, <2 x i32> %y) {
1367+
; CHECK-LABEL: @nabs_abs_x02_vec(
1368+
; CHECK-NEXT: [[A:%.*]] = sub nsw <2 x i32> [[X:%.*]], [[Y:%.*]]
1369+
; CHECK-NEXT: [[B:%.*]] = sub nsw <2 x i32> [[Y:%.*]], [[X:%.*]]
1370+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[A]], <i32 -1, i32 -1>
1371+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i32> [[A]], <2 x i32> [[B]]
1372+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt <2 x i32> [[COND]], zeroinitializer
1373+
; CHECK-NEXT: [[SUB16:%.*]] = sub nsw <2 x i32> zeroinitializer, [[COND]]
1374+
; CHECK-NEXT: [[COND18:%.*]] = select <2 x i1> [[CMP1]], <2 x i32> [[COND]], <2 x i32> [[SUB16]]
1375+
; CHECK-NEXT: ret <2 x i32> [[COND18]]
1376+
;
1377+
%a = sub nsw <2 x i32> %x, %y
1378+
%b = sub nsw <2 x i32> %y, %x
1379+
%cmp = icmp sgt <2 x i32> %a, <i32 -1, i32 -1>
1380+
%cond = select <2 x i1> %cmp, <2 x i32> %a, <2 x i32> %b
1381+
%cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>
1382+
%sub16 = sub nsw <2 x i32> zeroinitializer, %cond
1383+
%cond18 = select <2 x i1> %cmp1, <2 x i32> %sub16, <2 x i32> %cond
1384+
ret <2 x i32> %cond18
1385+
}

0 commit comments

Comments
 (0)
Please sign in to comment.