2016-09-08 23:50:52 +08:00
|
|
|
// RUN: llvm-tblgen -gen-asm-matcher -I %p/../../include %s | FileCheck %s
|
|
|
|
|
2017-05-15 18:13:07 +08:00
|
|
|
// Check that specifying AsmVariant works correctly
|
2016-09-08 23:50:52 +08:00
|
|
|
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
|
|
|
|
def ArchInstrInfo : InstrInfo { }
|
|
|
|
|
|
|
|
def FooAsmParserVariant : AsmParserVariant {
|
|
|
|
let Variant = 0;
|
|
|
|
let Name = "Foo";
|
|
|
|
}
|
|
|
|
|
|
|
|
def BarAsmParserVariant : AsmParserVariant {
|
|
|
|
let Variant = 1;
|
|
|
|
let Name = "Bar";
|
|
|
|
}
|
|
|
|
|
|
|
|
def Arch : Target {
|
|
|
|
let InstructionSet = ArchInstrInfo;
|
|
|
|
let AssemblyParserVariants = [FooAsmParserVariant, BarAsmParserVariant];
|
|
|
|
}
|
|
|
|
|
|
|
|
def Reg : Register<"reg">;
|
|
|
|
|
|
|
|
def RegClass : RegisterClass<"foo", [i32], 0, (add Reg)>;
|
|
|
|
|
|
|
|
def foo : Instruction {
|
|
|
|
let Size = 2;
|
|
|
|
let OutOperandList = (outs);
|
|
|
|
let InOperandList = (ins);
|
|
|
|
let AsmString = "foo";
|
|
|
|
let AsmVariantName = "Foo";
|
2017-07-07 13:50:45 +08:00
|
|
|
let Namespace = "Arch";
|
2016-09-08 23:50:52 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
def BarAlias : InstAlias<"bar", (foo)> {
|
|
|
|
string AsmVariantName = "Bar";
|
|
|
|
}
|
|
|
|
|
|
|
|
// CHECK: static const MatchEntry MatchTable0[] = {
|
|
|
|
// CHECK-NEXT: /* foo */, Arch::foo
|
|
|
|
// CHECK-NEXT: };
|
|
|
|
|
|
|
|
// CHECK: static const MatchEntry MatchTable1[] = {
|
|
|
|
// CHECK-NEXT: /* bar */, Arch::foo
|
|
|
|
// CHECK-NEXT: };
|