brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · c8ce114 Raw
191 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -passes=instcombine -S %s | FileCheck %s3 4define i8 @select_icmp_eq_pow2(i8 %x) {5; CHECK-LABEL: define i8 @select_icmp_eq_pow2(6; CHECK-SAME: i8 [[X:%.*]]) {7; CHECK-NEXT:    [[SEL:%.*]] = and i8 [[X]], -58; CHECK-NEXT:    ret i8 [[SEL]]9;10  %and = and i8 %x, 411  %icmp = icmp eq i8 %and, 012  %xor = xor i8 %x, 413  %sel = select i1 %icmp, i8 %x, i8 %xor14  ret i8 %sel15}16 17define i8 @select_icmp_eq_pow2_flipped(i8 %x) {18; CHECK-LABEL: define i8 @select_icmp_eq_pow2_flipped(19; CHECK-SAME: i8 [[X:%.*]]) {20; CHECK-NEXT:    [[SEL:%.*]] = or i8 [[X]], 421; CHECK-NEXT:    ret i8 [[SEL]]22;23  %and = and i8 %x, 424  %icmp = icmp eq i8 %and, 025  %xor = xor i8 %x, 426  %sel = select i1 %icmp, i8 %xor, i8 %x27  ret i8 %sel28}29 30define i8 @select_icmp_eq_not_pow2(i8 %x) {31; CHECK-LABEL: define i8 @select_icmp_eq_not_pow2(32; CHECK-SAME: i8 [[X:%.*]]) {33; CHECK-NEXT:    [[AND:%.*]] = and i8 [[X]], 534; CHECK-NEXT:    [[ICMP:%.*]] = icmp eq i8 [[AND]], 035; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[X]], 536; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[ICMP]], i8 [[X]], i8 [[XOR]]37; CHECK-NEXT:    ret i8 [[SEL]]38;39  %and = and i8 %x, 540  %icmp = icmp eq i8 %and, 041  %xor = xor i8 %x, 542  %sel = select i1 %icmp, i8 %x, i8 %xor43  ret i8 %sel44}45 46define i8 @select_icmp_ne_pow2(i8 %x) {47; CHECK-LABEL: define i8 @select_icmp_ne_pow2(48; CHECK-SAME: i8 [[X:%.*]]) {49; CHECK-NEXT:    [[SEL:%.*]] = and i8 [[X]], -550; CHECK-NEXT:    ret i8 [[SEL]]51;52  %and = and i8 %x, 453  %icmp = icmp ne i8 %and, 054  %xor = xor i8 %x, 455  %sel = select i1 %icmp, i8 %xor, i8 %x56  ret i8 %sel57}58 59define i8 @select_icmp_ne_pow2_flipped(i8 %x) {60; CHECK-LABEL: define i8 @select_icmp_ne_pow2_flipped(61; CHECK-SAME: i8 [[X:%.*]]) {62; CHECK-NEXT:    [[SEL:%.*]] = or i8 [[X]], 463; CHECK-NEXT:    ret i8 [[SEL]]64;65  %and = and i8 %x, 466  %icmp = icmp ne i8 %and, 067  %xor = xor i8 %x, 468  %sel = select i1 %icmp, i8 %x, i8 %xor69  ret i8 %sel70}71 72define i8 @select_icmp_ne_not_pow2(i8 %x) {73; CHECK-LABEL: define i8 @select_icmp_ne_not_pow2(74; CHECK-SAME: i8 [[X:%.*]]) {75; CHECK-NEXT:    [[AND:%.*]] = and i8 [[X]], 576; CHECK-NEXT:    [[ICMP_NOT:%.*]] = icmp eq i8 [[AND]], 077; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[X]], 578; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[ICMP_NOT]], i8 [[X]], i8 [[XOR]]79; CHECK-NEXT:    ret i8 [[SEL]]80;81  %and = and i8 %x, 582  %icmp = icmp ne i8 %and, 083  %xor = xor i8 %x, 584  %sel = select i1 %icmp, i8 %xor, i8 %x85  ret i8 %sel86}87 88define i8 @select_icmp_slt_zero_smin(i8 %x) {89; CHECK-LABEL: define i8 @select_icmp_slt_zero_smin(90; CHECK-SAME: i8 [[X:%.*]]) {91; CHECK-NEXT:    [[SEL:%.*]] = or i8 [[X]], -12892; CHECK-NEXT:    ret i8 [[SEL]]93;94  %icmp = icmp slt i8 %x, 095  %xor = xor i8 %x, -12896  %sel = select i1 %icmp, i8 %x, i8 %xor97  ret i8 %sel98}99 100define i8 @select_icmp_slt_zero_smin_flipped(i8 %x) {101; CHECK-LABEL: define i8 @select_icmp_slt_zero_smin_flipped(102; CHECK-SAME: i8 [[X:%.*]]) {103; CHECK-NEXT:    [[SEL:%.*]] = and i8 [[X]], 127104; CHECK-NEXT:    ret i8 [[SEL]]105;106  %icmp = icmp slt i8 %x, 0107  %xor = xor i8 %x, -128108  %sel = select i1 %icmp, i8 %xor, i8 %x109  ret i8 %sel110}111 112define i8 @select_icmp_slt_not_zero(i8 %x) {113; CHECK-LABEL: define i8 @select_icmp_slt_not_zero(114; CHECK-SAME: i8 [[X:%.*]]) {115; CHECK-NEXT:    [[ICMP:%.*]] = icmp slt i8 [[X]], 1116; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[X]], -128117; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[ICMP]], i8 [[X]], i8 [[XOR]]118; CHECK-NEXT:    ret i8 [[SEL]]119;120  %icmp = icmp slt i8 %x, 1121  %xor = xor i8 %x, -128122  %sel = select i1 %icmp, i8 %x, i8 %xor123  ret i8 %sel124}125 126define i8 @select_icmp_slt_not_smin(i8 %x) {127; CHECK-LABEL: define i8 @select_icmp_slt_not_smin(128; CHECK-SAME: i8 [[X:%.*]]) {129; CHECK-NEXT:    [[ICMP:%.*]] = icmp slt i8 [[X]], 0130; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[X]], -127131; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[ICMP]], i8 [[X]], i8 [[XOR]]132; CHECK-NEXT:    ret i8 [[SEL]]133;134  %icmp = icmp slt i8 %x, 0135  %xor = xor i8 %x, -127136  %sel = select i1 %icmp, i8 %x, i8 %xor137  ret i8 %sel138}139 140define i8 @select_icmp_sgt_allones_smin(i8 %x) {141; CHECK-LABEL: define i8 @select_icmp_sgt_allones_smin(142; CHECK-SAME: i8 [[X:%.*]]) {143; CHECK-NEXT:    [[SEL:%.*]] = and i8 [[X]], 127144; CHECK-NEXT:    ret i8 [[SEL]]145;146  %icmp = icmp sgt i8 %x, 255147  %xor = xor i8 %x, -128148  %sel = select i1 %icmp, i8 %x, i8 %xor149  ret i8 %sel150}151 152define i8 @select_icmp_sgt_allones_smin_flipped(i8 %x) {153; CHECK-LABEL: define i8 @select_icmp_sgt_allones_smin_flipped(154; CHECK-SAME: i8 [[X:%.*]]) {155; CHECK-NEXT:    [[SEL:%.*]] = or i8 [[X]], -128156; CHECK-NEXT:    ret i8 [[SEL]]157;158  %icmp = icmp sgt i8 %x, 255159  %xor = xor i8 %x, -128160  %sel = select i1 %icmp, i8 %xor, i8 %x161  ret i8 %sel162}163 164define i8 @select_icmp_sgt_not_allones(i8 %x) {165; CHECK-LABEL: define i8 @select_icmp_sgt_not_allones(166; CHECK-SAME: i8 [[X:%.*]]) {167; CHECK-NEXT:    [[ICMP:%.*]] = icmp sgt i8 [[X]], -2168; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[X]], -128169; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[ICMP]], i8 [[X]], i8 [[XOR]]170; CHECK-NEXT:    ret i8 [[SEL]]171;172  %icmp = icmp sgt i8 %x, 254173  %xor = xor i8 %x, -128174  %sel = select i1 %icmp, i8 %x, i8 %xor175  ret i8 %sel176}177 178define i8 @select_icmp_sgt_not_smin(i8 %x) {179; CHECK-LABEL: define i8 @select_icmp_sgt_not_smin(180; CHECK-SAME: i8 [[X:%.*]]) {181; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[X]], -127182; CHECK-NEXT:    [[ICMP1:%.*]] = icmp slt i8 [[X]], 0183; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[ICMP1]], i8 [[XOR]], i8 [[X]]184; CHECK-NEXT:    ret i8 [[SEL]]185;186  %icmp = icmp sgt i8 %x, 255187  %xor = xor i8 %x, -127188  %sel = select i1 %icmp, i8 %x, i8 %xor189  ret i8 %sel190}191