LiveVariables.cpp revision 05350288a6bc22a294ff7625f244731ef7125f8a
1//===-- LiveVariables.cpp - Live Variable Analysis for Machine Code -------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by the LLVM research group and is distributed under 6// the University of Illinois Open Source License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file implements the LiveVariable analysis pass. For each machine 11// instruction in the function, this pass calculates the set of registers that 12// are immediately dead after the instruction (i.e., the instruction calculates 13// the value, but it is never used) and the set of registers that are used by 14// the instruction, but are never used after the instruction (i.e., they are 15// killed). 16// 17// This class computes live variables using are sparse implementation based on 18// the machine code SSA form. This class computes live variable information for 19// each virtual and _register allocatable_ physical register in a function. It 20// uses the dominance properties of SSA form to efficiently compute live 21// variables for virtual registers, and assumes that physical registers are only 22// live within a single basic block (allowing it to do a single local analysis 23// to resolve physical register lifetimes in each basic block). If a physical 24// register is not register allocatable, it is not tracked. This is useful for 25// things like the stack pointer and condition codes. 26// 27//===----------------------------------------------------------------------===// 28 29#include "llvm/CodeGen/LiveVariables.h" 30#include "llvm/CodeGen/MachineInstr.h" 31#include "llvm/Target/MRegisterInfo.h" 32#include "llvm/Target/TargetInstrInfo.h" 33#include "llvm/Target/TargetMachine.h" 34#include "llvm/ADT/DepthFirstIterator.h" 35#include "llvm/ADT/STLExtras.h" 36#include "llvm/Config/alloca.h" 37#include <algorithm> 38using namespace llvm; 39 40static RegisterPass<LiveVariables> X("livevars", "Live Variable Analysis"); 41 42void LiveVariables::VarInfo::dump() const { 43 cerr << "Register Defined by: "; 44 if (DefInst) 45 cerr << *DefInst; 46 else 47 cerr << "<null>\n"; 48 cerr << " Alive in blocks: "; 49 for (unsigned i = 0, e = AliveBlocks.size(); i != e; ++i) 50 if (AliveBlocks[i]) cerr << i << ", "; 51 cerr << "\n Killed by:"; 52 if (Kills.empty()) 53 cerr << " No instructions.\n"; 54 else { 55 for (unsigned i = 0, e = Kills.size(); i != e; ++i) 56 cerr << "\n #" << i << ": " << *Kills[i]; 57 cerr << "\n"; 58 } 59} 60 61LiveVariables::VarInfo &LiveVariables::getVarInfo(unsigned RegIdx) { 62 assert(MRegisterInfo::isVirtualRegister(RegIdx) && 63 "getVarInfo: not a virtual register!"); 64 RegIdx -= MRegisterInfo::FirstVirtualRegister; 65 if (RegIdx >= VirtRegInfo.size()) { 66 if (RegIdx >= 2*VirtRegInfo.size()) 67 VirtRegInfo.resize(RegIdx*2); 68 else 69 VirtRegInfo.resize(2*VirtRegInfo.size()); 70 } 71 VarInfo &VI = VirtRegInfo[RegIdx]; 72 VI.AliveBlocks.resize(MF->getNumBlockIDs()); 73 return VI; 74} 75 76bool LiveVariables::KillsRegister(MachineInstr *MI, unsigned Reg) const { 77 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 78 MachineOperand &MO = MI->getOperand(i); 79 if (MO.isReg() && MO.isKill()) { 80 if ((MO.getReg() == Reg) || 81 (MRegisterInfo::isPhysicalRegister(MO.getReg()) && 82 MRegisterInfo::isPhysicalRegister(Reg) && 83 RegInfo->isSubRegister(MO.getReg(), Reg))) 84 return true; 85 } 86 } 87 return false; 88} 89 90bool LiveVariables::RegisterDefIsDead(MachineInstr *MI, unsigned Reg) const { 91 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 92 MachineOperand &MO = MI->getOperand(i); 93 if (MO.isReg() && MO.isDead()) { 94 if ((MO.getReg() == Reg) || 95 (MRegisterInfo::isPhysicalRegister(MO.getReg()) && 96 MRegisterInfo::isPhysicalRegister(Reg) && 97 RegInfo->isSubRegister(MO.getReg(), Reg))) 98 return true; 99 } 100 } 101 return false; 102} 103 104bool LiveVariables::ModifiesRegister(MachineInstr *MI, unsigned Reg) const { 105 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 106 MachineOperand &MO = MI->getOperand(i); 107 if (MO.isReg() && MO.isDef() && MO.getReg() == Reg) 108 return true; 109 } 110 return false; 111} 112 113void LiveVariables::MarkVirtRegAliveInBlock(VarInfo &VRInfo, 114 MachineBasicBlock *MBB) { 115 unsigned BBNum = MBB->getNumber(); 116 117 // Check to see if this basic block is one of the killing blocks. If so, 118 // remove it... 119 for (unsigned i = 0, e = VRInfo.Kills.size(); i != e; ++i) 120 if (VRInfo.Kills[i]->getParent() == MBB) { 121 VRInfo.Kills.erase(VRInfo.Kills.begin()+i); // Erase entry 122 break; 123 } 124 125 if (MBB == VRInfo.DefInst->getParent()) return; // Terminate recursion 126 127 if (VRInfo.AliveBlocks[BBNum]) 128 return; // We already know the block is live 129 130 // Mark the variable known alive in this bb 131 VRInfo.AliveBlocks[BBNum] = true; 132 133 for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(), 134 E = MBB->pred_end(); PI != E; ++PI) 135 MarkVirtRegAliveInBlock(VRInfo, *PI); 136} 137 138void LiveVariables::HandleVirtRegUse(VarInfo &VRInfo, MachineBasicBlock *MBB, 139 MachineInstr *MI) { 140 assert(VRInfo.DefInst && "Register use before def!"); 141 142 VRInfo.NumUses++; 143 144 // Check to see if this basic block is already a kill block... 145 if (!VRInfo.Kills.empty() && VRInfo.Kills.back()->getParent() == MBB) { 146 // Yes, this register is killed in this basic block already. Increase the 147 // live range by updating the kill instruction. 148 VRInfo.Kills.back() = MI; 149 return; 150 } 151 152#ifndef NDEBUG 153 for (unsigned i = 0, e = VRInfo.Kills.size(); i != e; ++i) 154 assert(VRInfo.Kills[i]->getParent() != MBB && "entry should be at end!"); 155#endif 156 157 assert(MBB != VRInfo.DefInst->getParent() && 158 "Should have kill for defblock!"); 159 160 // Add a new kill entry for this basic block. 161 // If this virtual register is already marked as alive in this basic block, 162 // that means it is alive in at least one of the successor block, it's not 163 // a kill. 164 if (!VRInfo.AliveBlocks[MBB->getNumber()]) 165 VRInfo.Kills.push_back(MI); 166 167 // Update all dominating blocks to mark them known live. 168 for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(), 169 E = MBB->pred_end(); PI != E; ++PI) 170 MarkVirtRegAliveInBlock(VRInfo, *PI); 171} 172 173bool LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI, 174 bool AddIfNotFound) { 175 bool Found = false; 176 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 177 MachineOperand &MO = MI->getOperand(i); 178 if (MO.isReg() && MO.isUse()) { 179 unsigned Reg = MO.getReg(); 180 if (!Reg) 181 continue; 182 if (Reg == IncomingReg) { 183 MO.setIsKill(); 184 Found = true; 185 break; 186 } else if (MRegisterInfo::isPhysicalRegister(Reg) && 187 MRegisterInfo::isPhysicalRegister(IncomingReg) && 188 RegInfo->isSuperRegister(IncomingReg, Reg) && 189 MO.isKill()) 190 // A super-register kill already exists. 191 return true; 192 } 193 } 194 195 // If not found, this means an alias of one of the operand is killed. Add a 196 // new implicit operand if required. 197 if (!Found && AddIfNotFound) { 198 MI->addRegOperand(IncomingReg, false/*IsDef*/,true/*IsImp*/,true/*IsKill*/); 199 return true; 200 } 201 return Found; 202} 203 204bool LiveVariables::addRegisterDead(unsigned IncomingReg, MachineInstr *MI, 205 bool AddIfNotFound) { 206 bool Found = false; 207 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 208 MachineOperand &MO = MI->getOperand(i); 209 if (MO.isReg() && MO.isDef()) { 210 unsigned Reg = MO.getReg(); 211 if (!Reg) 212 continue; 213 if (Reg == IncomingReg) { 214 MO.setIsDead(); 215 Found = true; 216 break; 217 } else if (MRegisterInfo::isPhysicalRegister(Reg) && 218 MRegisterInfo::isPhysicalRegister(IncomingReg) && 219 RegInfo->isSuperRegister(IncomingReg, Reg) && 220 MO.isDead()) 221 // There exists a super-register that's marked dead. 222 return true; 223 } 224 } 225 226 // If not found, this means an alias of one of the operand is dead. Add a 227 // new implicit operand. 228 if (!Found && AddIfNotFound) { 229 MI->addRegOperand(IncomingReg, true/*IsDef*/,true/*IsImp*/,false/*IsKill*/, 230 true/*IsDead*/); 231 return true; 232 } 233 return Found; 234} 235 236void LiveVariables::HandlePhysRegUse(unsigned Reg, MachineInstr *MI) { 237 // There is a now a proper use, forget about the last partial use. 238 PhysRegPartUse[Reg] = NULL; 239 240 // Turn previous partial def's into read/mod/write. 241 for (unsigned i = 0, e = PhysRegPartDef[Reg].size(); i != e; ++i) { 242 MachineInstr *Def = PhysRegPartDef[Reg][i]; 243 // First one is just a def. This means the use is reading some undef bits. 244 if (i != 0) 245 Def->addRegOperand(Reg, false/*IsDef*/,true/*IsImp*/,true/*IsKill*/); 246 Def->addRegOperand(Reg, true/*IsDef*/,true/*IsImp*/); 247 } 248 PhysRegPartDef[Reg].clear(); 249 250 // There was an earlier def of a super-register. Add implicit def to that MI. 251 // A: EAX = ... 252 // B: = AX 253 // Add implicit def to A. 254 if (PhysRegInfo[Reg] && !PhysRegUsed[Reg]) { 255 MachineInstr *Def = PhysRegInfo[Reg]; 256 if (!Def->findRegisterDefOperand(Reg)) 257 Def->addRegOperand(Reg, true/*IsDef*/,true/*IsImp*/); 258 } 259 260 PhysRegInfo[Reg] = MI; 261 PhysRegUsed[Reg] = true; 262 263 for (const unsigned *SubRegs = RegInfo->getSubRegisters(Reg); 264 unsigned SubReg = *SubRegs; ++SubRegs) { 265 PhysRegInfo[SubReg] = MI; 266 PhysRegUsed[SubReg] = true; 267 } 268 269 // Remember the partial uses. 270 for (const unsigned *SuperRegs = RegInfo->getSuperRegisters(Reg); 271 unsigned SuperReg = *SuperRegs; ++SuperRegs) 272 PhysRegPartUse[SuperReg] = MI; 273} 274 275void LiveVariables::HandlePhysRegDef(unsigned Reg, MachineInstr *MI) { 276 // Does this kill a previous version of this register? 277 if (MachineInstr *LastRef = PhysRegInfo[Reg]) { 278 if (PhysRegUsed[Reg]) 279 addRegisterKilled(Reg, LastRef); 280 else if (PhysRegPartUse[Reg]) 281 // Add implicit use / kill to last use of a sub-register. 282 addRegisterKilled(Reg, PhysRegPartUse[Reg], true); 283 else 284 addRegisterDead(Reg, LastRef, true); 285 } 286 PhysRegInfo[Reg] = MI; 287 PhysRegUsed[Reg] = false; 288 PhysRegPartUse[Reg] = NULL; 289 290 for (const unsigned *SubRegs = RegInfo->getSubRegisters(Reg); 291 unsigned SubReg = *SubRegs; ++SubRegs) { 292 if (MachineInstr *LastRef = PhysRegInfo[SubReg]) { 293 if (PhysRegUsed[SubReg]) 294 addRegisterKilled(SubReg, LastRef); 295 else if (PhysRegPartUse[SubReg]) 296 // Add implicit use / kill to last use of a sub-register. 297 addRegisterKilled(SubReg, PhysRegPartUse[SubReg]); 298 else 299 addRegisterDead(SubReg, LastRef); 300 } 301 PhysRegInfo[SubReg] = MI; 302 PhysRegUsed[SubReg] = false; 303 } 304 305 if (MI) 306 for (const unsigned *SuperRegs = RegInfo->getSuperRegisters(Reg); 307 unsigned SuperReg = *SuperRegs; ++SuperRegs) { 308 if (PhysRegInfo[SuperReg]) { 309 // The larger register is previously defined. Now a smaller part is 310 // being re-defined. Treat it as read/mod/write. 311 // EAX = 312 // AX = EAX<imp-use,kill>, EAX<imp-def> 313 MI->addRegOperand(SuperReg, false/*IsDef*/,true/*IsImp*/,true/*IsKill*/); 314 MI->addRegOperand(SuperReg, true/*IsDef*/,true/*IsImp*/); 315 PhysRegInfo[SuperReg] = MI; 316 PhysRegUsed[SuperReg] = false; 317 } else { 318 // Remember this partial def. 319 PhysRegPartDef[SuperReg].push_back(MI); 320 } 321 } 322} 323 324bool LiveVariables::runOnMachineFunction(MachineFunction &mf) { 325 MF = &mf; 326 const TargetInstrInfo &TII = *MF->getTarget().getInstrInfo(); 327 RegInfo = MF->getTarget().getRegisterInfo(); 328 assert(RegInfo && "Target doesn't have register information?"); 329 330 ReservedRegisters = RegInfo->getReservedRegs(mf); 331 332 unsigned NumRegs = RegInfo->getNumRegs(); 333 PhysRegInfo = new MachineInstr*[NumRegs]; 334 PhysRegUsed = new bool[NumRegs]; 335 PhysRegPartUse = new MachineInstr*[NumRegs]; 336 PhysRegPartDef = new SmallVector<MachineInstr*,4>[NumRegs]; 337 PHIVarInfo = new SmallVector<unsigned, 4>[MF->getNumBlockIDs()]; 338 std::fill(PhysRegInfo, PhysRegInfo + NumRegs, (MachineInstr*)0); 339 std::fill(PhysRegUsed, PhysRegUsed + NumRegs, false); 340 std::fill(PhysRegPartUse, PhysRegPartUse + NumRegs, (MachineInstr*)0); 341 342 /// Get some space for a respectable number of registers... 343 VirtRegInfo.resize(64); 344 345 analyzePHINodes(mf); 346 347 // Calculate live variable information in depth first order on the CFG of the 348 // function. This guarantees that we will see the definition of a virtual 349 // register before its uses due to dominance properties of SSA (except for PHI 350 // nodes, which are treated as a special case). 351 // 352 MachineBasicBlock *Entry = MF->begin(); 353 std::set<MachineBasicBlock*> Visited; 354 for (df_ext_iterator<MachineBasicBlock*> DFI = df_ext_begin(Entry, Visited), 355 E = df_ext_end(Entry, Visited); DFI != E; ++DFI) { 356 MachineBasicBlock *MBB = *DFI; 357 358 // Mark live-in registers as live-in. 359 for (MachineBasicBlock::const_livein_iterator II = MBB->livein_begin(), 360 EE = MBB->livein_end(); II != EE; ++II) { 361 assert(MRegisterInfo::isPhysicalRegister(*II) && 362 "Cannot have a live-in virtual register!"); 363 HandlePhysRegDef(*II, 0); 364 } 365 366 // Loop over all of the instructions, processing them. 367 for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end(); 368 I != E; ++I) { 369 MachineInstr *MI = I; 370 371 // Process all of the operands of the instruction... 372 unsigned NumOperandsToProcess = MI->getNumOperands(); 373 374 // Unless it is a PHI node. In this case, ONLY process the DEF, not any 375 // of the uses. They will be handled in other basic blocks. 376 if (MI->getOpcode() == TargetInstrInfo::PHI) 377 NumOperandsToProcess = 1; 378 379 // Process all uses... 380 for (unsigned i = 0; i != NumOperandsToProcess; ++i) { 381 MachineOperand &MO = MI->getOperand(i); 382 if (MO.isRegister() && MO.isUse() && MO.getReg()) { 383 if (MRegisterInfo::isVirtualRegister(MO.getReg())){ 384 HandleVirtRegUse(getVarInfo(MO.getReg()), MBB, MI); 385 } else if (MRegisterInfo::isPhysicalRegister(MO.getReg()) && 386 !ReservedRegisters[MO.getReg()]) { 387 HandlePhysRegUse(MO.getReg(), MI); 388 } 389 } 390 } 391 392 // Process all defs... 393 for (unsigned i = 0; i != NumOperandsToProcess; ++i) { 394 MachineOperand &MO = MI->getOperand(i); 395 if (MO.isRegister() && MO.isDef() && MO.getReg()) { 396 if (MRegisterInfo::isVirtualRegister(MO.getReg())) { 397 VarInfo &VRInfo = getVarInfo(MO.getReg()); 398 399 assert(VRInfo.DefInst == 0 && "Variable multiply defined!"); 400 VRInfo.DefInst = MI; 401 // Defaults to dead 402 VRInfo.Kills.push_back(MI); 403 } else if (MRegisterInfo::isPhysicalRegister(MO.getReg()) && 404 !ReservedRegisters[MO.getReg()]) { 405 HandlePhysRegDef(MO.getReg(), MI); 406 } 407 } 408 } 409 } 410 411 // Handle any virtual assignments from PHI nodes which might be at the 412 // bottom of this basic block. We check all of our successor blocks to see 413 // if they have PHI nodes, and if so, we simulate an assignment at the end 414 // of the current block. 415 if (!PHIVarInfo[MBB->getNumber()].empty()) { 416 SmallVector<unsigned, 4>& VarInfoVec = PHIVarInfo[MBB->getNumber()]; 417 418 for (SmallVector<unsigned, 4>::iterator I = VarInfoVec.begin(), 419 E = VarInfoVec.end(); I != E; ++I) { 420 VarInfo& VRInfo = getVarInfo(*I); 421 assert(VRInfo.DefInst && "Register use before def (or no def)!"); 422 423 // Only mark it alive only in the block we are representing. 424 MarkVirtRegAliveInBlock(VRInfo, MBB); 425 } 426 } 427 428 // Finally, if the last instruction in the block is a return, make sure to mark 429 // it as using all of the live-out values in the function. 430 if (!MBB->empty() && TII.isReturn(MBB->back().getOpcode())) { 431 MachineInstr *Ret = &MBB->back(); 432 for (MachineFunction::liveout_iterator I = MF->liveout_begin(), 433 E = MF->liveout_end(); I != E; ++I) { 434 assert(MRegisterInfo::isPhysicalRegister(*I) && 435 "Cannot have a live-in virtual register!"); 436 HandlePhysRegUse(*I, Ret); 437 // Add live-out registers as implicit uses. 438 Ret->addRegOperand(*I, false, true); 439 } 440 } 441 442 // Loop over PhysRegInfo, killing any registers that are available at the 443 // end of the basic block. This also resets the PhysRegInfo map. 444 for (unsigned i = 0; i != NumRegs; ++i) 445 if (PhysRegInfo[i]) 446 HandlePhysRegDef(i, 0); 447 448 // Clear some states between BB's. These are purely local information. 449 for (unsigned i = 0; i != NumRegs; ++i) 450 PhysRegPartDef[i].clear(); 451 std::fill(PhysRegPartUse, PhysRegPartUse + NumRegs, (MachineInstr*)0); 452 } 453 454 // Convert and transfer the dead / killed information we have gathered into 455 // VirtRegInfo onto MI's. 456 // 457 for (unsigned i = 0, e1 = VirtRegInfo.size(); i != e1; ++i) 458 for (unsigned j = 0, e2 = VirtRegInfo[i].Kills.size(); j != e2; ++j) { 459 if (VirtRegInfo[i].Kills[j] == VirtRegInfo[i].DefInst) 460 addRegisterDead(i + MRegisterInfo::FirstVirtualRegister, 461 VirtRegInfo[i].Kills[j]); 462 else 463 addRegisterKilled(i + MRegisterInfo::FirstVirtualRegister, 464 VirtRegInfo[i].Kills[j]); 465 } 466 467 // Check to make sure there are no unreachable blocks in the MC CFG for the 468 // function. If so, it is due to a bug in the instruction selector or some 469 // other part of the code generator if this happens. 470#ifndef NDEBUG 471 for(MachineFunction::iterator i = MF->begin(), e = MF->end(); i != e; ++i) 472 assert(Visited.count(&*i) != 0 && "unreachable basic block found"); 473#endif 474 475 delete[] PhysRegInfo; 476 delete[] PhysRegUsed; 477 delete[] PhysRegPartUse; 478 delete[] PhysRegPartDef; 479 delete[] PHIVarInfo; 480 481 return false; 482} 483 484/// instructionChanged - When the address of an instruction changes, this 485/// method should be called so that live variables can update its internal 486/// data structures. This removes the records for OldMI, transfering them to 487/// the records for NewMI. 488void LiveVariables::instructionChanged(MachineInstr *OldMI, 489 MachineInstr *NewMI) { 490 // If the instruction defines any virtual registers, update the VarInfo, 491 // kill and dead information for the instruction. 492 for (unsigned i = 0, e = OldMI->getNumOperands(); i != e; ++i) { 493 MachineOperand &MO = OldMI->getOperand(i); 494 if (MO.isRegister() && MO.getReg() && 495 MRegisterInfo::isVirtualRegister(MO.getReg())) { 496 unsigned Reg = MO.getReg(); 497 VarInfo &VI = getVarInfo(Reg); 498 if (MO.isDef()) { 499 if (MO.isDead()) { 500 MO.unsetIsDead(); 501 addVirtualRegisterDead(Reg, NewMI); 502 } 503 // Update the defining instruction. 504 if (VI.DefInst == OldMI) 505 VI.DefInst = NewMI; 506 } 507 if (MO.isUse()) { 508 if (MO.isKill()) { 509 MO.unsetIsKill(); 510 addVirtualRegisterKilled(Reg, NewMI); 511 } 512 // If this is a kill of the value, update the VI kills list. 513 if (VI.removeKill(OldMI)) 514 VI.Kills.push_back(NewMI); // Yes, there was a kill of it 515 } 516 } 517 } 518} 519 520/// removeVirtualRegistersKilled - Remove all killed info for the specified 521/// instruction. 522void LiveVariables::removeVirtualRegistersKilled(MachineInstr *MI) { 523 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 524 MachineOperand &MO = MI->getOperand(i); 525 if (MO.isReg() && MO.isKill()) { 526 MO.unsetIsKill(); 527 unsigned Reg = MO.getReg(); 528 if (MRegisterInfo::isVirtualRegister(Reg)) { 529 bool removed = getVarInfo(Reg).removeKill(MI); 530 assert(removed && "kill not in register's VarInfo?"); 531 } 532 } 533 } 534} 535 536/// removeVirtualRegistersDead - Remove all of the dead registers for the 537/// specified instruction from the live variable information. 538void LiveVariables::removeVirtualRegistersDead(MachineInstr *MI) { 539 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 540 MachineOperand &MO = MI->getOperand(i); 541 if (MO.isReg() && MO.isDead()) { 542 MO.unsetIsDead(); 543 unsigned Reg = MO.getReg(); 544 if (MRegisterInfo::isVirtualRegister(Reg)) { 545 bool removed = getVarInfo(Reg).removeKill(MI); 546 assert(removed && "kill not in register's VarInfo?"); 547 } 548 } 549 } 550} 551 552/// analyzePHINodes - Gather information about the PHI nodes in here. In 553/// particular, we want to map the variable information of a virtual 554/// register which is used in a PHI node. We map that to the BB the vreg is 555/// coming from. 556/// 557void LiveVariables::analyzePHINodes(const MachineFunction& Fn) { 558 for (MachineFunction::const_iterator I = Fn.begin(), E = Fn.end(); 559 I != E; ++I) 560 for (MachineBasicBlock::const_iterator BBI = I->begin(), BBE = I->end(); 561 BBI != BBE && BBI->getOpcode() == TargetInstrInfo::PHI; ++BBI) 562 for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2) 563 PHIVarInfo[BBI->getOperand(i + 1).getMachineBasicBlock()->getNumber()]. 564 push_back(BBI->getOperand(i).getReg()); 565} 566