@@ -34,9 +34,12 @@ define i8 @smax_nsw(i8 %a, i8 %b) {
34
34
define i8 @abs_swapped (i8 %a ) {
35
35
; CHECK-LABEL: @abs_swapped(
36
36
; 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]]
40
43
;
41
44
%neg = sub i8 0 , %a
42
45
%cmp1 = icmp sgt i8 %a , 0
@@ -51,7 +54,13 @@ define i8 @abs_swapped(i8 %a) {
51
54
52
55
define i8 @nabs_swapped (i8 %a ) {
53
56
; 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]]
55
64
;
56
65
%neg = sub i8 0 , %a
57
66
%cmp1 = icmp slt i8 %a , 0
@@ -66,7 +75,13 @@ define i8 @nabs_swapped(i8 %a) {
66
75
67
76
define i8 @abs_different_constants (i8 %a ) {
68
77
; 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]]
70
85
;
71
86
%neg = sub i8 0 , %a
72
87
%cmp1 = icmp sgt i8 %a , -1
@@ -83,8 +98,11 @@ define i8 @nabs_different_constants(i8 %a) {
83
98
; CHECK-LABEL: @nabs_different_constants(
84
99
; CHECK-NEXT: [[NEG:%.*]] = sub i8 0, [[A:%.*]]
85
100
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 [[A]], 0
101
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 [[A]], -1
86
102
; 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]]
88
106
;
89
107
%neg = sub i8 0 , %a
90
108
%cmp1 = icmp slt i8 %a , 0
0 commit comments