forked from OSchip/llvm-project
38 lines
923 B
TableGen
38 lines
923 B
TableGen
// RUN: llvm-tblgen -gen-pseudo-lowering -I %p/../../include %s | FileCheck %s
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
def TestTargetInstrInfo : InstrInfo;
|
|
|
|
def TestTarget : Target {
|
|
let InstructionSet = TestTargetInstrInfo;
|
|
}
|
|
|
|
def REG : Register<"REG">;
|
|
def GPR : RegisterClass<"TestTarget", [i32], 32, (add REG)>;
|
|
|
|
class SysReg<bits<12> op> {
|
|
bits<12> Encoding = op;
|
|
}
|
|
def SR : SysReg<0b111100001111>;
|
|
|
|
class Pseudo<dag outs, dag ins, list<dag> pattern>
|
|
: Instruction {
|
|
dag OutOperandList = outs;
|
|
dag InOperandList = ins;
|
|
let Pattern = pattern;
|
|
let isPseudo = 1;
|
|
}
|
|
|
|
def INSTR : Instruction {
|
|
let OutOperandList = (outs GPR:$rd);
|
|
let InOperandList = (ins i32imm:$val);
|
|
let Pattern = [];
|
|
}
|
|
|
|
def PSEUDO : Pseudo<(outs GPR:$rd), (ins),
|
|
[(set GPR:$rd, (i32 SR.Encoding))]>,
|
|
PseudoInstExpansion<(INSTR GPR:$rd, SR.Encoding)>;
|
|
|
|
// CHECK: .addOperand(MCOperand::createImm(3855));
|