@@ -14,7 +14,7 @@ declare void @use_i64(i64)
14
14
define i1 @srem_sgt_test1 (i64 %x ) {
15
15
; CHECK-LABEL: @srem_sgt_test1(
16
16
; CHECK-NEXT: [[Y:%.*]] = srem i64 [[X:%.*]], 34360750831
17
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i64 [[Y]], 34360750829
17
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[Y]], 34360750830
18
18
; CHECK-NEXT: ret i1 [[CMP]]
19
19
;
20
20
%y = srem i64 %x , 34360750831
@@ -25,7 +25,7 @@ define i1 @srem_sgt_test1(i64 %x) {
25
25
define i1 @srem_slt_test1 (i64 %x ) {
26
26
; CHECK-LABEL: @srem_slt_test1(
27
27
; CHECK-NEXT: [[Y:%.*]] = srem i64 [[X:%.*]], 34360750831
28
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[Y]], 34360750830
28
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[Y]], 34360750830
29
29
; CHECK-NEXT: ret i1 [[CMP]]
30
30
;
31
31
%y = srem i64 %x , 34360750831
@@ -36,7 +36,7 @@ define i1 @srem_slt_test1(i64 %x) {
36
36
define i1 @srem_sgt_test2 (i32 %x ) {
37
37
; CHECK-LABEL: @srem_sgt_test2(
38
38
; CHECK-NEXT: [[Y:%.*]] = srem i32 [[X:%.*]], 1074977277
39
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[Y]], 1074977275
39
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[Y]], 1074977276
40
40
; CHECK-NEXT: ret i1 [[CMP]]
41
41
;
42
42
%y = srem i32 %x , 1074977277
@@ -47,7 +47,7 @@ define i1 @srem_sgt_test2(i32 %x) {
47
47
define i1 @srem_slt_test2 (i32 %x ) {
48
48
; CHECK-LABEL: @srem_slt_test2(
49
49
; CHECK-NEXT: [[Y:%.*]] = srem i32 [[X:%.*]], 1074977277
50
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[Y]], 1074977276
50
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[Y]], 1074977276
51
51
; CHECK-NEXT: ret i1 [[CMP]]
52
52
;
53
53
%y = srem i32 %x , 1074977277
@@ -58,7 +58,7 @@ define i1 @srem_slt_test2(i32 %x) {
58
58
define i1 @srem_sgt_test3 (i16 %x ) {
59
59
; CHECK-LABEL: @srem_sgt_test3(
60
60
; CHECK-NEXT: [[Y:%.*]] = srem i16 [[X:%.*]], 2259
61
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i16 [[Y]], 2257
61
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[Y]], 2258
62
62
; CHECK-NEXT: ret i1 [[CMP]]
63
63
;
64
64
%y = srem i16 %x , 2259
@@ -69,7 +69,7 @@ define i1 @srem_sgt_test3(i16 %x) {
69
69
define i1 @srem_slt_test3 (i16 %x ) {
70
70
; CHECK-LABEL: @srem_slt_test3(
71
71
; CHECK-NEXT: [[Y:%.*]] = srem i16 [[X:%.*]], 2259
72
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i16 [[Y]], 2258
72
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i16 [[Y]], 2258
73
73
; CHECK-NEXT: ret i1 [[CMP]]
74
74
;
75
75
%y = srem i16 %x , 2259
@@ -80,7 +80,7 @@ define i1 @srem_slt_test3(i16 %x) {
80
80
define i1 @srem_sgt_test4 (i8 %x ) {
81
81
; CHECK-LABEL: @srem_sgt_test4(
82
82
; CHECK-NEXT: [[Y:%.*]] = srem i8 [[X:%.*]], 50
83
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y]], 48
83
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[Y]], 49
84
84
; CHECK-NEXT: ret i1 [[CMP]]
85
85
;
86
86
%y = srem i8 %x , 50
@@ -91,7 +91,7 @@ define i1 @srem_sgt_test4(i8 %x) {
91
91
define i1 @srem_slt_test4 (i8 %x ) {
92
92
; CHECK-LABEL: @srem_slt_test4(
93
93
; CHECK-NEXT: [[Y:%.*]] = srem i8 [[X:%.*]], 50
94
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y]], 49
94
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[Y]], 49
95
95
; CHECK-NEXT: ret i1 [[CMP]]
96
96
;
97
97
%y = srem i8 %x , 50
@@ -101,8 +101,8 @@ define i1 @srem_slt_test4(i8 %x) {
101
101
102
102
define i1 @test_srem_slt_constant (i32 %a ) {
103
103
; CHECK-LABEL: @test_srem_slt_constant(
104
- ; CHECK-NEXT: [[Y :%.*]] = srem i32 [[A:%.*]], 512
105
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[Y ]], 511
104
+ ; CHECK-NEXT: [[TMP1 :%.*]] = and i32 [[A:%.*]], -2147483137
105
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP1 ]], 511
106
106
; CHECK-NEXT: ret i1 [[CMP]]
107
107
;
108
108
%y = srem i32 %a , 512
@@ -112,8 +112,8 @@ define i1 @test_srem_slt_constant(i32 %a) {
112
112
113
113
define i1 @test_srem_sgt_constant (i32 %a ) {
114
114
; CHECK-LABEL: @test_srem_sgt_constant(
115
- ; CHECK-NEXT: [[Y :%.*]] = srem i32 [[A:%.*]], 512
116
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[Y ]], 510
115
+ ; CHECK-NEXT: [[TMP1 :%.*]] = and i32 [[A:%.*]], -2147483137
116
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1 ]], 511
117
117
; CHECK-NEXT: ret i1 [[CMP]]
118
118
;
119
119
%y = srem i32 %a , 512
@@ -123,8 +123,8 @@ define i1 @test_srem_sgt_constant(i32 %a) {
123
123
124
124
define <2 x i1 > @test_srem_slt_constant_splat (<2 x i32 > %a ) {
125
125
; CHECK-LABEL: @test_srem_slt_constant_splat(
126
- ; CHECK-NEXT: [[Y :%.*]] = srem <2 x i32> [[A:%.*]], <i32 512 , i32 512 >
127
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <2 x i32> [[Y ]], <i32 511, i32 511>
126
+ ; CHECK-NEXT: [[TMP1 :%.*]] = and <2 x i32> [[A:%.*]], <i32 -2147483137 , i32 -2147483137 >
127
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i32> [[TMP1 ]], <i32 511, i32 511>
128
128
; CHECK-NEXT: ret <2 x i1> [[CMP]]
129
129
;
130
130
%y = srem <2 x i32 > %a , <i32 512 , i32 512 >
@@ -134,8 +134,8 @@ define <2 x i1> @test_srem_slt_constant_splat(<2 x i32> %a) {
134
134
135
135
define <2 x i1 > @test_srem_sgt_constant_splat (<2 x i32 > %a ) {
136
136
; CHECK-LABEL: @test_srem_sgt_constant_splat(
137
- ; CHECK-NEXT: [[Y :%.*]] = srem <2 x i32> [[A:%.*]], <i32 512 , i32 512 >
138
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[Y ]], <i32 510 , i32 510 >
137
+ ; CHECK-NEXT: [[TMP1 :%.*]] = and <2 x i32> [[A:%.*]], <i32 -2147483137 , i32 -2147483137 >
138
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[TMP1 ]], <i32 511 , i32 511 >
139
139
; CHECK-NEXT: ret <2 x i1> [[CMP]]
140
140
;
141
141
%y = srem <2 x i32 > %a , <i32 512 , i32 512 >
@@ -147,7 +147,7 @@ define <2 x i1> @test_srem_sgt_constant_splat(<2 x i32> %a) {
147
147
define i1 @srem_sgt_test (i16 %x ) {
148
148
; CHECK-LABEL: @srem_sgt_test(
149
149
; CHECK-NEXT: [[Y:%.*]] = srem i16 [[X:%.*]], 2259
150
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i16 [[Y]], -2258
150
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i16 [[Y]], -2258
151
151
; CHECK-NEXT: ret i1 [[CMP]]
152
152
;
153
153
%y = srem i16 %x , -2259
@@ -158,7 +158,7 @@ define i1 @srem_sgt_test(i16 %x) {
158
158
define i1 @srem_sle_test (i16 %x ) {
159
159
; CHECK-LABEL: @srem_sle_test(
160
160
; CHECK-NEXT: [[Y:%.*]] = srem i16 [[X:%.*]], 2259
161
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i16 [[Y]], -2257
161
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[Y]], -2258
162
162
; CHECK-NEXT: ret i1 [[CMP]]
163
163
;
164
164
%y = srem i16 %x , -2259
@@ -169,7 +169,7 @@ define i1 @srem_sle_test(i16 %x) {
169
169
define <2 x i1 > @test_srem_sgt_constant_splat_neg (<2 x i32 > %a ) {
170
170
; CHECK-LABEL: @test_srem_sgt_constant_splat_neg(
171
171
; CHECK-NEXT: [[Y:%.*]] = srem <2 x i32> [[A:%.*]], <i32 512, i32 512>
172
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[Y]], <i32 -511, i32 -511>
172
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i32> [[Y]], <i32 -511, i32 -511>
173
173
; CHECK-NEXT: ret <2 x i1> [[CMP]]
174
174
;
175
175
%y = srem <2 x i32 > %a , <i32 -512 , i32 -512 >
@@ -180,7 +180,7 @@ define <2 x i1> @test_srem_sgt_constant_splat_neg(<2 x i32> %a) {
180
180
define <2 x i1 > @test_srem_slt_constant_splat_neg (<2 x i32 > %a ) {
181
181
; CHECK-LABEL: @test_srem_slt_constant_splat_neg(
182
182
; CHECK-NEXT: [[Y:%.*]] = srem <2 x i32> [[A:%.*]], <i32 512, i32 512>
183
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <2 x i32> [[Y]], <i32 -510 , i32 -510 >
183
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[Y]], <i32 -511 , i32 -511 >
184
184
; CHECK-NEXT: ret <2 x i1> [[CMP]]
185
185
;
186
186
%y = srem <2 x i32 > %a , <i32 -512 , i32 -512 >
@@ -192,7 +192,7 @@ define <2 x i1> @test_srem_slt_constant_splat_neg(<2 x i32> %a) {
192
192
define i1 @test_urem_slt (i32 %x ) {
193
193
; CHECK-LABEL: @test_urem_slt(
194
194
; CHECK-NEXT: [[Y:%.*]] = urem i32 [[X:%.*]], 12235
195
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[Y]], 12234
195
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[Y]], 12234
196
196
; CHECK-NEXT: ret i1 [[CMP]]
197
197
;
198
198
%y = urem i32 %x , 12235
@@ -203,7 +203,7 @@ define i1 @test_urem_slt(i32 %x) {
203
203
define i1 @test_urem_sge (i32 %x ) {
204
204
; CHECK-LABEL: @test_urem_sge(
205
205
; CHECK-NEXT: [[Y:%.*]] = urem i32 [[X:%.*]], 13546
206
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[Y]], 13544
206
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[Y]], 13545
207
207
; CHECK-NEXT: ret i1 [[CMP]]
208
208
;
209
209
%y = urem i32 %x , 13546
@@ -214,7 +214,7 @@ define i1 @test_urem_sge(i32 %x) {
214
214
define i1 @test_urem_uge (i32 %x ) {
215
215
; CHECK-LABEL: @test_urem_uge(
216
216
; CHECK-NEXT: [[Y:%.*]] = urem i32 [[X:%.*]], 18642
217
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[Y]], 18640
217
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[Y]], 18641
218
218
; CHECK-NEXT: ret i1 [[CMP]]
219
219
;
220
220
%y = urem i32 %x , 18642
@@ -225,7 +225,7 @@ define i1 @test_urem_uge(i32 %x) {
225
225
define i1 @test_urem_ult (i32 %x ) {
226
226
; CHECK-LABEL: @test_urem_ult(
227
227
; CHECK-NEXT: [[Y:%.*]] = urem i32 [[X:%.*]], 15344
228
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[Y]], 15343
228
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[Y]], 15343
229
229
; CHECK-NEXT: ret i1 [[CMP]]
230
230
;
231
231
%y = urem i32 %x , 15344
@@ -235,8 +235,8 @@ define i1 @test_urem_ult(i32 %x) {
235
235
236
236
define <2 x i1 > @test_urem_slt_constant_splat (<2 x i32 > %a ) {
237
237
; CHECK-LABEL: @test_urem_slt_constant_splat(
238
- ; CHECK-NEXT: [[Y :%.*]] = srem <2 x i32> [[A:%.*]], <i32 512 , i32 512 >
239
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <2 x i32> [[Y ]], <i32 511, i32 511>
238
+ ; CHECK-NEXT: [[TMP1 :%.*]] = and <2 x i32> [[A:%.*]], <i32 -2147483137 , i32 -2147483137 >
239
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i32> [[TMP1 ]], <i32 511, i32 511>
240
240
; CHECK-NEXT: ret <2 x i1> [[CMP]]
241
241
;
242
242
%y = srem <2 x i32 > %a , <i32 512 , i32 512 >
@@ -246,8 +246,8 @@ define <2 x i1> @test_urem_slt_constant_splat(<2 x i32> %a) {
246
246
247
247
define <2 x i1 > @test_urem_sgt_constant_splat (<2 x i32 > %a ) {
248
248
; CHECK-LABEL: @test_urem_sgt_constant_splat(
249
- ; CHECK-NEXT: [[Y :%.*]] = srem <2 x i32> [[A:%.*]], <i32 512 , i32 512 >
250
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> [[Y ]], <i32 510 , i32 510 >
249
+ ; CHECK-NEXT: [[TMP1 :%.*]] = and <2 x i32> [[A:%.*]], <i32 -2147483137 , i32 -2147483137 >
250
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[TMP1 ]], <i32 511 , i32 511 >
251
251
; CHECK-NEXT: ret <2 x i1> [[CMP]]
252
252
;
253
253
%y = srem <2 x i32 > %a , <i32 512 , i32 512 >
0 commit comments