brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.8 KiB · 291963b Raw
224 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=aggressive-instcombine -S | FileCheck %s3 4define i8 @leaf1_and_aa(i8 %a)  {5; CHECK-LABEL: @leaf1_and_aa(6; CHECK-NEXT:    [[AND_AA:%.*]] = and i8 [[A:%.*]], [[A]]7; CHECK-NEXT:    ret i8 [[AND_AA]]8;9  %and.aa = and i8 %a, %a10  ret i8 %and.aa11}12 13define i8 @leaf1_and_a_false(i8 %a)  {14; CHECK-LABEL: @leaf1_and_a_false(15; CHECK-NEXT:    [[AND_AA:%.*]] = and i8 [[A:%.*]], 016; CHECK-NEXT:    ret i8 [[AND_AA]]17;18  %and.aa = and i8 %a, 019  ret i8 %and.aa20}21 22define i8 @leaf1_xor_aa(i8 %a)  {23; CHECK-LABEL: @leaf1_xor_aa(24; CHECK-NEXT:    [[XOR_AA:%.*]] = xor i8 [[A:%.*]], [[A]]25; CHECK-NEXT:    ret i8 [[XOR_AA]]26;27  %xor.aa = xor i8 %a, %a28  ret i8 %xor.aa29}30 31define i8 @leaf1_and_not(i8 %a)  {32; CHECK-LABEL: @leaf1_and_not(33; CHECK-NEXT:    [[NOT_A:%.*]] = xor i8 [[A:%.*]], -134; CHECK-NEXT:    [[AND:%.*]] = and i8 [[A]], [[NOT_A]]35; CHECK-NEXT:    ret i8 [[AND]]36;37  %not.a = xor i8 %a, -138  %and = and i8 %a, %not.a39  ret i8 %and40}41 42define i8 @leaf1_or_not(i8 %a)  {43; CHECK-LABEL: @leaf1_or_not(44; CHECK-NEXT:    [[NOT_A:%.*]] = xor i8 [[A:%.*]], -145; CHECK-NEXT:    [[OR:%.*]] = or i8 [[A]], [[NOT_A]]46; CHECK-NEXT:    ret i8 [[OR]]47;48  %not.a = xor i8 %a, -149  %or = or i8 %a, %not.a50  ret i8 %or51}52 53define i8 @leaf2_xor(i8 %a, i8 %b)  {54; CHECK-LABEL: @leaf2_xor(55; CHECK-NEXT:    [[AB:%.*]] = xor i8 [[A:%.*]], [[B:%.*]]56; CHECK-NEXT:    [[XOR_AB_A:%.*]] = xor i8 [[AB]], [[A]]57; CHECK-NEXT:    ret i8 [[XOR_AB_A]]58;59  %ab = xor i8 %a, %b60  %xor.ab.a = xor i8 %ab, %a61  ret i8 %xor.ab.a62}63 64define i8 @leaf2_xor_ret_const_false(i8 %a, i8 %b)  {65; CHECK-LABEL: @leaf2_xor_ret_const_false(66; CHECK-NEXT:    [[XOR_AB:%.*]] = xor i8 [[A:%.*]], [[B:%.*]]67; CHECK-NEXT:    [[XOR_AB_A:%.*]] = xor i8 [[XOR_AB]], [[A]]68; CHECK-NEXT:    [[XOR_AB_A_B:%.*]] = xor i8 [[XOR_AB_A]], [[B]]69; CHECK-NEXT:    ret i8 [[XOR_AB_A_B]]70;71  %xor.ab = xor i8 %a, %b72  %xor.ab.a = xor i8 %xor.ab, %a73  %xor.ab.a.b = xor i8 %xor.ab.a, %b74  ret i8 %xor.ab.a.b75}76 77define i8 @leaf2_or_ret_leaf(i8 %a, i8 %b)  {78; CHECK-LABEL: @leaf2_or_ret_leaf(79; CHECK-NEXT:    [[OR_AB:%.*]] = or i8 [[A:%.*]], [[B:%.*]]80; CHECK-NEXT:    [[AND_AB:%.*]] = and i8 [[A]], [[B]]81; CHECK-NEXT:    [[XOR1:%.*]] = xor i8 [[OR_AB]], [[AND_AB]]82; CHECK-NEXT:    [[XOR2:%.*]] = xor i8 [[XOR1]], [[A]]83; CHECK-NEXT:    ret i8 [[XOR2]]84;85  %or.ab = or i8 %a, %b86  %and.ab = and i8 %a, %b87  %xor1 = xor i8 %or.ab, %and.ab88  %xor2 = xor i8 %xor1, %a89  ret i8 %xor290}91 92define i8 @leaf2_or_ret_const_false(i8 %a, i8 %b)  {93; CHECK-LABEL: @leaf2_or_ret_const_false(94; CHECK-NEXT:    [[OR_AB:%.*]] = or i8 [[A:%.*]], [[B:%.*]]95; CHECK-NEXT:    [[AND_AB:%.*]] = and i8 [[A]], [[B]]96; CHECK-NEXT:    [[XOR1:%.*]] = xor i8 [[OR_AB]], [[AND_AB]]97; CHECK-NEXT:    [[XOR2:%.*]] = xor i8 [[XOR1]], [[A]]98; CHECK-NEXT:    [[XOR3:%.*]] = xor i8 [[XOR1]], [[B]]99; CHECK-NEXT:    ret i8 [[XOR3]]100;101  %or.ab = or i8 %a, %b102  %and.ab = and i8 %a, %b103  %xor1 = xor i8 %or.ab, %and.ab104  %xor2 = xor i8 %xor1, %a105  %xor3 = xor i8 %xor1, %b106  ret i8 %xor3107}108 109define i1 @leaf2_type_is_i1(i1 %a, i1 %b) {110; CHECK-LABEL: @leaf2_type_is_i1(111; CHECK-NEXT:    [[XOR_AB:%.*]] = xor i1 [[A:%.*]], [[B:%.*]]112; CHECK-NEXT:    [[NOT_A:%.*]] = xor i1 [[A]], true113; CHECK-NEXT:    [[XOR2:%.*]] = xor i1 [[NOT_A]], [[B]]114; CHECK-NEXT:    [[OR:%.*]] = or i1 [[XOR2]], [[XOR_AB]]115; CHECK-NEXT:    ret i1 [[OR]]116;117  %xor.ab = xor i1 %a, %b118  %not.a = xor i1 %a, true119  %xor2 = xor i1 %not.a, %b120  %or = or i1 %xor2, %xor.ab121  ret i1 %or122}123 124define i8 @leaf3_complex_ret_const_false(i8 %a, i8 %b, i8 %c)  {125; CHECK-LABEL: @leaf3_complex_ret_const_false(126; CHECK-NEXT:    [[AB:%.*]] = or i8 [[A:%.*]], [[B:%.*]]127; CHECK-NEXT:    [[ABC:%.*]] = or i8 [[AB]], [[C:%.*]]128; CHECK-NEXT:    [[NOT_ABC:%.*]] = xor i8 [[ABC]], -1129; CHECK-NEXT:    [[R:%.*]] = and i8 [[NOT_ABC]], [[A]]130; CHECK-NEXT:    ret i8 [[R]]131;132  %ab = or i8 %a, %b133  %abc = or i8 %ab, %c134  %not.abc = xor i8 %abc, -1135  %r = and i8 %not.abc, %a136  ret i8 %r137}138 139define i8 @leaf3_complex_ret_leaf(i8 %a, i8 %b, i8 %c) {140; CHECK-LABEL: @leaf3_complex_ret_leaf(141; CHECK-NEXT:    [[AB:%.*]] = and i8 [[A:%.*]], [[B:%.*]]142; CHECK-NEXT:    [[BC:%.*]] = and i8 [[B]], [[C:%.*]]143; CHECK-NEXT:    [[XOR_AC:%.*]] = xor i8 [[A]], [[C]]144; CHECK-NEXT:    [[OR:%.*]] = or i8 [[AB]], [[XOR_AC]]145; CHECK-NEXT:    [[NOT_BC:%.*]] = xor i8 [[BC]], -1146; CHECK-NEXT:    [[AND:%.*]] = and i8 [[NOT_BC]], [[A]]147; CHECK-NEXT:    [[COND:%.*]] = xor i8 [[AND]], [[OR]]148; CHECK-NEXT:    ret i8 [[COND]]149;150  %ab = and i8 %a, %b151  %bc = and i8 %b, %c152  %xor.ac = xor i8 %a, %c153  %or = or i8 %ab, %xor.ac154  %not.bc = xor i8 %bc, -1155  %and = and i8 %not.bc, %a156  %cond = xor i8 %and, %or157  ret i8 %cond158}159 160define i8 @leaf4_ret_const_true(i8 %a, i8 %b, i8 %c, i8 %d)  {161; CHECK-LABEL: @leaf4_ret_const_true(162; CHECK-NEXT:    [[BD:%.*]] = and i8 [[B:%.*]], [[D:%.*]]163; CHECK-NEXT:    [[NOT_BD:%.*]] = xor i8 [[BD]], -1164; CHECK-NEXT:    [[XOR_AB:%.*]] = xor i8 [[A:%.*]], [[B]]165; CHECK-NEXT:    [[OR1:%.*]] = or i8 [[XOR_AB]], [[C:%.*]]166; CHECK-NEXT:    [[OR2:%.*]] = or i8 [[OR1]], [[NOT_BD]]167; CHECK-NEXT:    [[OR3:%.*]] = or i8 [[OR2]], [[A]]168; CHECK-NEXT:    ret i8 [[OR3]]169;170  %bd = and i8 %b, %d171  %not.bd = xor i8 %bd, -1172  %xor.ab = xor i8 %a, %b173  %or1 = or i8 %xor.ab, %c174  %or2 = or i8 %or1, %not.bd175  %or3 = or i8 %or2, %a176  ret i8 %or3177}178 179define i8 @leaf4_ret_leaf(i8 %a, i8 %b, i8 %c, i8 %d)  {180; CHECK-LABEL: @leaf4_ret_leaf(181; CHECK-NEXT:    [[BD:%.*]] = and i8 [[B:%.*]], [[D:%.*]]182; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[BD]], [[C:%.*]]183; CHECK-NEXT:    [[NOT_BD:%.*]] = xor i8 [[XOR]], -1184; CHECK-NEXT:    [[XOR_AB:%.*]] = xor i8 [[A:%.*]], [[B]]185; CHECK-NEXT:    [[OR1:%.*]] = or i8 [[XOR_AB]], [[C]]186; CHECK-NEXT:    [[OR2:%.*]] = or i8 [[OR1]], [[NOT_BD]]187; CHECK-NEXT:    [[OR3:%.*]] = or i8 [[OR2]], [[A]]188; CHECK-NEXT:    [[AND:%.*]] = and i8 [[OR3]], [[B]]189; CHECK-NEXT:    ret i8 [[AND]]190;191  %bd = and i8 %b, %d192  %xor = xor i8 %bd, %c193  %not.bd = xor i8 %xor, -1194  %xor.ab = xor i8 %a, %b195  %or1 = or i8 %xor.ab, %c196  %or2 = or i8 %or1, %not.bd197  %or3 = or i8 %or2, %a198  %and = and i8 %or3, %b199  ret i8 %and200}201 202define i8 @leaf4_ret_leaf2(i8 %a, i8 %b, i8 %c, i8 %d)  {203; CHECK-LABEL: @leaf4_ret_leaf2(204; CHECK-NEXT:    [[BD:%.*]] = and i8 [[B:%.*]], [[D:%.*]]205; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[BD]], [[C:%.*]]206; CHECK-NEXT:    [[NOT_BD:%.*]] = xor i8 [[XOR]], -1207; CHECK-NEXT:    [[XOR_AB:%.*]] = xor i8 [[A:%.*]], [[B]]208; CHECK-NEXT:    [[OR1:%.*]] = or i8 [[XOR_AB]], [[C]]209; CHECK-NEXT:    [[OR2:%.*]] = or i8 [[OR1]], [[NOT_BD]]210; CHECK-NEXT:    [[OR3:%.*]] = or i8 [[OR2]], [[A]]211; CHECK-NEXT:    [[AND:%.*]] = and i8 [[OR3]], [[B]]212; CHECK-NEXT:    ret i8 [[AND]]213;214  %bd = and i8 %b, %d215  %xor = xor i8 %bd, %c216  %not.bd = xor i8 %xor, -1217  %xor.ab = xor i8 %a, %b218  %or1 = or i8 %xor.ab, %c219  %or2 = or i8 %or1, %not.bd220  %or3 = or i8 %or2, %a221  %and = and i8 %or3, %b222  ret i8 %and223}224