Lines Matching refs:MI
49 bool LowerSubregToReg(MachineInstr *MI);
50 bool LowerCopy(MachineInstr *MI);
52 void TransferImplicitDefs(MachineInstr *MI);
66 ExpandPostRA::TransferImplicitDefs(MachineInstr *MI) { in TransferImplicitDefs() argument
67 MachineBasicBlock::iterator CopyMI = MI; in TransferImplicitDefs()
70 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { in TransferImplicitDefs()
71 MachineOperand &MO = MI->getOperand(i); in TransferImplicitDefs()
78 bool ExpandPostRA::LowerSubregToReg(MachineInstr *MI) { in LowerSubregToReg() argument
79 MachineBasicBlock *MBB = MI->getParent(); in LowerSubregToReg()
80 assert((MI->getOperand(0).isReg() && MI->getOperand(0).isDef()) && in LowerSubregToReg()
81 MI->getOperand(1).isImm() && in LowerSubregToReg()
82 (MI->getOperand(2).isReg() && MI->getOperand(2).isUse()) && in LowerSubregToReg()
83 MI->getOperand(3).isImm() && "Invalid subreg_to_reg"); in LowerSubregToReg()
85 unsigned DstReg = MI->getOperand(0).getReg(); in LowerSubregToReg()
86 unsigned InsReg = MI->getOperand(2).getReg(); in LowerSubregToReg()
87 assert(!MI->getOperand(2).getSubReg() && "SubIdx on physreg?"); in LowerSubregToReg()
88 unsigned SubIdx = MI->getOperand(3).getImm(); in LowerSubregToReg()
98 DEBUG(dbgs() << "subreg: CONVERTING: " << *MI); in LowerSubregToReg()
100 if (MI->allDefsAreDead()) { in LowerSubregToReg()
101 MI->setDesc(TII->get(TargetOpcode::KILL)); in LowerSubregToReg()
102 DEBUG(dbgs() << "subreg: replaced by: " << *MI); in LowerSubregToReg()
112 MI->setDesc(TII->get(TargetOpcode::KILL)); in LowerSubregToReg()
113 MI->RemoveOperand(3); // SubIdx in LowerSubregToReg()
114 MI->RemoveOperand(1); // Imm in LowerSubregToReg()
115 DEBUG(dbgs() << "subreg: replace by: " << *MI); in LowerSubregToReg()
120 TII->copyPhysReg(*MBB, MI, MI->getDebugLoc(), DstSubReg, InsReg, in LowerSubregToReg()
121 MI->getOperand(2).isKill()); in LowerSubregToReg()
124 MachineBasicBlock::iterator CopyMI = MI; in LowerSubregToReg()
131 MBB->erase(MI); in LowerSubregToReg()
135 bool ExpandPostRA::LowerCopy(MachineInstr *MI) { in LowerCopy() argument
137 if (MI->allDefsAreDead()) { in LowerCopy()
138 DEBUG(dbgs() << "dead copy: " << *MI); in LowerCopy()
139 MI->setDesc(TII->get(TargetOpcode::KILL)); in LowerCopy()
140 DEBUG(dbgs() << "replaced by: " << *MI); in LowerCopy()
144 MachineOperand &DstMO = MI->getOperand(0); in LowerCopy()
145 MachineOperand &SrcMO = MI->getOperand(1); in LowerCopy()
148 DEBUG(dbgs() << "identity copy: " << *MI); in LowerCopy()
151 if (SrcMO.isUndef() || MI->getNumOperands() > 2) { in LowerCopy()
154 MI->setDesc(TII->get(TargetOpcode::KILL)); in LowerCopy()
155 DEBUG(dbgs() << "replaced by: " << *MI); in LowerCopy()
159 MI->eraseFromParent(); in LowerCopy()
163 DEBUG(dbgs() << "real copy: " << *MI); in LowerCopy()
164 TII->copyPhysReg(*MI->getParent(), MI, MI->getDebugLoc(), in LowerCopy()
167 if (MI->getNumOperands() > 2) in LowerCopy()
168 TransferImplicitDefs(MI); in LowerCopy()
170 MachineBasicBlock::iterator dMI = MI; in LowerCopy()
173 MI->eraseFromParent(); in LowerCopy()
193 MachineInstr *MI = mi; in runOnMachineFunction() local
198 if (!MI->isPseudo()) in runOnMachineFunction()
202 if (TII->expandPostRAPseudo(MI)) { in runOnMachineFunction()
208 switch (MI->getOpcode()) { in runOnMachineFunction()
210 MadeChange |= LowerSubregToReg(MI); in runOnMachineFunction()
213 MadeChange |= LowerCopy(MI); in runOnMachineFunction()