6
6
define i32 @scmp_x_0_inverted (i32 %x ) {
7
7
; CHECK-LABEL: define i32 @scmp_x_0_inverted(
8
8
; CHECK-SAME: i32 [[X:%.*]]) {
9
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[X]], 0
10
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP4]] to i32
11
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp sgt i32 [[X]], -1
12
- ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP3]], i32 [[TMP2]], i32 -1
9
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[X]], i32 0)
13
10
; CHECK-NEXT: ret i32 [[TMP1]]
14
11
;
15
12
%2 = icmp ne i32 %x , 0
@@ -23,10 +20,7 @@ define i32 @scmp_x_0_inverted(i32 %x) {
23
20
define i32 @scmp_x_0_inverted_const_neg10 (i32 %x ) {
24
21
; CHECK-LABEL: define i32 @scmp_x_0_inverted_const_neg10(
25
22
; CHECK-SAME: i32 [[X:%.*]]) {
26
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[X]], -10
27
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP4]] to i32
28
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp sgt i32 [[X]], -11
29
- ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP3]], i32 [[TMP2]], i32 -1
23
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[X]], i32 -10)
30
24
; CHECK-NEXT: ret i32 [[TMP1]]
31
25
;
32
26
%1 = icmp ne i32 %x , -10
@@ -40,10 +34,7 @@ define i32 @scmp_x_0_inverted_const_neg10(i32 %x) {
40
34
define i8 @scmp_x_0_inverted_i8 (i8 %x ) {
41
35
; CHECK-LABEL: define i8 @scmp_x_0_inverted_i8(
42
36
; CHECK-SAME: i8 [[X:%.*]]) {
43
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i8 [[X]], 7
44
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP4]] to i8
45
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp sgt i8 [[X]], 6
46
- ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP3]], i8 [[TMP2]], i8 -1
37
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.scmp.i8.i8(i8 [[X]], i8 7)
47
38
; CHECK-NEXT: ret i8 [[TMP1]]
48
39
;
49
40
%1 = icmp ne i8 %x , 7
@@ -57,10 +48,8 @@ define i8 @scmp_x_0_inverted_i8(i8 %x) {
57
48
define i32 @scmp_x_0_inverted_i64_neq (i32 %x ) {
58
49
; CHECK-LABEL: define i32 @scmp_x_0_inverted_i64_neq(
59
50
; CHECK-SAME: i32 [[X:%.*]]) {
60
- ; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[X]], 0
61
- ; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i32 [[X]], -1
62
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i1 [[CMP1]] to i32
63
- ; CHECK-NEXT: [[RET:%.*]] = select i1 [[CMP2]], i32 [[TMP1]], i32 -1
51
+ ; CHECK-NEXT: [[SEL:%.*]] = call i64 @llvm.scmp.i64.i32(i32 [[X]], i32 0)
52
+ ; CHECK-NEXT: [[RET:%.*]] = trunc i64 [[SEL]] to i32
64
53
; CHECK-NEXT: ret i32 [[RET]]
65
54
;
66
55
%x64 = sext i32 %x to i64
@@ -76,10 +65,8 @@ define i32 @scmp_x_0_inverted_i64_neq(i32 %x) {
76
65
define i32 @scmp_x_0_inverted_i64_sgt (i32 %x ) {
77
66
; CHECK-LABEL: define i32 @scmp_x_0_inverted_i64_sgt(
78
67
; CHECK-SAME: i32 [[X:%.*]]) {
79
- ; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[X]], 0
80
- ; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i32 [[X]], -1
81
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i1 [[CMP1]] to i32
82
- ; CHECK-NEXT: [[RET:%.*]] = select i1 [[CMP2]], i32 [[TMP1]], i32 -1
68
+ ; CHECK-NEXT: [[SEL:%.*]] = call i64 @llvm.scmp.i64.i32(i32 [[X]], i32 0)
69
+ ; CHECK-NEXT: [[RET:%.*]] = trunc i64 [[SEL]] to i32
83
70
; CHECK-NEXT: ret i32 [[RET]]
84
71
;
85
72
%x64 = sext i32 %x to i64
@@ -95,10 +82,7 @@ define i32 @scmp_x_0_inverted_i64_sgt(i32 %x) {
95
82
define i32 @scmp_x_0_inverted_const_neg1000 (i32 %x ) {
96
83
; CHECK-LABEL: define i32 @scmp_x_0_inverted_const_neg1000(
97
84
; CHECK-SAME: i32 [[X:%.*]]) {
98
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp sgt i32 [[X]], -1000
99
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP4]] to i32
100
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp sgt i32 [[X]], -1001
101
- ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP3]], i32 [[TMP2]], i32 -1
85
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[X]], i32 -1000)
102
86
; CHECK-NEXT: ret i32 [[TMP1]]
103
87
;
104
88
%1 = icmp sgt i32 %x , -1000
@@ -112,10 +96,7 @@ define i32 @scmp_x_0_inverted_const_neg1000(i32 %x) {
112
96
define i32 @scmp_x_0_inverted_const_1729_sgt (i32 %x ) {
113
97
; CHECK-LABEL: define i32 @scmp_x_0_inverted_const_1729_sgt(
114
98
; CHECK-SAME: i32 [[X:%.*]]) {
115
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp sgt i32 [[X]], 1729
116
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP4]] to i32
117
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp sgt i32 [[X]], 1728
118
- ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP3]], i32 [[TMP2]], i32 -1
99
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[X]], i32 1729)
119
100
; CHECK-NEXT: ret i32 [[TMP1]]
120
101
;
121
102
%1 = icmp sgt i32 %x , 1729
@@ -129,10 +110,7 @@ define i32 @scmp_x_0_inverted_const_1729_sgt(i32 %x) {
129
110
define i32 @ucmp_x_10_inverted (i32 %x ) {
130
111
; CHECK-LABEL: define i32 @ucmp_x_10_inverted(
131
112
; CHECK-SAME: i32 [[X:%.*]]) {
132
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[X]], 10
133
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP4]] to i32
134
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp ugt i32 [[X]], 9
135
- ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP3]], i32 [[TMP2]], i32 -1
113
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 10)
136
114
; CHECK-NEXT: ret i32 [[TMP1]]
137
115
;
138
116
%1 = icmp ne i32 %x , 10
@@ -146,10 +124,7 @@ define i32 @ucmp_x_10_inverted(i32 %x) {
146
124
define i32 @ucmp_x_neg1_inverted (i32 %x ) {
147
125
; CHECK-LABEL: define i32 @ucmp_x_neg1_inverted(
148
126
; CHECK-SAME: i32 [[X:%.*]]) {
149
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[X]], -3
150
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP4]] to i32
151
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp ugt i32 [[X]], -4
152
- ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP3]], i32 [[TMP2]], i32 -1
127
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 -3)
153
128
; CHECK-NEXT: ret i32 [[TMP1]]
154
129
;
155
130
%1 = icmp ne i32 %x , -3
@@ -163,10 +138,7 @@ define i32 @ucmp_x_neg1_inverted(i32 %x) {
163
138
define i8 @ucmp_x_neg4_i8_ugt (i8 %x ) {
164
139
; CHECK-LABEL: define i8 @ucmp_x_neg4_i8_ugt(
165
140
; CHECK-SAME: i8 [[X:%.*]]) {
166
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp ugt i8 [[X]], -4
167
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP4]] to i8
168
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp ugt i8 [[X]], -5
169
- ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP3]], i8 [[TMP2]], i8 -1
141
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.ucmp.i8.i8(i8 [[X]], i8 -4)
170
142
; CHECK-NEXT: ret i8 [[TMP1]]
171
143
;
172
144
%1 = icmp ugt i8 %x , -4
0 commit comments