49 lines · plain
1// RUN: llvm-tblgen -gen-subtarget -I %p/../../include %s 2>&1 | FileCheck %s2// RUN: not llvm-tblgen -gen-subtarget -I %p/../../include -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s3 4// Make sure that ReadAdvance entries with multiple writes are correctly5// handled.6 7include "llvm/Target/Target.td"8 9def MyTarget : Target;10 11let OutOperandList = (outs), InOperandList = (ins) in {12 def Inst_A : Instruction;13 def Inst_B : Instruction;14 def Inst_C : Instruction;15}16 17let CompleteModel = 0 in {18 def SchedModel_A: SchedMachineModel;19}20 21def Read_D : SchedRead;22def Read_E : SchedRead;23 24// CHECK: extern const llvm::MCReadAdvanceEntry MyTargetReadAdvanceTable[] = {25// CHECK-NEXT: {0, 0, 0}, // Invalid26// CHECK-NEXT: {0, 1, 1}, // #127// CHECK-NEXT: {0, 2, 3}, // #228// CHECK-NEXT: {0, 3, 2} // #329// CHECK-NEXT: }; // MyTargetReadAdvanceTable30 31let SchedModel = SchedModel_A in {32 def Write_A : SchedWriteRes<[]>;33 def Write_B : SchedWriteRes<[]>;34 def Write_C : SchedWriteRes<[]>;35 36 def : InstRW<[Write_A], (instrs Inst_A)>;37 def : InstRW<[Write_B], (instrs Inst_B)>;38 def : InstRW<[Write_C, Read_D], (instrs Inst_C)>;39 40 def : ReadAdvance<Read_D, 2, [Write_A, Write_B, Write_C], [-1, 1]>;41 42#ifdef ERROR143// ERROR1: error: assertion failed: cannot have more `tunables' than `writes'44 def : ReadAdvance<Read_E, 2, [Write_A, Write_B, Write_C], [1, 2, 3, 4]>;45#endif46}47 48def ProcessorA: ProcessorModel<"ProcessorA", SchedModel_A, []>;49