Skip to content

Commit 8dff860

Browse files
committed
[NFC] Add additional tests for icmp predicate.
This commit adds small tests for the combination of: {exact, no_exact} x { EQ, NE, UGT, UGE, ULT, ULE, SGT, SGE, SLT, SLE} This is related to the changes in D117338.
1 parent b77fd01 commit 8dff860

File tree

1 file changed

+156
-34
lines changed

1 file changed

+156
-34
lines changed

llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll

Lines changed: 156 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2216,58 +2216,71 @@ define i1 @lshrugt_03_15_exact(i4 %x) {
22162216
ret i1 %c
22172217
}
22182218

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
22222222
; CHECK-NEXT: ret i1 [[C]]
22232223
;
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
22262226
ret i1 %c
22272227
}
22282228

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
22322232
; CHECK-NEXT: ret i1 [[C]]
22332233
;
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
22362236
ret i1 %c
22372237
}
22382238

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
22422242
; CHECK-NEXT: ret i1 [[C]]
22432243
;
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
22462246
ret i1 %c
22472247
}
22482248

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
22522253
; CHECK-NEXT: ret i1 [[C]]
22532254
;
22542255
%s = ashr exact i8 %x, 3
2255-
%c = icmp ne i8 %s, 10
2256+
%c = icmp uge i8 %s, 10
22562257
ret i1 %c
22572258
}
22582259

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
22622263
; CHECK-NEXT: ret i1 [[C]]
22632264
;
22642265
%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
22662278
ret i1 %c
22672279
}
22682280

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(
22712284
; CHECK-NEXT: [[C:%.*]] = icmp sgt i8 [[X:%.*]], 80
22722285
; CHECK-NEXT: ret i1 [[C]]
22732286
;
@@ -2276,8 +2289,29 @@ define i1 @ashr_00_02_exact(i8 %x) {
22762289
ret i1 %c
22772290
}
22782291

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(
22812315
; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], 88
22822316
; CHECK-NEXT: ret i1 [[C]]
22832317
;
@@ -2286,26 +2320,114 @@ define i1 @ashr_00_03_exact(i8 %x) {
22862320
ret i1 %c
22872321
}
22882322

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
22922327
; CHECK-NEXT: ret i1 [[C]]
22932328
;
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
22952352
%c = icmp ugt i8 %s, 10
22962353
ret i1 %c
22972354
}
22982355

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(
23012381
; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], 88
23022382
; CHECK-NEXT: ret i1 [[C]]
23032383
;
2304-
%s = ashr exact i8 %x, 3
2384+
%s = ashr i8 %x, 3
23052385
%c = icmp ule i8 %s, 10
23062386
ret i1 %c
23072387
}
23082388

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+
23092431
define i1 @ashr_00_00_ashr_extra_use(i8 %x, i8* %ptr) {
23102432
; CHECK-LABEL: @ashr_00_00_ashr_extra_use(
23112433
; CHECK-NEXT: [[S:%.*]] = ashr exact i8 [[X:%.*]], 3

0 commit comments

Comments
 (0)