X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FBasicBlock.h;h=bf5874f6824a1bb725b6eeb117be2abaf6d0c90a;hb=a25e5dbcc2371352386a01e3c1b8e76dd890272b;hp=11afa4047787bedd986c9f5b651774eb26a391e9;hpb=660a4f389c84c196c983c7bae1f0a02957dc70af;p=oota-llvm.git diff --git a/include/llvm/BasicBlock.h b/include/llvm/BasicBlock.h index 11afa404778..bf5874f6824 100644 --- a/include/llvm/BasicBlock.h +++ b/include/llvm/BasicBlock.h @@ -17,6 +17,7 @@ #include "llvm/Instruction.h" #include "llvm/SymbolTableListTraits.h" #include "llvm/ADT/ilist.h" +#include "llvm/ADT/Twine.h" #include "llvm/System/DataTypes.h" namespace llvm { @@ -130,6 +131,12 @@ public: const Instruction* getFirstNonPHI() const { return const_cast(this)->getFirstNonPHI(); } + + // Same as above, but also skip debug intrinsics. + Instruction* getFirstNonPHIOrDbg(); + const Instruction* getFirstNonPHIOrDbg() const { + return const_cast(this)->getFirstNonPHIOrDbg(); + } /// removeFromParent - This method unlinks 'this' from the containing /// function, but does not delete it. @@ -239,18 +246,21 @@ public: /// hasAddressTaken - returns true if there are any uses of this basic block /// other than direct branches, switches, etc. to it. - bool hasAddressTaken() const { return SubclassData != 0; } + bool hasAddressTaken() const { return getSubclassDataFromValue() != 0; } - /// removeDeadBlockAddress - If there is a blockaddress node for this basic - /// block, try to remove it and any dead constant users of it. - void removeDeadBlockAddress(); private: /// AdjustBlockAddressRefCount - BasicBlock stores the number of BlockAddress /// objects using it. This is almost always 0, sometimes one, possibly but /// almost never 2, and inconceivably 3 or more. void AdjustBlockAddressRefCount(int Amt) { - SubclassData += Amt; - assert((int)(char)SubclassData >= 0 && "Refcount wrap-around"); + setValueSubclassData(getSubclassDataFromValue()+Amt); + assert((int)(signed char)getSubclassDataFromValue() >= 0 && + "Refcount wrap-around"); + } + // Shadow Value::setValueSubclassData with a private forwarding method so that + // any future subclasses cannot accidentally use it. + void setValueSubclassData(unsigned short D) { + Value::setValueSubclassData(D); } };