Skip to content

Commit a054d89

Browse files
committed
[InstSimplify] Add signed version of pre-commit tests for PR65905. NFC.
1 parent ccf194b commit a054d89

File tree

2 files changed

+312
-0
lines changed

2 files changed

+312
-0
lines changed

llvm/test/Transforms/InstSimplify/compare.ll

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2140,6 +2140,162 @@ define i1 @tautological16_negative(i32 %A) {
21402140
ret i1 %D
21412141
}
21422142

2143+
define i1 @tautological17_subset1(i32 %A) {
2144+
; CHECK-LABEL: @tautological17_subset1(
2145+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2146+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 3
2147+
; CHECK-NEXT: [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
2148+
; CHECK-NEXT: ret i1 [[D]]
2149+
;
2150+
%C1 = and i32 %A, 1
2151+
%C2 = and i32 %A, 3
2152+
%D = icmp sgt i32 %C1, %C2
2153+
ret i1 %D
2154+
}
2155+
2156+
define i1 @tautological17_subset2(i32 %A) {
2157+
; CHECK-LABEL: @tautological17_subset2(
2158+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], -4
2159+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], -3
2160+
; CHECK-NEXT: [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
2161+
; CHECK-NEXT: ret i1 [[D]]
2162+
;
2163+
%C1 = and i32 %A, -4
2164+
%C2 = and i32 %A, -3
2165+
%D = icmp sgt i32 %C1, %C2
2166+
ret i1 %D
2167+
}
2168+
2169+
define i1 @tautological17_negative(i32 %A) {
2170+
; CHECK-LABEL: @tautological17_negative(
2171+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2172+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], -3
2173+
; CHECK-NEXT: [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
2174+
; CHECK-NEXT: ret i1 [[D]]
2175+
;
2176+
%C1 = and i32 %A, 1
2177+
%C2 = and i32 %A, -3
2178+
%D = icmp sgt i32 %C1, %C2
2179+
ret i1 %D
2180+
}
2181+
2182+
define i1 @tautological18_subset1(i32 %A) {
2183+
; CHECK-LABEL: @tautological18_subset1(
2184+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2185+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 3
2186+
; CHECK-NEXT: [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
2187+
; CHECK-NEXT: ret i1 [[D]]
2188+
;
2189+
%C1 = and i32 %A, 1
2190+
%C2 = and i32 %A, 3
2191+
%D = icmp sle i32 %C1, %C2
2192+
ret i1 %D
2193+
}
2194+
2195+
define i1 @tautological18_subset2(i32 %A) {
2196+
; CHECK-LABEL: @tautological18_subset2(
2197+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], -4
2198+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], -3
2199+
; CHECK-NEXT: [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
2200+
; CHECK-NEXT: ret i1 [[D]]
2201+
;
2202+
%C1 = and i32 %A, -4
2203+
%C2 = and i32 %A, -3
2204+
%D = icmp sle i32 %C1, %C2
2205+
ret i1 %D
2206+
}
2207+
2208+
define i1 @tautological18_negative(i32 %A) {
2209+
; CHECK-LABEL: @tautological18_negative(
2210+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2211+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], -3
2212+
; CHECK-NEXT: [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
2213+
; CHECK-NEXT: ret i1 [[D]]
2214+
;
2215+
%C1 = and i32 %A, 1
2216+
%C2 = and i32 %A, -3
2217+
%D = icmp sle i32 %C1, %C2
2218+
ret i1 %D
2219+
}
2220+
2221+
define i1 @tautological19_subset1(i32 %A) {
2222+
; CHECK-LABEL: @tautological19_subset1(
2223+
; CHECK-NEXT: [[C1:%.*]] = or i32 [[A:%.*]], 1
2224+
; CHECK-NEXT: [[C2:%.*]] = or i32 [[A]], 3
2225+
; CHECK-NEXT: [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
2226+
; CHECK-NEXT: ret i1 [[D]]
2227+
;
2228+
%C1 = or i32 %A, 1
2229+
%C2 = or i32 %A, 3
2230+
%D = icmp sgt i32 %C1, %C2
2231+
ret i1 %D
2232+
}
2233+
2234+
define i1 @tautological19_subset2(i32 %A) {
2235+
; CHECK-LABEL: @tautological19_subset2(
2236+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], -4
2237+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], -3
2238+
; CHECK-NEXT: [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
2239+
; CHECK-NEXT: ret i1 [[D]]
2240+
;
2241+
%C1 = and i32 %A, -4
2242+
%C2 = and i32 %A, -3
2243+
%D = icmp sgt i32 %C1, %C2
2244+
ret i1 %D
2245+
}
2246+
2247+
define i1 @tautological19_negative(i32 %A) {
2248+
; CHECK-LABEL: @tautological19_negative(
2249+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2250+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], -3
2251+
; CHECK-NEXT: [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
2252+
; CHECK-NEXT: ret i1 [[D]]
2253+
;
2254+
%C1 = and i32 %A, 1
2255+
%C2 = and i32 %A, -3
2256+
%D = icmp sgt i32 %C1, %C2
2257+
ret i1 %D
2258+
}
2259+
2260+
define i1 @tautological20_subset1(i32 %A) {
2261+
; CHECK-LABEL: @tautological20_subset1(
2262+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2263+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 3
2264+
; CHECK-NEXT: [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
2265+
; CHECK-NEXT: ret i1 [[D]]
2266+
;
2267+
%C1 = and i32 %A, 1
2268+
%C2 = and i32 %A, 3
2269+
%D = icmp sle i32 %C1, %C2
2270+
ret i1 %D
2271+
}
2272+
2273+
define i1 @tautological20_subset2(i32 %A) {
2274+
; CHECK-LABEL: @tautological20_subset2(
2275+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], -4
2276+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], -3
2277+
; CHECK-NEXT: [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
2278+
; CHECK-NEXT: ret i1 [[D]]
2279+
;
2280+
%C1 = and i32 %A, -4
2281+
%C2 = and i32 %A, -3
2282+
%D = icmp sle i32 %C1, %C2
2283+
ret i1 %D
2284+
}
2285+
2286+
define i1 @tautological20_negative(i32 %A) {
2287+
; CHECK-LABEL: @tautological20_negative(
2288+
; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2289+
; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], -3
2290+
; CHECK-NEXT: [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
2291+
; CHECK-NEXT: ret i1 [[D]]
2292+
;
2293+
%C1 = and i32 %A, 1
2294+
%C2 = and i32 %A, -3
2295+
%D = icmp sle i32 %C1, %C2
2296+
ret i1 %D
2297+
}
2298+
21432299
declare void @helper_i1(i1)
21442300
; Series of tests for icmp s[lt|ge] (or A, B), A and icmp s[gt|le] A, (or A, B)
21452301
define void @icmp_slt_sge_or(i32 %Ax, i32 %Bx) {

llvm/test/Transforms/InstSimplify/maxmin_intrinsics.ll

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2437,3 +2437,159 @@ define i8 @umax_or_mask_negative(i8 %x) {
24372437
%val = call i8 @llvm.umax.i8(i8 %and1, i8 %and2)
24382438
ret i8 %val
24392439
}
2440+
2441+
define i8 @smin_and_mask_subset1(i8 %x) {
2442+
; CHECK-LABEL: @smin_and_mask_subset1(
2443+
; CHECK-NEXT: [[AND1:%.*]] = and i8 [[X:%.*]], 1
2444+
; CHECK-NEXT: [[AND2:%.*]] = and i8 [[X]], 3
2445+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
2446+
; CHECK-NEXT: ret i8 [[VAL]]
2447+
;
2448+
%and1 = and i8 %x, 1
2449+
%and2 = and i8 %x, 3
2450+
%val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
2451+
ret i8 %val
2452+
}
2453+
2454+
define i8 @smax_and_mask_subset1(i8 %x) {
2455+
; CHECK-LABEL: @smax_and_mask_subset1(
2456+
; CHECK-NEXT: [[AND1:%.*]] = and i8 [[X:%.*]], 1
2457+
; CHECK-NEXT: [[AND2:%.*]] = and i8 [[X]], 3
2458+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
2459+
; CHECK-NEXT: ret i8 [[VAL]]
2460+
;
2461+
%and1 = and i8 %x, 1
2462+
%and2 = and i8 %x, 3
2463+
%val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
2464+
ret i8 %val
2465+
}
2466+
2467+
define i8 @smin_or_mask_subset1(i8 %x) {
2468+
; CHECK-LABEL: @smin_or_mask_subset1(
2469+
; CHECK-NEXT: [[AND1:%.*]] = or i8 [[X:%.*]], 1
2470+
; CHECK-NEXT: [[AND2:%.*]] = or i8 [[X]], 3
2471+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
2472+
; CHECK-NEXT: ret i8 [[VAL]]
2473+
;
2474+
%and1 = or i8 %x, 1
2475+
%and2 = or i8 %x, 3
2476+
%val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
2477+
ret i8 %val
2478+
}
2479+
2480+
define i8 @smax_or_mask_subset1(i8 %x) {
2481+
; CHECK-LABEL: @smax_or_mask_subset1(
2482+
; CHECK-NEXT: [[AND1:%.*]] = or i8 [[X:%.*]], 1
2483+
; CHECK-NEXT: [[AND2:%.*]] = or i8 [[X]], 3
2484+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
2485+
; CHECK-NEXT: ret i8 [[VAL]]
2486+
;
2487+
%and1 = or i8 %x, 1
2488+
%and2 = or i8 %x, 3
2489+
%val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
2490+
ret i8 %val
2491+
}
2492+
2493+
define i8 @smin_and_mask_subset2(i8 %x) {
2494+
; CHECK-LABEL: @smin_and_mask_subset2(
2495+
; CHECK-NEXT: [[AND1:%.*]] = and i8 [[X:%.*]], -4
2496+
; CHECK-NEXT: [[AND2:%.*]] = and i8 [[X]], -3
2497+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
2498+
; CHECK-NEXT: ret i8 [[VAL]]
2499+
;
2500+
%and1 = and i8 %x, -4
2501+
%and2 = and i8 %x, -3
2502+
%val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
2503+
ret i8 %val
2504+
}
2505+
2506+
define i8 @smax_and_mask_subset2(i8 %x) {
2507+
; CHECK-LABEL: @smax_and_mask_subset2(
2508+
; CHECK-NEXT: [[AND1:%.*]] = and i8 [[X:%.*]], -4
2509+
; CHECK-NEXT: [[AND2:%.*]] = and i8 [[X]], -3
2510+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
2511+
; CHECK-NEXT: ret i8 [[VAL]]
2512+
;
2513+
%and1 = and i8 %x, -4
2514+
%and2 = and i8 %x, -3
2515+
%val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
2516+
ret i8 %val
2517+
}
2518+
2519+
define i8 @smin_or_mask_subset2(i8 %x) {
2520+
; CHECK-LABEL: @smin_or_mask_subset2(
2521+
; CHECK-NEXT: [[AND1:%.*]] = or i8 [[X:%.*]], -4
2522+
; CHECK-NEXT: [[AND2:%.*]] = or i8 [[X]], -3
2523+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
2524+
; CHECK-NEXT: ret i8 [[VAL]]
2525+
;
2526+
%and1 = or i8 %x, -4
2527+
%and2 = or i8 %x, -3
2528+
%val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
2529+
ret i8 %val
2530+
}
2531+
2532+
define i8 @smax_or_mask_subset2(i8 %x) {
2533+
; CHECK-LABEL: @smax_or_mask_subset2(
2534+
; CHECK-NEXT: [[AND1:%.*]] = or i8 [[X:%.*]], -4
2535+
; CHECK-NEXT: [[AND2:%.*]] = or i8 [[X]], -3
2536+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
2537+
; CHECK-NEXT: ret i8 [[VAL]]
2538+
;
2539+
%and1 = or i8 %x, -4
2540+
%and2 = or i8 %x, -3
2541+
%val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
2542+
ret i8 %val
2543+
}
2544+
2545+
define i8 @smin_and_mask_negative(i8 %x) {
2546+
; CHECK-LABEL: @smin_and_mask_negative(
2547+
; CHECK-NEXT: [[AND1:%.*]] = and i8 [[X:%.*]], 1
2548+
; CHECK-NEXT: [[AND2:%.*]] = and i8 [[X]], -3
2549+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
2550+
; CHECK-NEXT: ret i8 [[VAL]]
2551+
;
2552+
%and1 = and i8 %x, 1
2553+
%and2 = and i8 %x, -3
2554+
%val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
2555+
ret i8 %val
2556+
}
2557+
2558+
define i8 @smax_and_mask_negative(i8 %x) {
2559+
; CHECK-LABEL: @smax_and_mask_negative(
2560+
; CHECK-NEXT: [[AND1:%.*]] = and i8 [[X:%.*]], 1
2561+
; CHECK-NEXT: [[AND2:%.*]] = and i8 [[X]], -3
2562+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
2563+
; CHECK-NEXT: ret i8 [[VAL]]
2564+
;
2565+
%and1 = and i8 %x, 1
2566+
%and2 = and i8 %x, -3
2567+
%val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
2568+
ret i8 %val
2569+
}
2570+
2571+
define i8 @smin_or_mask_negative(i8 %x) {
2572+
; CHECK-LABEL: @smin_or_mask_negative(
2573+
; CHECK-NEXT: [[AND1:%.*]] = or i8 [[X:%.*]], 1
2574+
; CHECK-NEXT: [[AND2:%.*]] = or i8 [[X]], -3
2575+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
2576+
; CHECK-NEXT: ret i8 [[VAL]]
2577+
;
2578+
%and1 = or i8 %x, 1
2579+
%and2 = or i8 %x, -3
2580+
%val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
2581+
ret i8 %val
2582+
}
2583+
2584+
define i8 @smax_or_mask_negative(i8 %x) {
2585+
; CHECK-LABEL: @smax_or_mask_negative(
2586+
; CHECK-NEXT: [[AND1:%.*]] = or i8 [[X:%.*]], 1
2587+
; CHECK-NEXT: [[AND2:%.*]] = or i8 [[X]], -3
2588+
; CHECK-NEXT: [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
2589+
; CHECK-NEXT: ret i8 [[VAL]]
2590+
;
2591+
%and1 = or i8 %x, 1
2592+
%and2 = or i8 %x, -3
2593+
%val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
2594+
ret i8 %val
2595+
}

0 commit comments

Comments
 (0)