Lines Matching refs:MI

50   bool LowerSubregToReg(MachineInstr *MI);
51 bool LowerCopy(MachineInstr *MI);
53 void TransferImplicitDefs(MachineInstr *MI);
63 /// TransferImplicitDefs - MI is a pseudo-instruction, and the lowered
65 /// operands from MI to the replacement instruction.
67 ExpandPostRA::TransferImplicitDefs(MachineInstr *MI) {
68 MachineBasicBlock::iterator CopyMI = MI;
71 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
72 MachineOperand &MO = MI->getOperand(i);
79 bool ExpandPostRA::LowerSubregToReg(MachineInstr *MI) {
80 MachineBasicBlock *MBB = MI->getParent();
81 assert((MI->getOperand(0).isReg() && MI->getOperand(0).isDef()) &&
82 MI->getOperand(1).isImm() &&
83 (MI->getOperand(2).isReg() && MI->getOperand(2).isUse()) &&
84 MI->getOperand(3).isImm() && "Invalid subreg_to_reg");
86 unsigned DstReg = MI->getOperand(0).getReg();
87 unsigned InsReg = MI->getOperand(2).getReg();
88 assert(!MI->getOperand(2).getSubReg() && "SubIdx on physreg?");
89 unsigned SubIdx = MI->getOperand(3).getImm();
99 DEBUG(dbgs() << "subreg: CONVERTING: " << *MI);
101 if (MI->allDefsAreDead()) {
102 MI->setDesc(TII->get(TargetOpcode::KILL));
103 DEBUG(dbgs() << "subreg: replaced by: " << *MI);
113 MI->setDesc(TII->get(TargetOpcode::KILL));
114 MI->RemoveOperand(3); // SubIdx
115 MI->RemoveOperand(1); // Imm
116 DEBUG(dbgs() << "subreg: replace by: " << *MI);
121 TII->copyPhysReg(*MBB, MI, MI->getDebugLoc(), DstSubReg, InsReg,
122 MI->getOperand(2).isKill());
125 MachineBasicBlock::iterator CopyMI = MI;
132 MBB->erase(MI);
136 bool ExpandPostRA::LowerCopy(MachineInstr *MI) {
138 if (MI->allDefsAreDead()) {
139 DEBUG(dbgs() << "dead copy: " << *MI);
140 MI->setDesc(TII->get(TargetOpcode::KILL));
141 DEBUG(dbgs() << "replaced by: " << *MI);
145 MachineOperand &DstMO = MI->getOperand(0);
146 MachineOperand &SrcMO = MI->getOperand(1);
149 DEBUG(dbgs() << "identity copy: " << *MI);
152 if (SrcMO.isUndef() || MI->getNumOperands() > 2) {
155 MI->setDesc(TII->get(TargetOpcode::KILL));
156 DEBUG(dbgs() << "replaced by: " << *MI);
160 MI->eraseFromParent();
164 DEBUG(dbgs() << "real copy: " << *MI);
165 TII->copyPhysReg(*MI->getParent(), MI, MI->getDebugLoc(),
168 if (MI->getNumOperands() > 2)
169 TransferImplicitDefs(MI);
171 MachineBasicBlock::iterator dMI = MI;
174 MI->eraseFromParent();
194 MachineInstr *MI = mi;
195 // Advance iterator here because MI may be erased.
199 if (!MI->isPseudo())
203 if (TII->expandPostRAPseudo(MI)) {
209 switch (MI->getOpcode()) {
211 MadeChange |= LowerSubregToReg(MI);
214 MadeChange |= LowerCopy(MI);