@@ -34,9 +34,12 @@ define i8 @smax_nsw(i8 %a, i8 %b) {
3434define i8 @abs_swapped (i8 %a ) {
3535; CHECK-LABEL: @abs_swapped(
3636; CHECK-NEXT: [[NEG:%.*]] = sub i8 0, [[A:%.*]]
37- ; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 [[A]], 0
38- ; CHECK-NEXT: [[M1:%.*]] = select i1 [[CMP1]], i8 [[NEG]], i8 [[A]]
39- ; CHECK-NEXT: ret i8 [[M1]]
37+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 [[A]], 0
38+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 [[A]], 0
39+ ; CHECK-NEXT: [[M1:%.*]] = select i1 [[CMP1]], i8 [[A]], i8 [[NEG]]
40+ ; CHECK-NEXT: [[M2:%.*]] = select i1 [[CMP2]], i8 [[NEG]], i8 [[A]]
41+ ; CHECK-NEXT: [[R:%.*]] = or i8 [[M2]], [[M1]]
42+ ; CHECK-NEXT: ret i8 [[R]]
4043;
4144 %neg = sub i8 0 , %a
4245 %cmp1 = icmp sgt i8 %a , 0
@@ -51,7 +54,13 @@ define i8 @abs_swapped(i8 %a) {
5154
5255define i8 @nabs_swapped (i8 %a ) {
5356; CHECK-LABEL: @nabs_swapped(
54- ; CHECK-NEXT: ret i8 0
57+ ; CHECK-NEXT: [[NEG:%.*]] = sub i8 0, [[A:%.*]]
58+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 [[A]], 0
59+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 [[A]], 0
60+ ; CHECK-NEXT: [[M1:%.*]] = select i1 [[CMP1]], i8 [[A]], i8 [[NEG]]
61+ ; CHECK-NEXT: [[M2:%.*]] = select i1 [[CMP2]], i8 [[NEG]], i8 [[A]]
62+ ; CHECK-NEXT: [[R:%.*]] = xor i8 [[M2]], [[M1]]
63+ ; CHECK-NEXT: ret i8 [[R]]
5564;
5665 %neg = sub i8 0 , %a
5766 %cmp1 = icmp slt i8 %a , 0
@@ -66,7 +75,13 @@ define i8 @nabs_swapped(i8 %a) {
6675
6776define i8 @abs_different_constants (i8 %a ) {
6877; CHECK-LABEL: @abs_different_constants(
69- ; CHECK-NEXT: ret i8 0
78+ ; CHECK-NEXT: [[NEG:%.*]] = sub i8 0, [[A:%.*]]
79+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 [[A]], -1
80+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 [[A]], 0
81+ ; CHECK-NEXT: [[M1:%.*]] = select i1 [[CMP1]], i8 [[A]], i8 [[NEG]]
82+ ; CHECK-NEXT: [[M2:%.*]] = select i1 [[CMP2]], i8 [[NEG]], i8 [[A]]
83+ ; CHECK-NEXT: [[R:%.*]] = xor i8 [[M2]], [[M1]]
84+ ; CHECK-NEXT: ret i8 [[R]]
7085;
7186 %neg = sub i8 0 , %a
7287 %cmp1 = icmp sgt i8 %a , -1
@@ -83,8 +98,11 @@ define i8 @nabs_different_constants(i8 %a) {
8398; CHECK-LABEL: @nabs_different_constants(
8499; CHECK-NEXT: [[NEG:%.*]] = sub i8 0, [[A:%.*]]
85100; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 [[A]], 0
101+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 [[A]], -1
86102; CHECK-NEXT: [[M1:%.*]] = select i1 [[CMP1]], i8 [[A]], i8 [[NEG]]
87- ; CHECK-NEXT: ret i8 [[M1]]
103+ ; CHECK-NEXT: [[M2:%.*]] = select i1 [[CMP2]], i8 [[NEG]], i8 [[A]]
104+ ; CHECK-NEXT: [[R:%.*]] = or i8 [[M2]], [[M1]]
105+ ; CHECK-NEXT: ret i8 [[R]]
88106;
89107 %neg = sub i8 0 , %a
90108 %cmp1 = icmp slt i8 %a , 0
0 commit comments