aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/BasicBlock.h
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2008-04-25 16:53:59 +0000
committerNick Lewycky <nicholas@mxc.ca>2008-04-25 16:53:59 +0000
commit280a6e607d8eb7401749a92db624a82de47da777 (patch)
tree040d0b406293ebcc56801552313daa6136ee5e6c /include/llvm/BasicBlock.h
parent419ace9bda6abaaa65560708064b210b4e48880f (diff)
Remove 'unwinds to' support from mainline. This patch undoes r47802 r47989
r48047 r48084 r48085 r48086 r48088 r48096 r48099 r48109 and r48123. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50265 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/BasicBlock.h')
-rw-r--r--include/llvm/BasicBlock.h34
1 files changed, 10 insertions, 24 deletions
diff --git a/include/llvm/BasicBlock.h b/include/llvm/BasicBlock.h
index 797f50e864..b569a7aeaf 100644
--- a/include/llvm/BasicBlock.h
+++ b/include/llvm/BasicBlock.h
@@ -49,14 +49,13 @@ template<> struct ilist_traits<Instruction>
/// modifying a program. However, the verifier will ensure that basic blocks
/// are "well formed".
/// @brief LLVM Basic Block Representation
-class BasicBlock : public User { // Basic blocks are data objects also
+class BasicBlock : public Value { // Basic blocks are data objects also
public:
typedef iplist<Instruction> InstListType;
private :
InstListType InstList;
BasicBlock *Prev, *Next; // Next and Prev links for our intrusive linked list
Function *Parent;
- Use unwindDest;
void setParent(Function *parent);
void setNext(BasicBlock *N) { Next = N; }
@@ -71,7 +70,7 @@ private :
/// InsertBefore is null), or before the specified basic block.
///
explicit BasicBlock(const std::string &Name = "", Function *Parent = 0,
- BasicBlock *InsertBefore = 0, BasicBlock *UnwindDest = 0);
+ BasicBlock *InsertBefore = 0);
public:
/// Instruction iterators...
typedef InstListType::iterator iterator;
@@ -79,27 +78,21 @@ public:
// allocate space for exactly zero operands
static BasicBlock *Create(const std::string &Name = "", Function *Parent = 0,
- BasicBlock *InsertBefore = 0, BasicBlock *UnwindDest = 0) {
- return new(!!UnwindDest) BasicBlock(Name, Parent, InsertBefore, UnwindDest);
+ BasicBlock *InsertBefore = 0) {
+ return new BasicBlock(Name, Parent, InsertBefore);
}
~BasicBlock();
- /// getUnwindDest - Returns the BasicBlock that flow will enter if an unwind
- /// instruction occurs in this block. May be null, in which case unwinding
- /// is undefined in this block.
- const BasicBlock *getUnwindDest() const;
- BasicBlock *getUnwindDest();
-
- /// setUnwindDest - Set which BasicBlock flow will enter if an unwind is
- /// executed within this block. It may be set to null if unwinding is not
- /// permitted in this block.
- void setUnwindDest(BasicBlock *unwindDest);
-
/// getParent - Return the enclosing method, or null if none
///
const Function *getParent() const { return Parent; }
Function *getParent() { return Parent; }
+ /// use_back - Specialize the methods defined in Value, as we know that an
+ /// BasicBlock can only be used by Instructions (specifically PHI and terms).
+ Instruction *use_back() { return cast<Instruction>(*use_begin());}
+ const Instruction *use_back() const { return cast<Instruction>(*use_begin());}
+
/// getTerminator() - If this is a well formed basic block, then this returns
/// a pointer to the terminator instruction. If it is not, then you get a
/// null pointer back.
@@ -187,14 +180,7 @@ public:
/// update the PHI nodes that reside in the block. Note that this should be
/// called while the predecessor still refers to this block.
///
- /// DontDeleteUselessPHIs will keep PHIs that have one value or the same
- /// value for all entries.
- ///
- /// OnlyDeleteOne will only remove one entry from a PHI, in case there were
- /// duplicate entries for the Pred.
- ///
- void removePredecessor(BasicBlock *Pred, bool DontDeleteUselessPHIs = false,
- bool OnlyDeleteOne = false);
+ void removePredecessor(BasicBlock *Pred, bool DontDeleteUselessPHIs = false);
/// splitBasicBlock - This splits a basic block into two at the specified
/// instruction. Note that all instructions BEFORE the specified iterator