brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.3 KiB · a8488ca Raw
167 lines · plain
1// RUN: llvm-tblgen -I %p/../../../include -gen-global-isel-combiner \2// RUN:     -combiners=MyCombiner %s | \3// RUN: FileCheck %s4 5include "llvm/Target/Target.td"6include "llvm/Target/GlobalISel/Combine.td"7 8def MyTargetISA : InstrInfo;9def MyTarget : Target { let InstructionSet = MyTargetISA; }10 11def OneMatchOneApply : GICombineRule<12  (defs root:$a),13  (match (G_FABS $a, $b), "return MATCH0;"),14  (apply "APPLY0")>;15 16def TwoMatchTwoApply : GICombineRule<17  (defs root:$a),18  (match (G_FNEG $a, $b), "return MATCH0;", "return MATCH1;"),19  (apply "APPLY0", "APPLY1")>;20 21def TwoMatchNoApply : GICombineRule<22  (defs root:$a),23  (match (G_STORE $x, $y):$a, "return MATCH0;", "return MATCH1;"),24  (apply (GIEraseRoot))>;25 26def NoMatchTwoApply : GICombineRule<27  (defs root:$a),28  (match (G_SEXT $a, $y)),29  (apply "APPLY0", "APPLY1")>;30 31def CombineCXXOrder : GICombineRule<32  (defs root:$a),33  (combine (G_ZEXT $a, $y), "A0", "return A1")>;34 35def MyCombiner: GICombiner<"GenMyCombiner", [36  OneMatchOneApply,37  TwoMatchTwoApply,38  TwoMatchNoApply,39  NoMatchTwoApply,40  CombineCXXOrder41]>;42 43// CHECK:      bool GenMyCombiner::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const {44// CHECK-NEXT:   switch (PredicateID) {45// CHECK-NEXT:   case GICXXPred_MI_Predicate_GICombiner0: {46// CHECK-NEXT:     return MATCH0;47// CHECK-NEXT:   }48// CHECK-NEXT:   case GICXXPred_MI_Predicate_GICombiner1: {49// CHECK-NEXT:     return MATCH1;50// CHECK-NEXT:   }51// CHECK-NEXT:   }52// CHECK-NEXT:   llvm_unreachable("Unknown predicate");53// CHECK-NEXT:   return false;54// CHECK-NEXT: }55 56// CHECK:      bool GenMyCombiner::runCustomAction(unsigned ApplyID, const MatcherState &State, NewMIVector &OutMIs) const {57// CHECK-NEXT:   Helper.getBuilder().setInstrAndDebugLoc(*State.MIs[0]);58// CHECK-NEXT:   switch(ApplyID) {59// CHECK-NEXT:   case GICXXCustomAction_GICombiner0:{60// CHECK-NEXT:     // Match Patterns61// CHECK-NEXT:     if(![&](){return MATCH0;}()) {62// CHECK-NEXT:       return false;63// CHECK-NEXT:     }64// CHECK-NEXT:     // Apply Patterns65// CHECK-NEXT:     APPLY066// CHECK-NEXT:     return true;67// CHECK-NEXT:   }68// CHECK-NEXT:   case GICXXCustomAction_GICombiner1:{69// CHECK-NEXT:     // Match Patterns70// CHECK-NEXT:     if(![&](){return MATCH0;}()) {71// CHECK-NEXT:       return false;72// CHECK-NEXT:     }73// CHECK-NEXT:     if(![&](){return MATCH1;}()) {74// CHECK-NEXT:       return false;75// CHECK-NEXT:     }76// CHECK-NEXT:     // Apply Patterns77// CHECK-NEXT:     APPLY078// CHECK-NEXT:     APPLY179// CHECK-NEXT:     return true;80// CHECK-NEXT:   }81// CHECK-NEXT:   case GICXXCustomAction_GICombiner2:{82// CHECK-NEXT:     // Apply Patterns83// CHECK-NEXT:     APPLY084// CHECK-NEXT:     APPLY185// CHECK-NEXT:     return true;86// CHECK-NEXT:   }87// CHECK-NEXT:   case GICXXCustomAction_GICombiner3:{88// CHECK-NEXT:     // Apply Patterns89// CHECK-NEXT:     A090// CHECK-NEXT:     return A191// CHECK-NEXT:     return true;92// CHECK-NEXT:   }93// CHECK-NEXT:   }94// CHECK-NEXT:   llvm_unreachable("Unknown Apply Action");95// CHECK-NEXT: }96 97// CHECK:      const uint8_t *GenMyCombiner::getMatchTable() const {98// CHECK-NEXT:   constexpr static uint8_t MatchTable0[] = {99// CHECK-NEXT:      /*   0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(104), GIMT_Encode2(216), /*)*//*default:*//*Label 5*/ GIMT_Encode4(524),100// CHECK-NEXT:      /* 10 */ /*TargetOpcode::G_STORE*//*Label 0*/ GIMT_Encode4(458), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),101// CHECK-NEXT:      /* 182 */ /*TargetOpcode::G_SEXT*//*Label 1*/ GIMT_Encode4(476), GIMT_Encode4(0),102// CHECK-NEXT:      /* 190 */ /*TargetOpcode::G_ZEXT*//*Label 2*/ GIMT_Encode4(488), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),103// CHECK-NEXT:      /* 418 */ /*TargetOpcode::G_FNEG*//*Label 3*/ GIMT_Encode4(500), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),104// CHECK-NEXT:      /* 454 */ /*TargetOpcode::G_FABS*//*Label 4*/ GIMT_Encode4(512),105// CHECK-NEXT:      /* 458 */ // Label 0: @458106// CHECK-NEXT:      /* 458 */ GIM_Try, /*On fail goto*//*Label 6*/ GIMT_Encode4(475), // Rule ID 2 //107// CHECK-NEXT:      /* 463 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),108// CHECK-NEXT:      /* 466 */ // MIs[0] x109// CHECK-NEXT:      /* 466 */ // No operand predicates110// CHECK-NEXT:      /* 466 */ // MIs[0] y111// CHECK-NEXT:      /* 466 */ // No operand predicates112// CHECK-NEXT:      /* 466 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner0),113// CHECK-NEXT:      /* 470 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner1),114// CHECK-NEXT:      /* 474 */ // Combiner Rule #2: TwoMatchNoApply115// CHECK-NEXT:      /* 474 */ GIR_EraseRootFromParent_Done,116// CHECK-NEXT:      /* 475 */ // Label 6: @475117// CHECK-NEXT:      /* 475 */ GIM_Reject,118// CHECK-NEXT:      /* 476 */ // Label 1: @476119// CHECK-NEXT:      /* 476 */ GIM_Try, /*On fail goto*//*Label 7*/ GIMT_Encode4(487), // Rule ID 3 //120// CHECK-NEXT:      /* 481 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),121// CHECK-NEXT:      /* 484 */ // MIs[0] a122// CHECK-NEXT:      /* 484 */ // No operand predicates123// CHECK-NEXT:      /* 484 */ // MIs[0] y124// CHECK-NEXT:      /* 484 */ // No operand predicates125// CHECK-NEXT:      /* 484 */ // Combiner Rule #3: NoMatchTwoApply126// CHECK-NEXT:      /* 484 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner2),127// CHECK-NEXT:      /* 487 */ // Label 7: @487128// CHECK-NEXT:      /* 487 */ GIM_Reject,129// CHECK-NEXT:      /* 488 */ // Label 2: @488130// CHECK-NEXT:      /* 488 */ GIM_Try, /*On fail goto*//*Label 8*/ GIMT_Encode4(499), // Rule ID 4 //131// CHECK-NEXT:      /* 493 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),132// CHECK-NEXT:      /* 496 */ // MIs[0] a133// CHECK-NEXT:      /* 496 */ // No operand predicates134// CHECK-NEXT:      /* 496 */ // MIs[0] y135// CHECK-NEXT:      /* 496 */ // No operand predicates136// CHECK-NEXT:      /* 496 */ // Combiner Rule #4: CombineCXXOrder137// CHECK-NEXT:      /* 496 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner3),138// CHECK-NEXT:      /* 499 */ // Label 8: @499139// CHECK-NEXT:      /* 499 */ GIM_Reject,140// CHECK-NEXT:      /* 500 */ // Label 3: @500141// CHECK-NEXT:      /* 500 */ GIM_Try, /*On fail goto*//*Label 9*/ GIMT_Encode4(511), // Rule ID 1 //142// CHECK-NEXT:      /* 505 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),143// CHECK-NEXT:      /* 508 */ // MIs[0] a144// CHECK-NEXT:      /* 508 */ // No operand predicates145// CHECK-NEXT:      /* 508 */ // MIs[0] b146// CHECK-NEXT:      /* 508 */ // No operand predicates147// CHECK-NEXT:      /* 508 */ // Combiner Rule #1: TwoMatchTwoApply148// CHECK-NEXT:      /* 508 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),149// CHECK-NEXT:      /* 511 */ // Label 9: @511150// CHECK-NEXT:      /* 511 */ GIM_Reject,151// CHECK-NEXT:      /* 512 */ // Label 4: @512152// CHECK-NEXT:      /* 512 */ GIM_Try, /*On fail goto*//*Label 10*/ GIMT_Encode4(523), // Rule ID 0 //153// CHECK-NEXT:      /* 517 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule0Enabled),154// CHECK-NEXT:      /* 520 */ // MIs[0] a155// CHECK-NEXT:      /* 520 */ // No operand predicates156// CHECK-NEXT:      /* 520 */ // MIs[0] b157// CHECK-NEXT:      /* 520 */ // No operand predicates158// CHECK-NEXT:      /* 520 */ // Combiner Rule #0: OneMatchOneApply159// CHECK-NEXT:      /* 520 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),160// CHECK-NEXT:      /* 523 */ // Label 10: @523161// CHECK-NEXT:      /* 523 */ GIM_Reject,162// CHECK-NEXT:      /* 524 */ // Label 5: @524163// CHECK-NEXT:      /* 524 */ GIM_Reject,164// CHECK-NEXT:      /* 525 */ }; // Size: 525 bytes165// CHECK-NEXT:   return MatchTable0;166// CHECK-NEXT: }167