brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 3d2a1dd Raw
157 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 InstTest0 : GICombineRule<12  (defs root:$a),13  (match (G_BUILD_VECTOR $a, $b, $c, $d)),14  (apply [{ APPLY }])>;15 16def InstTest1 : GICombineRule<17  (defs root:$a),18  (match (G_BUILD_VECTOR $a, $b)),19  (apply [{ APPLY }])>;20 21def InstTest2 : GICombineRule<22  (defs root:$a),23  (match (G_UNMERGE_VALUES $a, $b)),24  (apply [{ APPLY }])>;25 26def InstTest3 : GICombineRule<27  (defs root:$a),28  (match (G_UNMERGE_VALUES $a, $b, $c, $d)),29  (apply [{ APPLY }])>;30 31def VariadicTypeTestCxx : GICombineRule<32  (defs root:$a),33  (match (G_BUILD_VECTOR $a, GIVariadic<2, 4>:$b)),34  (apply [{ ${b} }])>;35 36def VariadicTypeTestReuse : GICombineRule<37  (defs root:$a),38  (match (G_BUILD_VECTOR $a, $c, GIVariadic<2, 4>:$b)),39  (apply (G_MERGE_VALUES $a, $b, $c))>;40 41def MyCombiner: GICombiner<"GenMyCombiner", [42  InstTest0,43  InstTest1,44  InstTest2,45  InstTest3,46  VariadicTypeTestCxx,47  VariadicTypeTestReuse48]>;49 50// CHECK:     bool GenMyCombiner::runCustomAction(unsigned ApplyID, const MatcherState &State, NewMIVector &OutMIs) const {51// CHECK-NEXT:   Helper.getBuilder().setInstrAndDebugLoc(*State.MIs[0]);52// CHECK-NEXT:   switch(ApplyID) {53// CHECK-NEXT:   case GICXXCustomAction_GICombiner0:{54// CHECK-NEXT:     // Apply Patterns55// CHECK-NEXT:     APPLY56// CHECK-NEXT:     return true;57// CHECK-NEXT:   }58// CHECK-NEXT:   case GICXXCustomAction_GICombiner1:{59// CHECK-NEXT:     // Apply Patterns60// CHECK-NEXT:     getRemainingOperands(*State.MIs[0], 1)61// CHECK-NEXT:     return true;62// CHECK-NEXT:   }63// CHECK-NEXT:   }64// CHECK-NEXT:   llvm_unreachable("Unknown Apply Action");65// CHECK-NEXT: }66 67// CHECK:      const uint8_t *GenMyCombiner::getMatchTable() const {68// CHECK-NEXT:   constexpr static uint8_t MatchTable0[] = {69// CHECK-NEXT:     GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2({{[0-9]+}}), GIMT_Encode2({{[0-9]+}}), /*)*//*default:*//*Label 2*/ GIMT_Encode4({{[0-9]+}}),70// CHECK-NEXT:     /*TargetOpcode::G_UNMERGE_VALUES*//*Label 0*/ GIMT_Encode4({{[0-9]+}}), GIMT_Encode4(0), GIMT_Encode4(0),71// CHECK-NEXT:     /*TargetOpcode::G_BUILD_VECTOR*//*Label 1*/ GIMT_Encode4({{[0-9]+}}),72// CHECK-NEXT:     // Label 0: @{{[0-9]+}}73// CHECK-NEXT:     GIM_Try, /*On fail goto*//*Label 3*/ GIMT_Encode4({{[0-9]+}}), // Rule ID 2 //74// CHECK-NEXT:       GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),75// CHECK-NEXT:       GIM_CheckNumOperands, /*MI*/0, /*Expected*/2,76// CHECK-NEXT:       // MIs[0] a77// CHECK-NEXT:       // No operand predicates78// CHECK-NEXT:       // MIs[0] b79// CHECK-NEXT:       // No operand predicates80// CHECK-NEXT:       // Combiner Rule #2: InstTest281// CHECK-NEXT:       GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),82// CHECK-NEXT:     // Label 3: @{{[0-9]+}}83// CHECK-NEXT:     GIM_Try, /*On fail goto*//*Label 4*/ GIMT_Encode4({{[0-9]+}}), // Rule ID 3 //84// CHECK-NEXT:       GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),85// CHECK-NEXT:       GIM_CheckNumOperands, /*MI*/0, /*Expected*/4,86// CHECK-NEXT:       // MIs[0] a87// CHECK-NEXT:       // No operand predicates88// CHECK-NEXT:       // MIs[0] b89// CHECK-NEXT:       // No operand predicates90// CHECK-NEXT:       // MIs[0] c91// CHECK-NEXT:       // No operand predicates92// CHECK-NEXT:       // MIs[0] d93// CHECK-NEXT:       // No operand predicates94// CHECK-NEXT:       // Combiner Rule #3: InstTest395// CHECK-NEXT:       GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),96// CHECK-NEXT:     // Label 4: @{{[0-9]+}}97// CHECK-NEXT:     GIM_Reject,98// CHECK-NEXT:     // Label 1: @{{[0-9]+}}99// CHECK-NEXT:     GIM_Try, /*On fail goto*//*Label 5*/ GIMT_Encode4({{[0-9]+}}), // Rule ID 1 //100// CHECK-NEXT:       GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),101// CHECK-NEXT:       GIM_CheckNumOperands, /*MI*/0, /*Expected*/2,102// CHECK-NEXT:       // MIs[0] a103// CHECK-NEXT:       // No operand predicates104// CHECK-NEXT:       // MIs[0] b105// CHECK-NEXT:       // No operand predicates106// CHECK-NEXT:       // Combiner Rule #1: InstTest1107// CHECK-NEXT:       GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),108// CHECK-NEXT:     // Label 5: @{{[0-9]+}}109// CHECK-NEXT:     GIM_Try, /*On fail goto*//*Label 6*/ GIMT_Encode4({{[0-9]+}}), // Rule ID 4 //110// CHECK-NEXT:       GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),111// CHECK-NEXT:       GIM_CheckNumOperandsGE, /*MI*/0, /*Expected*/3,112// CHECK-NEXT:       GIM_CheckNumOperandsLE, /*MI*/0, /*Expected*/5,113// CHECK-NEXT:       // MIs[0] a114// CHECK-NEXT:       // No operand predicates115// CHECK-NEXT:       // MIs[0] b116// CHECK-NEXT:       // No operand predicates117// CHECK-NEXT:       // Combiner Rule #4: VariadicTypeTestCxx118// CHECK-NEXT:       GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),119// CHECK-NEXT:     // Label 6: @{{[0-9]+}}120// CHECK-NEXT:     GIM_Try, /*On fail goto*//*Label 7*/ GIMT_Encode4({{[0-9]+}}), // Rule ID 5 //121// CHECK-NEXT:       GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule5Enabled),122// CHECK-NEXT:       GIM_CheckNumOperandsGE, /*MI*/0, /*Expected*/4,123// CHECK-NEXT:       GIM_CheckNumOperandsLE, /*MI*/0, /*Expected*/6,124// CHECK-NEXT:       // MIs[0] a125// CHECK-NEXT:       // No operand predicates126// CHECK-NEXT:       // MIs[0] c127// CHECK-NEXT:       // No operand predicates128// CHECK-NEXT:       // MIs[0] b129// CHECK-NEXT:       // No operand predicates130// CHECK-NEXT:       // Combiner Rule #5: VariadicTypeTestReuse131// CHECK-NEXT:       GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::G_MERGE_VALUES),132// CHECK-NEXT:       GIR_RootToRootCopy, /*OpIdx*/0, // a133// CHECK-NEXT:       GIR_CopyRemaining, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // b134// CHECK-NEXT:       GIR_RootToRootCopy, /*OpIdx*/1, // c135// CHECK-NEXT:       GIR_EraseRootFromParent_Done,136// CHECK-NEXT:     // Label 7: @{{[0-9]+}}137// CHECK-NEXT:     GIM_Try, /*On fail goto*//*Label 8*/ GIMT_Encode4({{[0-9]+}}), // Rule ID 0 //138// CHECK-NEXT:       GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule0Enabled),139// CHECK-NEXT:       GIM_CheckNumOperands, /*MI*/0, /*Expected*/4,140// CHECK-NEXT:       // MIs[0] a141// CHECK-NEXT:       // No operand predicates142// CHECK-NEXT:       // MIs[0] b143// CHECK-NEXT:       // No operand predicates144// CHECK-NEXT:       // MIs[0] c145// CHECK-NEXT:       // No operand predicates146// CHECK-NEXT:       // MIs[0] d147// CHECK-NEXT:       // No operand predicates148// CHECK-NEXT:       // Combiner Rule #0: InstTest0149// CHECK-NEXT:       GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),150// CHECK-NEXT:     // Label 8: @{{[0-9]+}}151// CHECK-NEXT:     GIM_Reject,152// CHECK-NEXT:     // Label 2: @{{[0-9]+}}153// CHECK-NEXT:     GIM_Reject,154// CHECK-NEXT:     }; // Size: 128 bytes155// CHECK-NEXT:   return MatchTable0;156// CHECK-NEXT: }157