brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 99ac4a2 Raw
231 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=instcombine < %s | FileCheck %s3 4 5define i32 @and_umax_less(i32 %A) {6; CHECK-LABEL: @and_umax_less(7; CHECK-NEXT:    [[X:%.*]] = and i32 [[A:%.*]], -328; CHECK-NEXT:    ret i32 [[X]]9;10  %l0 = icmp ugt i32 31, %A11  %l1 = select i1 %l0, i32 31, i32 %A12  %x = and i32 %l1, -3213  ret i32 %x14}15 16define i32 @and_umax_muchless(i32 %A) {17; CHECK-LABEL: @and_umax_muchless(18; CHECK-NEXT:    [[X:%.*]] = and i32 [[A:%.*]], -3219; CHECK-NEXT:    ret i32 [[X]]20;21  %l0 = icmp ugt i32 12, %A22  %l1 = select i1 %l0, i32 12, i32 %A23  %x = and i32 %l1, -3224  ret i32 %x25}26 27define i32 @and_umax_more(i32 %A) {28; CHECK-LABEL: @and_umax_more(29; CHECK-NEXT:    [[L1:%.*]] = call i32 @llvm.umax.i32(i32 [[A:%.*]], i32 32)30; CHECK-NEXT:    [[X:%.*]] = and i32 [[L1]], -3231; CHECK-NEXT:    ret i32 [[X]]32;33  %l0 = icmp ugt i32 32, %A34  %l1 = select i1 %l0, i32 32, i32 %A35  %x = and i32 %l1, -3236  ret i32 %x37}38 39define i32 @shr_umax(i32 %A) {40; CHECK-LABEL: @shr_umax(41; CHECK-NEXT:    [[X:%.*]] = lshr i32 [[A:%.*]], 442; CHECK-NEXT:    ret i32 [[X]]43;44  %l0 = icmp ugt i32 15, %A45  %l1 = select i1 %l0, i32 15, i32 %A46  %x = lshr i32 %l1, 447  ret i32 %x48}49 50; Various constants for C2 & umax(A, C1)51 52define i8 @t_0_1(i8 %A) {53; CHECK-LABEL: @t_0_1(54; CHECK-NEXT:    [[X:%.*]] = and i8 [[A:%.*]], 155; CHECK-NEXT:    ret i8 [[X]]56;57  %l2 = icmp ugt i8 %A, 058  %l1 = select i1 %l2, i8 %A, i8 059  %x = and i8 %l1, 160  ret i8 %x61}62 63define i8 @t_0_10(i8 %A) {64; CHECK-LABEL: @t_0_10(65; CHECK-NEXT:    [[X:%.*]] = and i8 [[A:%.*]], 1066; CHECK-NEXT:    ret i8 [[X]]67;68  %l2 = icmp ugt i8 %A, 069  %l1 = select i1 %l2, i8 %A, i8 070  %x = and i8 %l1, 1071  ret i8 %x72}73 74define i8 @t_1_10(i8 %A) {75; CHECK-LABEL: @t_1_10(76; CHECK-NEXT:    [[X:%.*]] = and i8 [[A:%.*]], 1077; CHECK-NEXT:    ret i8 [[X]]78;79  %l2 = icmp ugt i8 %A, 180  %l1 = select i1 %l2, i8 %A, i8 181  %x = and i8 %l1, 1082  ret i8 %x83}84 85define i8 @t_2_4(i8 %A) {86; CHECK-LABEL: @t_2_4(87; CHECK-NEXT:    [[X:%.*]] = and i8 [[A:%.*]], 488; CHECK-NEXT:    ret i8 [[X]]89;90  %l2 = icmp ugt i8 %A, 291  %l1 = select i1 %l2, i8 %A, i8 292  %x = and i8 %l1, 493  ret i8 %x94}95 96define i8 @t_2_192(i8 %A) {97; CHECK-LABEL: @t_2_192(98; CHECK-NEXT:    [[X:%.*]] = and i8 [[A:%.*]], -6499; CHECK-NEXT:    ret i8 [[X]]100;101  %l2 = icmp ugt i8 %A, 2102  %l1 = select i1 %l2, i8 %A, i8 2103  %x = and i8 %l1, -64104  ret i8 %x105}106 107define i8 @t_2_63_or(i8 %A) {108; CHECK-LABEL: @t_2_63_or(109; CHECK-NEXT:    [[X:%.*]] = or i8 [[A:%.*]], 63110; CHECK-NEXT:    ret i8 [[X]]111;112  %l2 = icmp ugt i8 %A, 2113  %l1 = select i1 %l2, i8 %A, i8 2114  %x = or i8 %l1, 63115  ret i8 %x116}117 118define i8 @f_1_1(i8 %A) {119; CHECK-LABEL: @f_1_1(120; CHECK-NEXT:    [[L1:%.*]] = call i8 @llvm.umax.i8(i8 [[A:%.*]], i8 1)121; CHECK-NEXT:    [[X:%.*]] = and i8 [[L1]], 1122; CHECK-NEXT:    ret i8 [[X]]123;124  %l2 = icmp ugt i8 %A, 1125  %l1 = select i1 %l2, i8 %A, i8 1126  %x = and i8 %l1, 1127  ret i8 %x128}129 130define i8 @f_32_32(i8 %A) {131; CHECK-LABEL: @f_32_32(132; CHECK-NEXT:    [[L1:%.*]] = call i8 @llvm.umax.i8(i8 [[A:%.*]], i8 32)133; CHECK-NEXT:    [[X:%.*]] = and i8 [[L1]], -32134; CHECK-NEXT:    ret i8 [[X]]135;136  %l2 = icmp ugt i8 %A, 32137  %l1 = select i1 %l2, i8 %A, i8 32138  %x = and i8 %l1, -32139  ret i8 %x140}141 142define i8 @f_191_192(i8 %A) {143; CHECK-LABEL: @f_191_192(144; CHECK-NEXT:    [[L1:%.*]] = call i8 @llvm.umax.i8(i8 [[A:%.*]], i8 -65)145; CHECK-NEXT:    [[X:%.*]] = and i8 [[L1]], -64146; CHECK-NEXT:    ret i8 [[X]]147;148  %l2 = icmp ugt i8 %A, 191149  %l1 = select i1 %l2, i8 %A, i8 191150  %x = and i8 %l1, 192151  ret i8 %x152}153 154define i8 @f_10_1(i8 %A) {155; CHECK-LABEL: @f_10_1(156; CHECK-NEXT:    [[L1:%.*]] = call i8 @llvm.umax.i8(i8 [[A:%.*]], i8 10)157; CHECK-NEXT:    [[X:%.*]] = and i8 [[L1]], 1158; CHECK-NEXT:    ret i8 [[X]]159;160  %l2 = icmp ugt i8 %A, 10161  %l1 = select i1 %l2, i8 %A, i8 10162  %x = and i8 %l1, 1163  ret i8 %x164}165 166define i32 @and_umin(i32 %A) {167; CHECK-LABEL: @and_umin(168; CHECK-NEXT:    ret i32 0169;170  %l0 = icmp ult i32 15, %A171  %l1 = select i1 %l0, i32 15, i32 %A172  %x = and i32 %l1, -32173  ret i32 %x174}175 176define i32 @or_umin(i32 %A) {177; CHECK-LABEL: @or_umin(178; CHECK-NEXT:    ret i32 31179;180  %l0 = icmp ult i32 15, %A181  %l1 = select i1 %l0, i32 15, i32 %A182  %x = or i32 %l1, 31183  ret i32 %x184}185 186define i8 @or_min_31_30(i8 %A) {187; CHECK-LABEL: @or_min_31_30(188; CHECK-NEXT:    [[R:%.*]] = or i8 [[A:%.*]], 31189; CHECK-NEXT:    ret i8 [[R]]190;191  %cmp = icmp ult i8 %A, -30192  %min = select i1 %cmp, i8 %A, i8 -30193  %r = or i8 %min, 31194  ret i8 %r195}196 197define i8 @and_min_7_7(i8 %A) {198; CHECK-LABEL: @and_min_7_7(199; CHECK-NEXT:    [[R:%.*]] = and i8 [[A:%.*]], -8200; CHECK-NEXT:    ret i8 [[R]]201;202  %l2 = icmp ult i8 %A, -7203  %min = select i1 %l2, i8 %A, i8 -7204  %r = and i8 %min, -8205  ret i8 %r206}207 208define i8 @and_min_7_8(i8 %A) {209; CHECK-LABEL: @and_min_7_8(210; CHECK-NEXT:    [[R:%.*]] = and i8 [[A:%.*]], -8211; CHECK-NEXT:    ret i8 [[R]]212;213  %l2 = icmp ult i8 %A, -8214  %min = select i1 %l2, i8 %A, i8 -8215  %r = and i8 %min, -8216  ret i8 %r217}218 219define i8 @and_min_7_9(i8 %A) {220; CHECK-LABEL: @and_min_7_9(221; CHECK-NEXT:    [[MIN:%.*]] = call i8 @llvm.umin.i8(i8 [[A:%.*]], i8 -9)222; CHECK-NEXT:    [[R:%.*]] = and i8 [[MIN]], -8223; CHECK-NEXT:    ret i8 [[R]]224;225  %l2 = icmp ult i8 %A, -9226  %min = select i1 %l2, i8 %A, i8 -9227  %r = and i8 %min, -8228  ret i8 %r229}230 231