BasicBlock.cpp revision 17fcdd5e1b78b829068ca657c97357a39d6e768b
1d1e693f2a3883dacf213aa2b477540c57b53b714Chris Lattner//===-- BasicBlock.cpp - Implement BasicBlock related methods -------------===//
2fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman//
3b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//                     The LLVM Compiler Infrastructure
4b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//
5b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell// This file was developed by the LLVM research group and is distributed under
6b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell// the University of Illinois Open Source License. See LICENSE.TXT for details.
7fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman//
8b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//===----------------------------------------------------------------------===//
9009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner//
10b7653df0853f06112b741be09f1b7ae5a6aa6fdeChris Lattner// This file implements the BasicBlock class for the VMCore library.
11009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner//
12009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner//===----------------------------------------------------------------------===//
13009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
147e70829632f82de15db187845666aaca6e04b792Chris Lattner#include "llvm/BasicBlock.h"
153464547968b58dda0acbf6e0e192f03f66652848Chris Lattner#include "llvm/Constants.h"
1644336292fcd9f3f99cbfc2c3366bea0cf95bb675Misha Brukman#include "llvm/Instructions.h"
17009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner#include "llvm/Type.h"
18455889aa79e3463a4b0f2161e3d9d72a683268b6Chris Lattner#include "llvm/Support/CFG.h"
19551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencer#include "llvm/Support/LeakDetector.h"
20a4f0b3a084d120cfc5b5bb06f64b222f5cb72740Chris Lattner#include "llvm/Support/Compiler.h"
217e70829632f82de15db187845666aaca6e04b792Chris Lattner#include "SymbolTableListTraitsImpl.h"
227e70829632f82de15db187845666aaca6e04b792Chris Lattner#include <algorithm>
23108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattnerusing namespace llvm;
24108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner
2517fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattnerinline ValueSymbolTable *
2617fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattnerilist_traits<Instruction>::getSymTab(BasicBlock *BB) {
2717fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner  if (BB)
2817fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner    if (Function *F = BB->getParent())
2917fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner      return &F->getValueSymbolTable();
3017fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner  return 0;
3117fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner}
3217fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner
3317fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner
34108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattnernamespace {
35108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner  /// DummyInst - An instance of this class is used to mark the end of the
36108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner  /// instruction list.  This is not a real instruction.
379ef7e06ccef062dfa5df516913b12b7c3ca17805Chris Lattner  struct VISIBILITY_HIDDEN DummyInst : public Instruction {
3896d83f63cdbb33c075901b1b84eb07622d86386fChris Lattner    DummyInst() : Instruction(Type::VoidTy, OtherOpsEnd, 0, 0) {
39108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner      // This should not be garbage monitored.
40108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner      LeakDetector::removeGarbageObject(this);
41108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    }
42009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
43108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    virtual Instruction *clone() const {
44108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner      assert(0 && "Cannot clone EOL");abort();
45108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner      return 0;
46108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    }
47108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    virtual const char *getOpcodeName() const { return "*end-of-list-inst*"; }
487e70829632f82de15db187845666aaca6e04b792Chris Lattner
49108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    // Methods for support type inquiry through isa, cast, and dyn_cast...
50108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    static inline bool classof(const DummyInst *) { return true; }
51108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    static inline bool classof(const Instruction *I) {
52108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner      return I->getOpcode() == OtherOpsEnd;
53108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    }
54108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    static inline bool classof(const Value *V) {
55108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner      return isa<Instruction>(V) && classof(cast<Instruction>(V));
56108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner    }
57108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner  };
58108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner}
597e70829632f82de15db187845666aaca6e04b792Chris Lattner
60bca81448ac8e19c588c9a4ad16fc70732b76327cChris LattnerInstruction *ilist_traits<Instruction>::createSentinel() {
617e70829632f82de15db187845666aaca6e04b792Chris Lattner  return new DummyInst();
627e70829632f82de15db187845666aaca6e04b792Chris Lattner}
637e70829632f82de15db187845666aaca6e04b792Chris Lattneriplist<Instruction> &ilist_traits<Instruction>::getList(BasicBlock *BB) {
647e70829632f82de15db187845666aaca6e04b792Chris Lattner  return BB->getInstList();
657e70829632f82de15db187845666aaca6e04b792Chris Lattner}
667e70829632f82de15db187845666aaca6e04b792Chris Lattner
677e70829632f82de15db187845666aaca6e04b792Chris Lattner// Explicit instantiation of SymbolTableListTraits since some of the methods
687e70829632f82de15db187845666aaca6e04b792Chris Lattner// are not in the public header file...
6917fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattnertemplate class SymbolTableListTraits<Instruction, BasicBlock>;
707e70829632f82de15db187845666aaca6e04b792Chris Lattner
71009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
7217fcdd5e1b78b829068ca657c97357a39d6e768bChris LattnerBasicBlock::BasicBlock(const std::string &Name, Function *NewParent,
734f05611ed948ed1fb3e861d178aae18bd025ce1cChris Lattner                       BasicBlock *InsertBefore)
7417fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner  : Value(Type::LabelTy, Value::BasicBlockVal), Parent(0) {
7517fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner  // Initialize the instlist.
760a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner  InstList.setItemParent(this);
770a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner
780a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner  // Make sure that we get added to a function
790a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner  LeakDetector::addGarbageObject(this);
800a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner
810a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner  if (InsertBefore) {
8217fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner    assert(NewParent &&
834f05611ed948ed1fb3e861d178aae18bd025ce1cChris Lattner           "Cannot insert block before another block with no function!");
8417fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner    NewParent->getBasicBlockList().insert(InsertBefore, this);
8517fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner  } else if (NewParent) {
8617fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner    NewParent->getBasicBlockList().push_back(this);
870a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner  }
88dec628eead87b20773c98a00830580df211acc98Chris Lattner
89dec628eead87b20773c98a00830580df211acc98Chris Lattner  setName(Name);
900a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner}
910a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner
920a1a874d1f4659f02c0d4fdd6be69f1188bd0625Chris Lattner
93009505452b713ed2e3a8e99c5545a6e721c65495Chris LattnerBasicBlock::~BasicBlock() {
94ea51deb18a60d37e546909af4aa95ca6f2c5d56fMisha Brukman  assert(getParent() == 0 && "BasicBlock still linked into the program!");
95009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner  dropAllReferences();
967e70829632f82de15db187845666aaca6e04b792Chris Lattner  InstList.clear();
97009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner}
98009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
99bded132d00ed626a6541b67ad101ef0fd47d3491Chris Lattnervoid BasicBlock::setParent(Function *parent) {
100d1e693f2a3883dacf213aa2b477540c57b53b714Chris Lattner  if (getParent())
101d1e693f2a3883dacf213aa2b477540c57b53b714Chris Lattner    LeakDetector::addGarbageObject(this);
102d1e693f2a3883dacf213aa2b477540c57b53b714Chris Lattner
10317fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner  // Set Parent=parent, updating instruction symtab entries as appropriate.
10417fcdd5e1b78b829068ca657c97357a39d6e768bChris Lattner  InstList.setSymTabObject(&Parent, parent);
105d1e693f2a3883dacf213aa2b477540c57b53b714Chris Lattner
106d1e693f2a3883dacf213aa2b477540c57b53b714Chris Lattner  if (getParent())
107d1e693f2a3883dacf213aa2b477540c57b53b714Chris Lattner    LeakDetector::removeGarbageObject(this);
108bded132d00ed626a6541b67ad101ef0fd47d3491Chris Lattner}
109bded132d00ed626a6541b67ad101ef0fd47d3491Chris Lattner
1104b83380f330b1c77bb9b4ad8f63bdcf1a596afd6Chris Lattnervoid BasicBlock::removeFromParent() {
1114b83380f330b1c77bb9b4ad8f63bdcf1a596afd6Chris Lattner  getParent()->getBasicBlockList().remove(this);
1124b83380f330b1c77bb9b4ad8f63bdcf1a596afd6Chris Lattner}
1134b83380f330b1c77bb9b4ad8f63bdcf1a596afd6Chris Lattner
1144b83380f330b1c77bb9b4ad8f63bdcf1a596afd6Chris Lattnervoid BasicBlock::eraseFromParent() {
1154b83380f330b1c77bb9b4ad8f63bdcf1a596afd6Chris Lattner  getParent()->getBasicBlockList().erase(this);
1164b83380f330b1c77bb9b4ad8f63bdcf1a596afd6Chris Lattner}
1174b83380f330b1c77bb9b4ad8f63bdcf1a596afd6Chris Lattner
118a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattner/// moveBefore - Unlink this basic block from its current function and
119a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattner/// insert it into the function that MovePos lives in, right before MovePos.
1206a13aed525f586fc8f475ce17ce7f6cf77ddd2f4Chris Lattnervoid BasicBlock::moveBefore(BasicBlock *MovePos) {
1216a13aed525f586fc8f475ce17ce7f6cf77ddd2f4Chris Lattner  MovePos->getParent()->getBasicBlockList().splice(MovePos,
1226a13aed525f586fc8f475ce17ce7f6cf77ddd2f4Chris Lattner                       getParent()->getBasicBlockList(), this);
1236a13aed525f586fc8f475ce17ce7f6cf77ddd2f4Chris Lattner}
1246a13aed525f586fc8f475ce17ce7f6cf77ddd2f4Chris Lattner
125a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattner/// moveAfter - Unlink this basic block from its current function and
126a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattner/// insert it into the function that MovePos lives in, right after MovePos.
127a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattnervoid BasicBlock::moveAfter(BasicBlock *MovePos) {
128a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattner  Function::iterator I = MovePos;
129a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattner  MovePos->getParent()->getBasicBlockList().splice(++I,
130a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattner                                       getParent()->getBasicBlockList(), this);
131a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattner}
132a71965b1adf6bfeddfd3b38fdf7df9b4412bc6c2Chris Lattner
1334b83380f330b1c77bb9b4ad8f63bdcf1a596afd6Chris Lattner
134009505452b713ed2e3a8e99c5545a6e721c65495Chris LattnerTerminatorInst *BasicBlock::getTerminator() {
135009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner  if (InstList.empty()) return 0;
1367e70829632f82de15db187845666aaca6e04b792Chris Lattner  return dyn_cast<TerminatorInst>(&InstList.back());
137009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner}
138009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
139009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattnerconst TerminatorInst *const BasicBlock::getTerminator() const {
140009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner  if (InstList.empty()) return 0;
1417e70829632f82de15db187845666aaca6e04b792Chris Lattner  return dyn_cast<TerminatorInst>(&InstList.back());
142009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner}
143009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
144dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir PrusInstruction* BasicBlock::getFirstNonPHI()
145dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir Prus{
14628962f353b16f34571b3ed3127f7e17e1c0a76f2Vladimir Prus    BasicBlock::iterator i = begin();
147dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir Prus    // All valid basic blocks should have a terminator,
148dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir Prus    // which is not a PHINode. If we have invalid basic
149dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir Prus    // block we'll get assert when dereferencing past-the-end
150dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir Prus    // iterator.
151dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir Prus    while (isa<PHINode>(i)) ++i;
152dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir Prus    return &*i;
153dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir Prus}
154dd49dbfe44098eb53b1ac29f017e422147572bbbVladimir Prus
155009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattnervoid BasicBlock::dropAllReferences() {
1567e70829632f82de15db187845666aaca6e04b792Chris Lattner  for(iterator I = begin(), E = end(); I != E; ++I)
1577e70829632f82de15db187845666aaca6e04b792Chris Lattner    I->dropAllReferences();
158009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner}
159009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
160ad993cbb77b26b36cee938686b3377c0d92abd5eChris Lattner/// getSinglePredecessor - If this basic block has a single predecessor block,
161ad993cbb77b26b36cee938686b3377c0d92abd5eChris Lattner/// return the block, otherwise return a null pointer.
162ad993cbb77b26b36cee938686b3377c0d92abd5eChris LattnerBasicBlock *BasicBlock::getSinglePredecessor() {
163ad993cbb77b26b36cee938686b3377c0d92abd5eChris Lattner  pred_iterator PI = pred_begin(this), E = pred_end(this);
164ad993cbb77b26b36cee938686b3377c0d92abd5eChris Lattner  if (PI == E) return 0;         // No preds.
165ad993cbb77b26b36cee938686b3377c0d92abd5eChris Lattner  BasicBlock *ThePred = *PI;
166ad993cbb77b26b36cee938686b3377c0d92abd5eChris Lattner  ++PI;
167ad993cbb77b26b36cee938686b3377c0d92abd5eChris Lattner  return (PI == E) ? ThePred : 0 /*multiple preds*/;
168ad993cbb77b26b36cee938686b3377c0d92abd5eChris Lattner}
169ad993cbb77b26b36cee938686b3377c0d92abd5eChris Lattner
170566f600779d8c28a81bb08951ec1962fe34322abChris Lattner/// removePredecessor - This method is used to notify a BasicBlock that the
171566f600779d8c28a81bb08951ec1962fe34322abChris Lattner/// specified Predecessor of the block is no longer able to reach it.  This is
172fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman/// actually not used to update the Predecessor list, but is actually used to
173566f600779d8c28a81bb08951ec1962fe34322abChris Lattner/// update the PHI nodes that reside in the block.  Note that this should be
174566f600779d8c28a81bb08951ec1962fe34322abChris Lattner/// called while the predecessor still refers to this block.
175566f600779d8c28a81bb08951ec1962fe34322abChris Lattner///
1763464547968b58dda0acbf6e0e192f03f66652848Chris Lattnervoid BasicBlock::removePredecessor(BasicBlock *Pred,
1773464547968b58dda0acbf6e0e192f03f66652848Chris Lattner                                   bool DontDeleteUselessPHIs) {
1781f21ef1511ce003fc177121b980e783b83992f82Chris Lattner  assert((hasNUsesOrMore(16)||// Reduce cost of this assertion for complex CFGs.
17935f0aecdb012ba150953f6f3a98862be9c72d265Chris Lattner          find(pred_begin(this), pred_end(this), Pred) != pred_end(this)) &&
1809d80930e950214d026afd3a3d18cda32629efdb9Jeff Cohen         "removePredecessor: BB is not a predecessor!");
18135f0aecdb012ba150953f6f3a98862be9c72d265Chris Lattner
182f23586c7efe615d061c00c24cf62f03f7962776fChris Lattner  if (InstList.empty()) return;
183a9e7781b3b8e457946491529816feab73c66d774Chris Lattner  PHINode *APN = dyn_cast<PHINode>(&front());
184a9e7781b3b8e457946491529816feab73c66d774Chris Lattner  if (!APN) return;   // Quick exit.
185b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner
186b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner  // If there are exactly two predecessors, then we want to nuke the PHI nodes
187a9e7781b3b8e457946491529816feab73c66d774Chris Lattner  // altogether.  However, we cannot do this, if this in this case:
18887a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  //
18987a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  //  Loop:
19087a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  //    %x = phi [X, Loop]
19187a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  //    %x2 = add %x, 1         ;; This would become %x2 = add %x2, 1
19287a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  //    br Loop                 ;; %x2 does not dominate all uses
19387a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  //
19487a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  // This is because the PHI node input is actually taken from the predecessor
195fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman  // basic block.  The only case this can happen is with a self loop, so we
19687a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  // check for this case explicitly now.
197fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman  //
198a9e7781b3b8e457946491529816feab73c66d774Chris Lattner  unsigned max_idx = APN->getNumIncomingValues();
199b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner  assert(max_idx != 0 && "PHI Node in block with 0 predecessors!?!?!");
20087a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  if (max_idx == 2) {
201a9e7781b3b8e457946491529816feab73c66d774Chris Lattner    BasicBlock *Other = APN->getIncomingBlock(APN->getIncomingBlock(0) == Pred);
20287a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner
20387a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner    // Disable PHI elimination!
20487a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner    if (this == Other) max_idx = 3;
20587a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner  }
20687a09b10f8e03182e9edcb6e9ee8386f4a5d8daeChris Lattner
2073464547968b58dda0acbf6e0e192f03f66652848Chris Lattner  // <= Two predecessors BEFORE I remove one?
2083464547968b58dda0acbf6e0e192f03f66652848Chris Lattner  if (max_idx <= 2 && !DontDeleteUselessPHIs) {
209b00c582b6d40e6b9ff2d1ed4f5eaf7930e792aceChris Lattner    // Yup, loop through and nuke the PHI nodes
2107e70829632f82de15db187845666aaca6e04b792Chris Lattner    while (PHINode *PN = dyn_cast<PHINode>(&front())) {
2113464547968b58dda0acbf6e0e192f03f66652848Chris Lattner      // Remove the predecessor first.
2123464547968b58dda0acbf6e0e192f03f66652848Chris Lattner      PN->removeIncomingValue(Pred, !DontDeleteUselessPHIs);
213b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner
214b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner      // If the PHI _HAD_ two uses, replace PHI node with its now *single* value
215dee430d26e14a3d7c8d86688d49ac8b116aa044fChris Lattner      if (max_idx == 2) {
21602a78cf7eacf97f2c9584e29d02f77612aead35fChris Lattner        if (PN->getOperand(0) != PN)
21702a78cf7eacf97f2c9584e29d02f77612aead35fChris Lattner          PN->replaceAllUsesWith(PN->getOperand(0));
21802a78cf7eacf97f2c9584e29d02f77612aead35fChris Lattner        else
21902a78cf7eacf97f2c9584e29d02f77612aead35fChris Lattner          // We are left with an infinite loop with no entries: kill the PHI.
2203464547968b58dda0acbf6e0e192f03f66652848Chris Lattner          PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
221dee430d26e14a3d7c8d86688d49ac8b116aa044fChris Lattner        getInstList().pop_front();    // Remove the PHI node
222dee430d26e14a3d7c8d86688d49ac8b116aa044fChris Lattner      }
223dee430d26e14a3d7c8d86688d49ac8b116aa044fChris Lattner
224dee430d26e14a3d7c8d86688d49ac8b116aa044fChris Lattner      // If the PHI node already only had one entry, it got deleted by
225dee430d26e14a3d7c8d86688d49ac8b116aa044fChris Lattner      // removeIncomingValue.
226b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner    }
227b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner  } else {
228b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner    // Okay, now we know that we need to remove predecessor #pred_idx from all
229b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner    // PHI nodes.  Iterate over each PHI node fixing them up
230f878218c972dc570eb50e739c2ee2b9dd75ee5ddChris Lattner    PHINode *PN;
23180f4d88a97e1b925c2ea67f932dd9c3ce1df1f8dChris Lattner    for (iterator II = begin(); (PN = dyn_cast<PHINode>(II)); ) {
23280f4d88a97e1b925c2ea67f932dd9c3ce1df1f8dChris Lattner      ++II;
2333464547968b58dda0acbf6e0e192f03f66652848Chris Lattner      PN->removeIncomingValue(Pred, false);
234a83ba0f5c934e2cdbb5724cab365ecc0b5aae6c6Nate Begeman      // If all incoming values to the Phi are the same, we can replace the Phi
235a83ba0f5c934e2cdbb5724cab365ecc0b5aae6c6Nate Begeman      // with that value.
23690245d4cbb7816ef21f038ec5ef7e01971283436Owen Anderson      Value* PNV = 0;
23790245d4cbb7816ef21f038ec5ef7e01971283436Owen Anderson      if (!DontDeleteUselessPHIs && (PNV = PN->hasConstantValue())) {
2381325b42a7dc38e99e1aa3531395d1678b31d3c55Chris Lattner        PN->replaceAllUsesWith(PNV);
2391325b42a7dc38e99e1aa3531395d1678b31d3c55Chris Lattner        PN->eraseFromParent();
2401325b42a7dc38e99e1aa3531395d1678b31d3c55Chris Lattner      }
241a83ba0f5c934e2cdbb5724cab365ecc0b5aae6c6Nate Begeman    }
242b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner  }
243b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner}
244b47af25099cac5c59795d6f1eb3b7cf9f962b32fChris Lattner
245009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
2460f67dd6237eb7227aa58e9b77cd95f354989b891Chris Lattner/// splitBasicBlock - This splits a basic block into two at the specified
2470f67dd6237eb7227aa58e9b77cd95f354989b891Chris Lattner/// instruction.  Note that all instructions BEFORE the specified iterator stay
248fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman/// as part of the original basic block, an unconditional branch is added to
2490f67dd6237eb7227aa58e9b77cd95f354989b891Chris Lattner/// the new BB, and the rest of the instructions in the BB are moved to the new
2500f67dd6237eb7227aa58e9b77cd95f354989b891Chris Lattner/// BB, including the old terminator.  This invalidates the iterator.
2510f67dd6237eb7227aa58e9b77cd95f354989b891Chris Lattner///
252fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman/// Note that this only works on well formed basic blocks (must have a
2530f67dd6237eb7227aa58e9b77cd95f354989b891Chris Lattner/// terminator), and 'I' must not be the end of instruction list (which would
2540f67dd6237eb7227aa58e9b77cd95f354989b891Chris Lattner/// cause a degenerate basic block to be formed, having a terminator inside of
255fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman/// the basic block).
2560f67dd6237eb7227aa58e9b77cd95f354989b891Chris Lattner///
2574bd4aa5e3c41c0fc803e960252bb6fe75b804b1dChris LattnerBasicBlock *BasicBlock::splitBasicBlock(iterator I, const std::string &BBName) {
258009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner  assert(getTerminator() && "Can't use splitBasicBlock on degenerate BB!");
259fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman  assert(I != InstList.end() &&
2609d80930e950214d026afd3a3d18cda32629efdb9Jeff Cohen         "Trying to get me to create degenerate basic block!");
261009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
2624f05611ed948ed1fb3e861d178aae18bd025ce1cChris Lattner  BasicBlock *New = new BasicBlock(BBName, getParent(), getNext());
263009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
264f2c3106866137b0c06e99f453a83d9558c0c6934Chris Lattner  // Move all of the specified instructions from the original basic block into
265f2c3106866137b0c06e99f453a83d9558c0c6934Chris Lattner  // the new basic block.
266f2c3106866137b0c06e99f453a83d9558c0c6934Chris Lattner  New->getInstList().splice(New->end(), this->getInstList(), I, end());
267009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner
268009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner  // Add a branch instruction to the newly formed basic block.
269108e4ab159b59a616b0868e396dc7ddc1fb48616Chris Lattner  new BranchInst(New, this);
270e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner
271e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner  // Now we must loop through all of the successors of the New block (which
272e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner  // _were_ the successors of the 'this' block), and update any PHI nodes in
273e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner  // successors.  If there were PHI nodes in the successors, then they need to
274e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner  // know that incoming branches will be from New, not from Old.
275e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner  //
2761c9ab515de41707c8e04a51694a50479068e891dChris Lattner  for (succ_iterator I = succ_begin(New), E = succ_end(New); I != E; ++I) {
277e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner    // Loop over any phi nodes in the basic block, updating the BB field of
278e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner    // incoming values...
279e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner    BasicBlock *Successor = *I;
280f878218c972dc570eb50e739c2ee2b9dd75ee5ddChris Lattner    PHINode *PN;
281e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner    for (BasicBlock::iterator II = Successor->begin();
2829bf2a926cbdf05c5b412ec35e72908a08a4cf34bChris Lattner         (PN = dyn_cast<PHINode>(II)); ++II) {
283e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner      int IDX = PN->getBasicBlockIndex(this);
284e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner      while (IDX != -1) {
285e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner        PN->setIncomingBlock((unsigned)IDX, New);
286e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner        IDX = PN->getBasicBlockIndex(this);
287e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner      }
288e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner    }
289e8e320d2faa997605c76a7c3ab9e9b4fb578e8c0Chris Lattner  }
290009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner  return New;
291009505452b713ed2e3a8e99c5545a6e721c65495Chris Lattner}
292