| // RUN: llvm-tblgen -gen-dfa-packetizer -I %p/../../include %s | FileCheck %s | |
| include "llvm/Target/Target.td" | |
| def TestTarget : Target; | |
| def TestSchedModel : SchedMachineModel { | |
| let CompleteModel = 0; | |
| } | |
| def TestProcessor1 : ProcessorModel<"testprocessor1", TestSchedModel, []>; | |
| def FU0 : FuncUnit; | |
| def FU1 : FuncUnit; | |
| def OP0 : InstrItinClass; | |
| def OP1 : InstrItinClass; | |
| def Itin { | |
| list<InstrItinData> ItinList = [ | |
| InstrItinData<OP0, [InstrStage<1, [FU0]>]>, | |
| InstrItinData<OP1, [InstrStage<1, [FU1]>]>, | |
| ]; | |
| } | |
| // CHECK: int TestTargetGetResourceIndex(unsigned ProcID) { | |
| // CHECK-NEXT: static const unsigned TestTargetProcIdToProcResourceIdxTable[][2] = { | |
| // CHECK-NEXT: { 2, 1 }, // TestItinerariesModel | |
| // CHECK-NEXT: }; | |
| // CHECK-NEXT: auto It = llvm::lower_bound(TestTargetProcIdToProcResourceIdxTable, ProcID, | |
| // CHECK-NEXT: [](const unsigned LHS[], unsigned Val) { return LHS[0] < Val; }); | |
| // CHECK-NEXT: assert(*It[0] == ProcID); | |
| // CHECK-NEXT: return (*It)[1]; | |
| // CHECK-NEXT: } | |
| // CHECK: unsigned Index = TestTargetGetResourceIndex(IID->SchedModel.ProcID); | |
| def TestItineraries: ProcessorItineraries<[], [], Itin.ItinList>; | |
| def TestProcessor2 : Processor<"testprocessor2", TestItineraries, []>; |