brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · c1cadb3 Raw
65 lines · plain
1// RUN: llvm-tblgen -gen-subtarget -I %p/../../include %s -o - | FileCheck %s2 3include "llvm/Target/Target.td"4 5def TestTargetInstrInfo : InstrInfo;6 7def TestTarget : Target {8  let InstructionSet = TestTargetInstrInfo;9}10 11def FeatureFoo : SubtargetFeature<"foo", "HasFoo", "true", "enable foo">;12 13def ResX0 : ProcResource<1>;14 15let OutOperandList = (outs), InOperandList = (ins) in16def Inst_A : Instruction;17 18def SchedModel_A: SchedMachineModel {19  let CompleteModel = false;20}21 22let SchedModel = SchedModel_A in {23def SchedWriteResA : SchedWriteRes<[ResX0]> {24  let Latency = 2;25}26def SchedWriteResB : SchedWriteRes<[ResX0]> {27  let Latency = 4;28}29 30// Check SchedPredicate with subtarget feature.31def FeatureFooPred : FeatureSchedPredicate<FeatureFoo>;32 33def Variant : SchedWriteVariant<[34  SchedVar<FeatureFooPred, [SchedWriteResA]>,35  SchedVar<NoSchedPred,    [SchedWriteResB]>36]>;37 38def : InstRW<[Variant], (instrs Inst_A)>;39}40 41def ProcessorA: ProcessorModel<"ProcessorA", SchedModel_A, []>;42 43// CHECK:  unsigned resolveVariantSchedClassImpl(unsigned SchedClass,44// CHECK-NEXT:      const MCInst *MI, const MCInstrInfo *MCII, const MCSubtargetInfo &STI, unsigned CPUID)45// CHECK:  case {{.*}}: // Inst_A46// CHECK-NEXT:   if (CPUID == {{.*}}) { // SchedModel_A47// CHECK-NEXT:     if (STI.hasFeature(TestTarget::FeatureFoo))48// CHECK-NEXT:       return {{.*}}; // SchedWriteResA49// CHECK-NEXT:     return {{.*}}; // SchedWriteResB50 51// CHECK: unsigned resolveVariantSchedClass(unsigned SchedClass,52// CHECK-NEXT:    const MCInst *MI, const MCInstrInfo *MCII,53// CHECK-NEXT:    unsigned CPUID) const override {54// CHECK-NEXT:   return TestTarget_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);55// CHECK-NEXT: }56 57// CHECK: unsigned TestTargetGenSubtargetInfo58// CHECK-NEXT: ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {59// CHECK-NEXT:   switch (SchedClass) {60// CHECK-NEXT:   case {{.*}}: // Inst_A61// CHECK-NEXT:     if (SchedModel->getProcessorID() == {{.*}}) { // SchedModel_A62// CHECK-NEXT:       if (this->hasFeature(TestTarget::FeatureFoo))63// CHECK-NEXT:         return {{.*}}; // SchedWriteResA64// CHECK-NEXT:       return {{.*}}; // SchedWriteResB65