set the temporary bit on MCSymbols correctly.
[oota-llvm.git] / lib / CodeGen / MachineBasicBlock.cpp
1 //===-- llvm/CodeGen/MachineBasicBlock.cpp ----------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Collect the sequence of machine instructions for a basic block.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/CodeGen/MachineBasicBlock.h"
15 #include "llvm/BasicBlock.h"
16 #include "llvm/CodeGen/MachineFunction.h"
17 #include "llvm/MC/MCAsmInfo.h"
18 #include "llvm/MC/MCContext.h"
19 #include "llvm/Target/TargetRegisterInfo.h"
20 #include "llvm/Target/TargetData.h"
21 #include "llvm/Target/TargetInstrDesc.h"
22 #include "llvm/Target/TargetInstrInfo.h"
23 #include "llvm/Target/TargetMachine.h"
24 #include "llvm/Assembly/Writer.h"
25 #include "llvm/ADT/SmallString.h"
26 #include "llvm/Support/Debug.h"
27 #include "llvm/Support/LeakDetector.h"
28 #include "llvm/Support/raw_ostream.h"
29 #include <algorithm>
30 using namespace llvm;
31
32 MachineBasicBlock::MachineBasicBlock(MachineFunction &mf, const BasicBlock *bb)
33   : BB(bb), Number(-1), xParent(&mf), Alignment(0), IsLandingPad(false),
34     AddressTaken(false) {
35   Insts.Parent = this;
36 }
37
38 MachineBasicBlock::~MachineBasicBlock() {
39   LeakDetector::removeGarbageObject(this);
40 }
41
42 /// getSymbol - Return the MCSymbol for this basic block.
43 ///
44 MCSymbol *MachineBasicBlock::getSymbol(MCContext &Ctx) const {
45   const MachineFunction *MF = getParent();
46   const char *Prefix = MF->getTarget().getMCAsmInfo()->getPrivateGlobalPrefix();
47   return Ctx.GetOrCreateTemporarySymbol(Twine(Prefix) + "BB" +
48                                         Twine(MF->getFunctionNumber()) + "_" +
49                                         Twine(getNumber()));
50 }
51
52
53 raw_ostream &llvm::operator<<(raw_ostream &OS, const MachineBasicBlock &MBB) {
54   MBB.print(OS);
55   return OS;
56 }
57
58 /// addNodeToList (MBB) - When an MBB is added to an MF, we need to update the 
59 /// parent pointer of the MBB, the MBB numbering, and any instructions in the
60 /// MBB to be on the right operand list for registers.
61 ///
62 /// MBBs start out as #-1. When a MBB is added to a MachineFunction, it
63 /// gets the next available unique MBB number. If it is removed from a
64 /// MachineFunction, it goes back to being #-1.
65 void ilist_traits<MachineBasicBlock>::addNodeToList(MachineBasicBlock *N) {
66   MachineFunction &MF = *N->getParent();
67   N->Number = MF.addToMBBNumbering(N);
68
69   // Make sure the instructions have their operands in the reginfo lists.
70   MachineRegisterInfo &RegInfo = MF.getRegInfo();
71   for (MachineBasicBlock::iterator I = N->begin(), E = N->end(); I != E; ++I)
72     I->AddRegOperandsToUseLists(RegInfo);
73
74   LeakDetector::removeGarbageObject(N);
75 }
76
77 void ilist_traits<MachineBasicBlock>::removeNodeFromList(MachineBasicBlock *N) {
78   N->getParent()->removeFromMBBNumbering(N->Number);
79   N->Number = -1;
80   LeakDetector::addGarbageObject(N);
81 }
82
83
84 /// addNodeToList (MI) - When we add an instruction to a basic block
85 /// list, we update its parent pointer and add its operands from reg use/def
86 /// lists if appropriate.
87 void ilist_traits<MachineInstr>::addNodeToList(MachineInstr *N) {
88   assert(N->getParent() == 0 && "machine instruction already in a basic block");
89   N->setParent(Parent);
90   
91   // Add the instruction's register operands to their corresponding
92   // use/def lists.
93   MachineFunction *MF = Parent->getParent();
94   N->AddRegOperandsToUseLists(MF->getRegInfo());
95
96   LeakDetector::removeGarbageObject(N);
97 }
98
99 /// removeNodeFromList (MI) - When we remove an instruction from a basic block
100 /// list, we update its parent pointer and remove its operands from reg use/def
101 /// lists if appropriate.
102 void ilist_traits<MachineInstr>::removeNodeFromList(MachineInstr *N) {
103   assert(N->getParent() != 0 && "machine instruction not in a basic block");
104
105   // Remove from the use/def lists.
106   N->RemoveRegOperandsFromUseLists();
107   
108   N->setParent(0);
109
110   LeakDetector::addGarbageObject(N);
111 }
112
113 /// transferNodesFromList (MI) - When moving a range of instructions from one
114 /// MBB list to another, we need to update the parent pointers and the use/def
115 /// lists.
116 void ilist_traits<MachineInstr>::
117 transferNodesFromList(ilist_traits<MachineInstr> &fromList,
118                       MachineBasicBlock::iterator first,
119                       MachineBasicBlock::iterator last) {
120   assert(Parent->getParent() == fromList.Parent->getParent() &&
121         "MachineInstr parent mismatch!");
122
123   // Splice within the same MBB -> no change.
124   if (Parent == fromList.Parent) return;
125
126   // If splicing between two blocks within the same function, just update the
127   // parent pointers.
128   for (; first != last; ++first)
129     first->setParent(Parent);
130 }
131
132 void ilist_traits<MachineInstr>::deleteNode(MachineInstr* MI) {
133   assert(!MI->getParent() && "MI is still in a block!");
134   Parent->getParent()->DeleteMachineInstr(MI);
135 }
136
137 MachineBasicBlock::iterator MachineBasicBlock::getFirstTerminator() {
138   iterator I = end();
139   while (I != begin() && (--I)->getDesc().isTerminator())
140     ; /*noop */
141   if (I != end() && !I->getDesc().isTerminator()) ++I;
142   return I;
143 }
144
145 void MachineBasicBlock::dump() const {
146   print(dbgs());
147 }
148
149 static inline void OutputReg(raw_ostream &os, unsigned RegNo,
150                              const TargetRegisterInfo *TRI = 0) {
151   if (RegNo != 0 && TargetRegisterInfo::isPhysicalRegister(RegNo)) {
152     if (TRI)
153       os << " %" << TRI->get(RegNo).Name;
154     else
155       os << " %physreg" << RegNo;
156   } else
157     os << " %reg" << RegNo;
158 }
159
160 StringRef MachineBasicBlock::getName() const {
161   if (const BasicBlock *LBB = getBasicBlock())
162     return LBB->getName();
163   else
164     return "(null)";
165 }
166
167 void MachineBasicBlock::print(raw_ostream &OS) const {
168   const MachineFunction *MF = getParent();
169   if (!MF) {
170     OS << "Can't print out MachineBasicBlock because parent MachineFunction"
171        << " is null\n";
172     return;
173   }
174
175   if (Alignment) { OS << "Alignment " << Alignment << "\n"; }
176
177   OS << "BB#" << getNumber() << ": ";
178
179   const char *Comma = "";
180   if (const BasicBlock *LBB = getBasicBlock()) {
181     OS << Comma << "derived from LLVM BB ";
182     WriteAsOperand(OS, LBB, /*PrintType=*/false);
183     Comma = ", ";
184   }
185   if (isLandingPad()) { OS << Comma << "EH LANDING PAD"; Comma = ", "; }
186   if (hasAddressTaken()) { OS << Comma << "ADDRESS TAKEN"; Comma = ", "; }
187   OS << '\n';
188
189   const TargetRegisterInfo *TRI = MF->getTarget().getRegisterInfo();  
190   if (!livein_empty()) {
191     OS << "    Live Ins:";
192     for (const_livein_iterator I = livein_begin(),E = livein_end(); I != E; ++I)
193       OutputReg(OS, *I, TRI);
194     OS << '\n';
195   }
196   // Print the preds of this block according to the CFG.
197   if (!pred_empty()) {
198     OS << "    Predecessors according to CFG:";
199     for (const_pred_iterator PI = pred_begin(), E = pred_end(); PI != E; ++PI)
200       OS << " BB#" << (*PI)->getNumber();
201     OS << '\n';
202   }
203   
204   for (const_iterator I = begin(); I != end(); ++I) {
205     OS << '\t';
206     I->print(OS, &getParent()->getTarget());
207   }
208
209   // Print the successors of this block according to the CFG.
210   if (!succ_empty()) {
211     OS << "    Successors according to CFG:";
212     for (const_succ_iterator SI = succ_begin(), E = succ_end(); SI != E; ++SI)
213       OS << " BB#" << (*SI)->getNumber();
214     OS << '\n';
215   }
216 }
217
218 void MachineBasicBlock::removeLiveIn(unsigned Reg) {
219   livein_iterator I = std::find(livein_begin(), livein_end(), Reg);
220   assert(I != livein_end() && "Not a live in!");
221   LiveIns.erase(I);
222 }
223
224 bool MachineBasicBlock::isLiveIn(unsigned Reg) const {
225   const_livein_iterator I = std::find(livein_begin(), livein_end(), Reg);
226   return I != livein_end();
227 }
228
229 void MachineBasicBlock::moveBefore(MachineBasicBlock *NewAfter) {
230   getParent()->splice(NewAfter, this);
231 }
232
233 void MachineBasicBlock::moveAfter(MachineBasicBlock *NewBefore) {
234   MachineFunction::iterator BBI = NewBefore;
235   getParent()->splice(++BBI, this);
236 }
237
238 void MachineBasicBlock::updateTerminator() {
239   const TargetInstrInfo *TII = getParent()->getTarget().getInstrInfo();
240   // A block with no successors has no concerns with fall-through edges.
241   if (this->succ_empty()) return;
242
243   MachineBasicBlock *TBB = 0, *FBB = 0;
244   SmallVector<MachineOperand, 4> Cond;
245   bool B = TII->AnalyzeBranch(*this, TBB, FBB, Cond);
246   (void) B;
247   assert(!B && "UpdateTerminators requires analyzable predecessors!");
248   if (Cond.empty()) {
249     if (TBB) {
250       // The block has an unconditional branch. If its successor is now
251       // its layout successor, delete the branch.
252       if (isLayoutSuccessor(TBB))
253         TII->RemoveBranch(*this);
254     } else {
255       // The block has an unconditional fallthrough. If its successor is not
256       // its layout successor, insert a branch.
257       TBB = *succ_begin();
258       if (!isLayoutSuccessor(TBB))
259         TII->InsertBranch(*this, TBB, 0, Cond);
260     }
261   } else {
262     if (FBB) {
263       // The block has a non-fallthrough conditional branch. If one of its
264       // successors is its layout successor, rewrite it to a fallthrough
265       // conditional branch.
266       if (isLayoutSuccessor(TBB)) {
267         if (TII->ReverseBranchCondition(Cond))
268           return;
269         TII->RemoveBranch(*this);
270         TII->InsertBranch(*this, FBB, 0, Cond);
271       } else if (isLayoutSuccessor(FBB)) {
272         TII->RemoveBranch(*this);
273         TII->InsertBranch(*this, TBB, 0, Cond);
274       }
275     } else {
276       // The block has a fallthrough conditional branch.
277       MachineBasicBlock *MBBA = *succ_begin();
278       MachineBasicBlock *MBBB = *llvm::next(succ_begin());
279       if (MBBA == TBB) std::swap(MBBB, MBBA);
280       if (isLayoutSuccessor(TBB)) {
281         if (TII->ReverseBranchCondition(Cond)) {
282           // We can't reverse the condition, add an unconditional branch.
283           Cond.clear();
284           TII->InsertBranch(*this, MBBA, 0, Cond);
285           return;
286         }
287         TII->RemoveBranch(*this);
288         TII->InsertBranch(*this, MBBA, 0, Cond);
289       } else if (!isLayoutSuccessor(MBBA)) {
290         TII->RemoveBranch(*this);
291         TII->InsertBranch(*this, TBB, MBBA, Cond);
292       }
293     }
294   }
295 }
296
297 void MachineBasicBlock::addSuccessor(MachineBasicBlock *succ) {
298   Successors.push_back(succ);
299   succ->addPredecessor(this);
300 }
301
302 void MachineBasicBlock::removeSuccessor(MachineBasicBlock *succ) {
303   succ->removePredecessor(this);
304   succ_iterator I = std::find(Successors.begin(), Successors.end(), succ);
305   assert(I != Successors.end() && "Not a current successor!");
306   Successors.erase(I);
307 }
308
309 MachineBasicBlock::succ_iterator 
310 MachineBasicBlock::removeSuccessor(succ_iterator I) {
311   assert(I != Successors.end() && "Not a current successor!");
312   (*I)->removePredecessor(this);
313   return Successors.erase(I);
314 }
315
316 void MachineBasicBlock::addPredecessor(MachineBasicBlock *pred) {
317   Predecessors.push_back(pred);
318 }
319
320 void MachineBasicBlock::removePredecessor(MachineBasicBlock *pred) {
321   std::vector<MachineBasicBlock *>::iterator I =
322     std::find(Predecessors.begin(), Predecessors.end(), pred);
323   assert(I != Predecessors.end() && "Pred is not a predecessor of this block!");
324   Predecessors.erase(I);
325 }
326
327 void MachineBasicBlock::transferSuccessors(MachineBasicBlock *fromMBB) {
328   if (this == fromMBB)
329     return;
330   
331   for (MachineBasicBlock::succ_iterator I = fromMBB->succ_begin(), 
332        E = fromMBB->succ_end(); I != E; ++I)
333     addSuccessor(*I);
334   
335   while (!fromMBB->succ_empty())
336     fromMBB->removeSuccessor(fromMBB->succ_begin());
337 }
338
339 bool MachineBasicBlock::isSuccessor(const MachineBasicBlock *MBB) const {
340   std::vector<MachineBasicBlock *>::const_iterator I =
341     std::find(Successors.begin(), Successors.end(), MBB);
342   return I != Successors.end();
343 }
344
345 bool MachineBasicBlock::isLayoutSuccessor(const MachineBasicBlock *MBB) const {
346   MachineFunction::const_iterator I(this);
347   return llvm::next(I) == MachineFunction::const_iterator(MBB);
348 }
349
350 bool MachineBasicBlock::canFallThrough() {
351   MachineFunction::iterator Fallthrough = this;
352   ++Fallthrough;
353   // If FallthroughBlock is off the end of the function, it can't fall through.
354   if (Fallthrough == getParent()->end())
355     return false;
356
357   // If FallthroughBlock isn't a successor, no fallthrough is possible.
358   if (!isSuccessor(Fallthrough))
359     return false;
360
361   // Analyze the branches, if any, at the end of the block.
362   MachineBasicBlock *TBB = 0, *FBB = 0;
363   SmallVector<MachineOperand, 4> Cond;
364   const TargetInstrInfo *TII = getParent()->getTarget().getInstrInfo();
365   if (TII->AnalyzeBranch(*this, TBB, FBB, Cond)) {
366     // If we couldn't analyze the branch, examine the last instruction.
367     // If the block doesn't end in a known control barrier, assume fallthrough
368     // is possible. The isPredicable check is needed because this code can be
369     // called during IfConversion, where an instruction which is normally a
370     // Barrier is predicated and thus no longer an actual control barrier. This
371     // is over-conservative though, because if an instruction isn't actually
372     // predicated we could still treat it like a barrier.
373     return empty() || !back().getDesc().isBarrier() ||
374            back().getDesc().isPredicable();
375   }
376
377   // If there is no branch, control always falls through.
378   if (TBB == 0) return true;
379
380   // If there is some explicit branch to the fallthrough block, it can obviously
381   // reach, even though the branch should get folded to fall through implicitly.
382   if (MachineFunction::iterator(TBB) == Fallthrough ||
383       MachineFunction::iterator(FBB) == Fallthrough)
384     return true;
385
386   // If it's an unconditional branch to some block not the fall through, it
387   // doesn't fall through.
388   if (Cond.empty()) return false;
389
390   // Otherwise, if it is conditional and has no explicit false block, it falls
391   // through.
392   return FBB == 0;
393 }
394
395 /// removeFromParent - This method unlinks 'this' from the containing function,
396 /// and returns it, but does not delete it.
397 MachineBasicBlock *MachineBasicBlock::removeFromParent() {
398   assert(getParent() && "Not embedded in a function!");
399   getParent()->remove(this);
400   return this;
401 }
402
403
404 /// eraseFromParent - This method unlinks 'this' from the containing function,
405 /// and deletes it.
406 void MachineBasicBlock::eraseFromParent() {
407   assert(getParent() && "Not embedded in a function!");
408   getParent()->erase(this);
409 }
410
411
412 /// ReplaceUsesOfBlockWith - Given a machine basic block that branched to
413 /// 'Old', change the code and CFG so that it branches to 'New' instead.
414 void MachineBasicBlock::ReplaceUsesOfBlockWith(MachineBasicBlock *Old,
415                                                MachineBasicBlock *New) {
416   assert(Old != New && "Cannot replace self with self!");
417
418   MachineBasicBlock::iterator I = end();
419   while (I != begin()) {
420     --I;
421     if (!I->getDesc().isTerminator()) break;
422
423     // Scan the operands of this machine instruction, replacing any uses of Old
424     // with New.
425     for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
426       if (I->getOperand(i).isMBB() &&
427           I->getOperand(i).getMBB() == Old)
428         I->getOperand(i).setMBB(New);
429   }
430
431   // Update the successor information.
432   removeSuccessor(Old);
433   addSuccessor(New);
434 }
435
436 /// CorrectExtraCFGEdges - Various pieces of code can cause excess edges in the
437 /// CFG to be inserted.  If we have proven that MBB can only branch to DestA and
438 /// DestB, remove any other MBB successors from the CFG.  DestA and DestB can be
439 /// null.
440 /// 
441 /// Besides DestA and DestB, retain other edges leading to LandingPads
442 /// (currently there can be only one; we don't check or require that here).
443 /// Note it is possible that DestA and/or DestB are LandingPads.
444 bool MachineBasicBlock::CorrectExtraCFGEdges(MachineBasicBlock *DestA,
445                                              MachineBasicBlock *DestB,
446                                              bool isCond) {
447   // The values of DestA and DestB frequently come from a call to the
448   // 'TargetInstrInfo::AnalyzeBranch' method. We take our meaning of the initial
449   // values from there.
450   //
451   // 1. If both DestA and DestB are null, then the block ends with no branches
452   //    (it falls through to its successor).
453   // 2. If DestA is set, DestB is null, and isCond is false, then the block ends
454   //    with only an unconditional branch.
455   // 3. If DestA is set, DestB is null, and isCond is true, then the block ends
456   //    with a conditional branch that falls through to a successor (DestB).
457   // 4. If DestA and DestB is set and isCond is true, then the block ends with a
458   //    conditional branch followed by an unconditional branch. DestA is the
459   //    'true' destination and DestB is the 'false' destination.
460
461   bool MadeChange = false;
462   bool AddedFallThrough = false;
463
464   MachineFunction::iterator FallThru =
465     llvm::next(MachineFunction::iterator(this));
466   
467   if (isCond) {
468     // If this block ends with a conditional branch that falls through to its
469     // successor, set DestB as the successor.
470     if (DestB == 0 && FallThru != getParent()->end()) {
471       DestB = FallThru;
472       AddedFallThrough = true;
473     }
474   } else {
475     // If this is an unconditional branch with no explicit dest, it must just be
476     // a fallthrough into DestA.
477     if (DestA == 0 && FallThru != getParent()->end()) {
478       DestA = FallThru;
479       AddedFallThrough = true;
480     }
481   }
482   
483   MachineBasicBlock::succ_iterator SI = succ_begin();
484   MachineBasicBlock *OrigDestA = DestA, *OrigDestB = DestB;
485   while (SI != succ_end()) {
486     const MachineBasicBlock *MBB = *SI;
487     if (MBB == DestA) {
488       DestA = 0;
489       ++SI;
490     } else if (MBB == DestB) {
491       DestB = 0;
492       ++SI;
493     } else if (MBB->isLandingPad() && 
494                MBB != OrigDestA && MBB != OrigDestB) {
495       ++SI;
496     } else {
497       // Otherwise, this is a superfluous edge, remove it.
498       SI = removeSuccessor(SI);
499       MadeChange = true;
500     }
501   }
502
503   if (!AddedFallThrough)
504     assert(DestA == 0 && DestB == 0 && "MachineCFG is missing edges!");
505   else if (isCond)
506     assert(DestA == 0 && "MachineCFG is missing edges!");
507
508   return MadeChange;
509 }
510
511 /// findDebugLoc - find the next valid DebugLoc starting at MBBI, skipping
512 /// any DBG_VALUE instructions.  Return UnknownLoc if there is none.
513 DebugLoc
514 MachineBasicBlock::findDebugLoc(MachineBasicBlock::iterator &MBBI) {
515   DebugLoc DL;
516   MachineBasicBlock::iterator E = end();
517   if (MBBI != E) {
518     // Skip debug declarations, we don't want a DebugLoc from them.
519     MachineBasicBlock::iterator MBBI2 = MBBI;
520     while (MBBI2 != E && MBBI2->isDebugValue())
521       MBBI2++;
522     if (MBBI2 != E)
523       DL = MBBI2->getDebugLoc();
524   }
525   return DL;
526 }
527
528 void llvm::WriteAsOperand(raw_ostream &OS, const MachineBasicBlock *MBB,
529                           bool t) {
530   OS << "BB#" << MBB->getNumber();
531 }
532