@@ -2216,58 +2216,71 @@ define i1 @lshrugt_03_15_exact(i4 %x) {
2216
2216
ret i1 %c
2217
2217
}
2218
2218
2219
- define i1 @ashr_00_00_noexact (i8 %x ) {
2220
- ; CHECK-LABEL: @ashr_00_00_noexact (
2221
- ; CHECK-NEXT: [[C:%.*]] = icmp sgt i8 [[X:%.*]], 79
2219
+ define i1 @ashr_eq_exact (i8 %x ) {
2220
+ ; CHECK-LABEL: @ashr_eq_exact (
2221
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[X:%.*]], 80
2222
2222
; CHECK-NEXT: ret i1 [[C]]
2223
2223
;
2224
- %s = ashr i8 %x , 3
2225
- %c = icmp sge i8 %s , 10
2224
+ %s = ashr exact i8 %x , 3
2225
+ %c = icmp eq i8 %s , 10
2226
2226
ret i1 %c
2227
2227
}
2228
2228
2229
- define i1 @ashr_00_01_noexact (i8 %x ) {
2230
- ; CHECK-LABEL: @ashr_00_01_noexact (
2231
- ; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], 80
2229
+ define i1 @ashr_ne_exact (i8 %x ) {
2230
+ ; CHECK-LABEL: @ashr_ne_exact (
2231
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[X:%.*]], 80
2232
2232
; CHECK-NEXT: ret i1 [[C]]
2233
2233
;
2234
- %s = ashr i8 %x , 3
2235
- %c = icmp slt i8 %s , 10
2234
+ %s = ashr exact i8 %x , 3
2235
+ %c = icmp ne i8 %s , 10
2236
2236
ret i1 %c
2237
2237
}
2238
2238
2239
- define i1 @ashr_00_03_noexact (i8 %x ) {
2240
- ; CHECK-LABEL: @ashr_00_03_noexact (
2241
- ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], 80
2239
+ define i1 @ashr_ugt_exact (i8 %x ) {
2240
+ ; CHECK-LABEL: @ashr_ugt_exact (
2241
+ ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[X:%.*]], 80
2242
2242
; CHECK-NEXT: ret i1 [[C]]
2243
2243
;
2244
- %s = ashr i8 %x , 3
2245
- %c = icmp ult i8 %s , 10
2244
+ %s = ashr exact i8 %x , 3
2245
+ %c = icmp ugt i8 %s , 10
2246
2246
ret i1 %c
2247
2247
}
2248
2248
2249
- define i1 @ashr_00_00_exact (i8 %x ) {
2250
- ; CHECK-LABEL: @ashr_00_00_exact(
2251
- ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[X:%.*]], 80
2249
+
2250
+ define i1 @ashr_uge_exact (i8 %x ) {
2251
+ ; CHECK-LABEL: @ashr_uge_exact(
2252
+ ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[X:%.*]], 72
2252
2253
; CHECK-NEXT: ret i1 [[C]]
2253
2254
;
2254
2255
%s = ashr exact i8 %x , 3
2255
- %c = icmp ne i8 %s , 10
2256
+ %c = icmp uge i8 %s , 10
2256
2257
ret i1 %c
2257
2258
}
2258
2259
2259
- define i1 @ashr_00_01_exact (i8 %x ) {
2260
- ; CHECK-LABEL: @ashr_00_01_exact (
2261
- ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[X:%.*]], 80
2260
+ define i1 @ashr_ult_exact (i8 %x ) {
2261
+ ; CHECK-LABEL: @ashr_ult_exact (
2262
+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], 80
2262
2263
; CHECK-NEXT: ret i1 [[C]]
2263
2264
;
2264
2265
%s = ashr exact i8 %x , 3
2265
- %c = icmp eq i8 %s , 10
2266
+ %c = icmp ult i8 %s , 10
2267
+ ret i1 %c
2268
+ }
2269
+
2270
+
2271
+ define i1 @ashr_ule_exact (i8 %x ) {
2272
+ ; CHECK-LABEL: @ashr_ule_exact(
2273
+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], 88
2274
+ ; CHECK-NEXT: ret i1 [[C]]
2275
+ ;
2276
+ %s = ashr exact i8 %x , 3
2277
+ %c = icmp ule i8 %s , 10
2266
2278
ret i1 %c
2267
2279
}
2268
2280
2269
- define i1 @ashr_00_02_exact (i8 %x ) {
2270
- ; CHECK-LABEL: @ashr_00_02_exact(
2281
+
2282
+ define i1 @ashr_sgt_exact (i8 %x ) {
2283
+ ; CHECK-LABEL: @ashr_sgt_exact(
2271
2284
; CHECK-NEXT: [[C:%.*]] = icmp sgt i8 [[X:%.*]], 80
2272
2285
; CHECK-NEXT: ret i1 [[C]]
2273
2286
;
@@ -2276,8 +2289,29 @@ define i1 @ashr_00_02_exact(i8 %x) {
2276
2289
ret i1 %c
2277
2290
}
2278
2291
2279
- define i1 @ashr_00_03_exact (i8 %x ) {
2280
- ; CHECK-LABEL: @ashr_00_03_exact(
2292
+
2293
+ define i1 @ashr_sge_exact (i8 %x ) {
2294
+ ; CHECK-LABEL: @ashr_sge_exact(
2295
+ ; CHECK-NEXT: [[C:%.*]] = icmp sgt i8 [[X:%.*]], 72
2296
+ ; CHECK-NEXT: ret i1 [[C]]
2297
+ ;
2298
+ %s = ashr exact i8 %x , 3
2299
+ %c = icmp sge i8 %s , 10
2300
+ ret i1 %c
2301
+ }
2302
+
2303
+ define i1 @ashr_slt_exact (i8 %x ) {
2304
+ ; CHECK-LABEL: @ashr_slt_exact(
2305
+ ; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], 80
2306
+ ; CHECK-NEXT: ret i1 [[C]]
2307
+ ;
2308
+ %s = ashr exact i8 %x , 3
2309
+ %c = icmp slt i8 %s , 10
2310
+ ret i1 %c
2311
+ }
2312
+
2313
+ define i1 @ashr_sle_exact (i8 %x ) {
2314
+ ; CHECK-LABEL: @ashr_sle_exact(
2281
2315
; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], 88
2282
2316
; CHECK-NEXT: ret i1 [[C]]
2283
2317
;
@@ -2286,26 +2320,114 @@ define i1 @ashr_00_03_exact(i8 %x) {
2286
2320
ret i1 %c
2287
2321
}
2288
2322
2289
- define i1 @ashr_00_04_exact (i8 %x ) {
2290
- ; CHECK-LABEL: @ashr_00_04_exact(
2291
- ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[X:%.*]], 80
2323
+ define i1 @ashr_eq_noexact (i8 %x ) {
2324
+ ; CHECK-LABEL: @ashr_eq_noexact(
2325
+ ; CHECK-NEXT: [[S_MASK:%.*]] = and i8 [[X:%.*]], -8
2326
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[S_MASK]], 80
2292
2327
; CHECK-NEXT: ret i1 [[C]]
2293
2328
;
2294
- %s = ashr exact i8 %x , 3
2329
+ %s = ashr i8 %x , 3
2330
+ %c = icmp eq i8 %s , 10
2331
+ ret i1 %c
2332
+ }
2333
+
2334
+ define i1 @ashr_ne_noexact (i8 %x ) {
2335
+ ; CHECK-LABEL: @ashr_ne_noexact(
2336
+ ; CHECK-NEXT: [[S_MASK:%.*]] = and i8 [[X:%.*]], -8
2337
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[S_MASK]], 80
2338
+ ; CHECK-NEXT: ret i1 [[C]]
2339
+ ;
2340
+ %s = ashr i8 %x , 3
2341
+ %c = icmp ne i8 %s , 10
2342
+ ret i1 %c
2343
+ }
2344
+
2345
+ define i1 @ashr_ugt_noexact (i8 %x ) {
2346
+ ; CHECK-LABEL: @ashr_ugt_noexact(
2347
+ ; CHECK-NEXT: [[S:%.*]] = ashr i8 [[X:%.*]], 3
2348
+ ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[S]], 10
2349
+ ; CHECK-NEXT: ret i1 [[C]]
2350
+ ;
2351
+ %s = ashr i8 %x , 3
2295
2352
%c = icmp ugt i8 %s , 10
2296
2353
ret i1 %c
2297
2354
}
2298
2355
2299
- define i1 @ashr_00_05_exact (i8 %x ) {
2300
- ; CHECK-LABEL: @ashr_00_05_exact(
2356
+
2357
+ define i1 @ashr_uge_noexact (i8 %x ) {
2358
+ ; CHECK-LABEL: @ashr_uge_noexact(
2359
+ ; CHECK-NEXT: [[S:%.*]] = ashr i8 [[X:%.*]], 3
2360
+ ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[S]], 9
2361
+ ; CHECK-NEXT: ret i1 [[C]]
2362
+ ;
2363
+ %s = ashr i8 %x , 3
2364
+ %c = icmp uge i8 %s , 10
2365
+ ret i1 %c
2366
+ }
2367
+
2368
+ define i1 @ashr_ult_noexact (i8 %x ) {
2369
+ ; CHECK-LABEL: @ashr_ult_noexact(
2370
+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], 80
2371
+ ; CHECK-NEXT: ret i1 [[C]]
2372
+ ;
2373
+ %s = ashr i8 %x , 3
2374
+ %c = icmp ult i8 %s , 10
2375
+ ret i1 %c
2376
+ }
2377
+
2378
+
2379
+ define i1 @ashr_ule_noexact (i8 %x ) {
2380
+ ; CHECK-LABEL: @ashr_ule_noexact(
2301
2381
; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], 88
2302
2382
; CHECK-NEXT: ret i1 [[C]]
2303
2383
;
2304
- %s = ashr exact i8 %x , 3
2384
+ %s = ashr i8 %x , 3
2305
2385
%c = icmp ule i8 %s , 10
2306
2386
ret i1 %c
2307
2387
}
2308
2388
2389
+
2390
+ define i1 @ashr_sgt_noexact (i8 %x ) {
2391
+ ; CHECK-LABEL: @ashr_sgt_noexact(
2392
+ ; CHECK-NEXT: [[C:%.*]] = icmp sgt i8 [[X:%.*]], 87
2393
+ ; CHECK-NEXT: ret i1 [[C]]
2394
+ ;
2395
+ %s = ashr i8 %x , 3
2396
+ %c = icmp sgt i8 %s , 10
2397
+ ret i1 %c
2398
+ }
2399
+
2400
+
2401
+ define i1 @ashr_sge_noexact (i8 %x ) {
2402
+ ; CHECK-LABEL: @ashr_sge_noexact(
2403
+ ; CHECK-NEXT: [[C:%.*]] = icmp sgt i8 [[X:%.*]], 79
2404
+ ; CHECK-NEXT: ret i1 [[C]]
2405
+ ;
2406
+ %s = ashr i8 %x , 3
2407
+ %c = icmp sge i8 %s , 10
2408
+ ret i1 %c
2409
+ }
2410
+
2411
+ define i1 @ashr_slt_noexact (i8 %x ) {
2412
+ ; CHECK-LABEL: @ashr_slt_noexact(
2413
+ ; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], 80
2414
+ ; CHECK-NEXT: ret i1 [[C]]
2415
+ ;
2416
+ %s = ashr i8 %x , 3
2417
+ %c = icmp slt i8 %s , 10
2418
+ ret i1 %c
2419
+ }
2420
+
2421
+ define i1 @ashr_sle_noexact (i8 %x ) {
2422
+ ; CHECK-LABEL: @ashr_sle_noexact(
2423
+ ; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], 88
2424
+ ; CHECK-NEXT: ret i1 [[C]]
2425
+ ;
2426
+ %s = ashr i8 %x , 3
2427
+ %c = icmp sle i8 %s , 10
2428
+ ret i1 %c
2429
+ }
2430
+
2309
2431
define i1 @ashr_00_00_ashr_extra_use (i8 %x , i8* %ptr ) {
2310
2432
; CHECK-LABEL: @ashr_00_00_ashr_extra_use(
2311
2433
; CHECK-NEXT: [[S:%.*]] = ashr exact i8 [[X:%.*]], 3
0 commit comments