17 #ifndef LLVM_CODEGEN_MACHINEINSTRBUILDER_H
18 #define LLVM_CODEGEN_MACHINEINSTRBUILDER_H
65 unsigned SubReg = 0)
const {
66 assert((flags & 0x1) == 0 &&
67 "Passing in 'true' to addReg is forbidden! Use enums instead.");
99 unsigned char TargetFlags = 0)
const {
111 unsigned char TargetFlags = 0)
const {
117 unsigned char TargetFlags = 0)
const {
124 unsigned char TargetFlags = 0)
const {
131 unsigned char TargetFlags = 0)
const {
137 unsigned char TargetFlags = 0)
const {
144 unsigned char TargetFlags = 0)
const {
193 unsigned char TargetFlags = 0)
const {
273 return BuildMI(BB, MII, DL, MCID, DestReg);
277 return BuildMI(BB, MII, DL, MCID, DestReg);
310 return BuildMI(BB, MII, DL, MCID);
314 return BuildMI(BB, MII, DL, MCID);
335 return BuildMI(*BB, BB->
end(), DL, MCID, DestReg);
356 assert(Offset == 0 &&
"A direct address cannot have an offset.");
421 : MBB(BB), Begin(Pos.getInstrIterator()), End(Begin) {}
427 : MBB(BB), Begin(B.getInstrIterator()), End(E.getInstrIterator()) {
428 assert(B != E &&
"No instructions to bundle");
447 bool empty()
const {
return Begin == End; }
bool isInsideBundle() const
MachineBasicBlock::instr_iterator begin() const
Return an iterator to the first bundled instruction.
const MachineInstrBuilder & addMetadata(const MDNode *MD) const
const MachineFunction * getParent() const
static MachineOperand CreateMCSymbol(MCSymbol *Sym)
MIBundleBuilder(MachineBasicBlock &BB, MachineBasicBlock::iterator Pos)
MachineInstr * CreateMachineInstr(const MCInstrDesc &MCID, DebugLoc DL, bool NoImp=false)
MachineBasicBlock::instr_iterator getBundleEnd(MachineInstr *MI)
Return an iterator pointing beyond the bundle containing MI.
const GlobalValue * getGlobal() const
static MachineOperand CreateCImm(const ConstantInt *CI)
const MachineInstrBuilder & addSym(MCSymbol *Sym) const
static MachineOperand CreateJTI(unsigned Idx, unsigned char TargetFlags=0)
MachineInstr * operator->() const
unsigned getInternalReadRegState(bool B)
MDNode - a tuple of other values.
Instructions::iterator instr_iterator
MIBundleBuilder(MachineBasicBlock &BB, MachineBasicBlock::iterator B, MachineBasicBlock::iterator E)
Create a bundle from the sequence of instructions between B and E.
MachineInstrBuilder(MachineFunction &F, MachineInstr *I)
static MachineOperand CreateReg(unsigned Reg, bool isDef, bool isImp=false, bool isKill=false, bool isDead=false, bool isUndef=false, bool isEarlyClobber=false, unsigned SubReg=0, bool isDebug=false, bool isInternalRead=false)
#define llvm_unreachable(msg)
const MachineInstrBuilder & addDisp(const MachineOperand &Disp, int64_t off, unsigned char TargetFlags=0) const
static MachineOperand CreateRegMask(const uint32_t *Mask)
const MachineInstrBuilder & addImm(int64_t Val) const
MIBundleBuilder & prepend(MachineInstr *MI)
MachineBasicBlock & getMBB() const
Return a reference to the basic block containing this bundle.
void addMemOperand(MachineFunction &MF, MachineMemOperand *MO)
unsigned getUndefRegState(bool B)
MachineBasicBlock::instr_iterator end() const
Return an iterator beyond the last bundled instruction.
unsigned getKillRegState(bool B)
unsigned getDebugRegState(bool B)
unsigned getDeadRegState(bool B)
unsigned getDefRegState(bool B)
bundle_iterator< MachineInstr, instr_iterator > iterator
unsigned getTargetFlags() const
const MachineInstrBuilder & setMemRefs(MachineInstr::mmo_iterator b, MachineInstr::mmo_iterator e) const
static MachineOperand CreateCPI(unsigned Idx, int Offset, unsigned char TargetFlags=0)
static MachineOperand CreateFPImm(const ConstantFP *CFP)
static MachineOperand CreateBA(const BlockAddress *BA, int64_t Offset, unsigned char TargetFlags=0)
void setFlag(MIFlag Flag)
setFlag - Set a MI flag.
const MachineInstrBuilder & addTargetIndex(unsigned Idx, int64_t Offset=0, unsigned char TargetFlags=0) const
const MachineInstrBuilder & setMIFlags(unsigned Flags) const
static MachineOperand CreateGA(const GlobalValue *GV, int64_t Offset, unsigned char TargetFlags=0)
static MachineOperand CreateTargetIndex(unsigned Idx, int64_t Offset, unsigned char TargetFlags=0)
int64_t getOffset() const
MachineInstrBuilder BuildMI(MachineFunction &MF, DebugLoc DL, const MCInstrDesc &MCID)
static MachineOperand CreateMetadata(const MDNode *Meta)
Class for constant integers.
void addOperand(MachineFunction &MF, const MachineOperand &Op)
void setFlags(unsigned flags)
const MachineInstrBuilder & addJumpTableIndex(unsigned Idx, unsigned char TargetFlags=0) const
const MachineInstrBuilder & addCImm(const ConstantInt *Val) const
const MachineInstrBuilder & addFrameIndex(int Idx) const
MIBundleBuilder & insert(MachineBasicBlock::instr_iterator I, MachineInstr *MI)
static MachineOperand CreateES(const char *SymName, unsigned char TargetFlags=0)
const MachineInstrBuilder & addGlobalAddress(const GlobalValue *GV, int64_t Offset=0, unsigned char TargetFlags=0) const
MachineOperandType getType() const
void copyImplicitOps(MachineFunction &MF, const MachineInstr *MI)
static MachineOperand CreateMBB(MachineBasicBlock *MBB, unsigned char TargetFlags=0)
const MachineInstrBuilder & addExternalSymbol(const char *FnName, unsigned char TargetFlags=0) const
const MachineInstrBuilder & addConstantPoolIndex(unsigned Idx, int Offset=0, unsigned char TargetFlags=0) const
const MachineInstrBuilder & addMemOperand(MachineMemOperand *MMO) const
static MachineOperand CreateImm(int64_t Val)
unsigned getImplRegState(bool B)
const MachineInstrBuilder & copyImplicitOps(const MachineInstr *OtherMI)
Copy all the implicit operands from OtherMI onto this one.
instr_iterator insert(instr_iterator I, MachineInstr *M)
const MachineInstrBuilder & addFPImm(const ConstantFP *Val) const
MIBundleBuilder & append(MachineInstr *MI)
const MachineInstrBuilder & addMBB(MachineBasicBlock *MBB, unsigned char TargetFlags=0) const
static const Function * getParent(const Value *V)
const MachineInstrBuilder & addOperand(const MachineOperand &MO) const
const MachineInstrBuilder & setMIFlag(MachineInstr::MIFlag Flag) const
const MachineInstrBuilder & addBlockAddress(const BlockAddress *BA, int64_t Offset=0, unsigned char TargetFlags=0) const
const MachineInstrBuilder & addRegMask(const uint32_t *Mask) const
const MachineInstrBuilder & addReg(unsigned RegNo, unsigned flags=0, unsigned SubReg=0) const
static MachineOperand CreateFI(int Idx)
void setMemRefs(mmo_iterator NewMemRefs, mmo_iterator NewMemRefsEnd)
MIBundleBuilder(MachineInstr *MI)
Address of a global value.