63 const char *getPassName()
const {
64 return "Hexagon Expand Predicate Spill Code";
73 bool HexagonExpandPredSpillCode::runOnMachineFunction(
MachineFunction &Fn) {
79 MBBb != MBBe; ++MBBb) {
86 if (Opc == Hexagon::STriw_pred) {
89 assert(FP == QTM.getRegisterInfo()->getFrameRegister() &&
90 "Not a Frame Pointer, Nor a Spill Slot");
94 assert(Hexagon::PredRegsRegClass.contains(SrcReg) &&
95 "Not a predicate register");
107 TII->get(Hexagon::STriw_indexed))
116 TII->get(Hexagon::STriw_indexed))
125 TII->get(Hexagon::STriw_indexed)).
130 }
else if (Opc == Hexagon::LDriw_pred) {
133 assert(Hexagon::PredRegsRegClass.contains(DstReg) &&
134 "Not a predicate register");
136 assert(FP == QTM.getRegisterInfo()->getFrameRegister() &&
137 "Not a Frame Pointer, Nor a Spill Slot");
187 const char *
Name =
"Hexagon Expand Predicate Spill Code";
189 &HexagonExpandPredSpillCode::ID,
200 return new HexagonExpandPredSpillCode(TM);
instr_iterator erase(instr_iterator I)
static PassRegistry * getPassRegistry()
#define HEXAGON_RESERVED_REG_1
#define HEXAGON_RESERVED_REG_2
const HexagonInstrInfo * TII
bool isImm() const
isImm - Tests if this is a MO_Immediate operand.
ID
LLVM Calling Convention Representation.
const MachineInstrBuilder & addImm(int64_t Val) const
bool isValidOffset(const int Opcode, const int Offset) const
bundle_iterator< MachineInstr, instr_iterator > iterator
const MachineOperand & getOperand(unsigned i) const
MachineInstrBuilder BuildMI(MachineFunction &MF, DebugLoc DL, const MCInstrDesc &MCID)
FunctionPass * createHexagonExpandPredSpillCode(const HexagonTargetMachine &TM)
void initializeHexagonExpandPredSpillCodePass(PassRegistry &)
static void initializePassOnce(PassRegistry &Registry)
unsigned getReg() const
getReg - Returns the register number.
#define CALL_ONCE_INITIALIZATION(function)
BasicBlockListType::iterator iterator
const MachineInstrBuilder & addReg(unsigned RegNo, unsigned flags=0, unsigned SubReg=0) const
void registerPass(const PassInfo &PI, bool ShouldFree=false)
DebugLoc getDebugLoc() const