summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/ObjCARC
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2013-08-08 00:41:18 +0000
committerMichael Gottesman <mgottesman@apple.com>2013-08-08 00:41:18 +0000
commit6663c7d5fc32613d7043a8ab82e1edfeec10f08f (patch)
tree197719b4d74b64031b66b526a00329345813066e /llvm/lib/Transforms/ObjCARC
parent75958c41e220358b66a12c257f3f87abe4b372d5 (diff)
downloadbcm5719-llvm-6663c7d5fc32613d7043a8ab82e1edfeec10f08f.tar.gz
bcm5719-llvm-6663c7d5fc32613d7043a8ab82e1edfeec10f08f.zip
Revert "[objc-arc] Track if we encountered an additive overflow while computing {TopDown,BottomUp}PathCounts and do nothing if it occured."
This reverts commit r187941. The commit was passing on my os x box, but it is failing on some non-osx platforms. I do not have time to look into it now, so I am reverting and will recommit after I figure this out. llvm-svn: 187946
Diffstat (limited to 'llvm/lib/Transforms/ObjCARC')
-rw-r--r--llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp35
1 files changed, 3 insertions, 32 deletions
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
index 582f7ea8352..6d4ff659b40 100644
--- a/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
+++ b/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
@@ -648,8 +648,6 @@ PtrState::Merge(const PtrState &Other, bool TopDown) {
namespace {
/// \brief Per-BasicBlock state.
class BBState {
- static const unsigned OverflowOccurredValue;
-
/// The number of unique control paths from the entry which can reach this
/// block.
unsigned TopDownPathCount;
@@ -676,7 +674,7 @@ namespace {
SmallVector<BasicBlock *, 2> Succs;
public:
- BBState() : TopDownPathCount(0), BottomUpPathCount(0) { }
+ BBState() : TopDownPathCount(0), BottomUpPathCount(0) {}
typedef MapTy::iterator ptr_iterator;
typedef MapTy::const_iterator ptr_const_iterator;
@@ -747,9 +745,8 @@ namespace {
/// Returns true if overflow occured. Returns false if overflow did not
/// occur.
bool GetAllPathCountWithOverflow(unsigned &PathCount) const {
- if (TopDownPathCount == OverflowOccurredValue ||
- BottomUpPathCount == OverflowOccurredValue)
- return false;
+ assert(TopDownPathCount != 0);
+ assert(BottomUpPathCount != 0);
unsigned long long Product =
(unsigned long long)TopDownPathCount*BottomUpPathCount;
PathCount = Product;
@@ -769,8 +766,6 @@ namespace {
bool isExit() const { return Succs.empty(); }
};
-
- const unsigned BBState::OverflowOccurredValue = -1;
}
void BBState::InitFromPred(const BBState &Other) {
@@ -786,25 +781,13 @@ void BBState::InitFromSucc(const BBState &Other) {
/// The top-down traversal uses this to merge information about predecessors to
/// form the initial state for a new block.
void BBState::MergePred(const BBState &Other) {
- if (TopDownPathCount == OverflowOccurredValue)
- return;
-
// Other.TopDownPathCount can be 0, in which case it is either dead or a
// loop backedge. Loop backedges are special.
TopDownPathCount += Other.TopDownPathCount;
- // In order to be consistent, we clear the top down pointers when by adding
- // TopDownPathCount becomes OverflowOccurredValue even though "true" overflow
- // has not occured.
- if (TopDownPathCount == OverflowOccurredValue) {
- clearTopDownPointers();
- return;
- }
-
// Check for overflow. If we have overflow, fall back to conservative
// behavior.
if (TopDownPathCount < Other.TopDownPathCount) {
- TopDownPathCount = OverflowOccurredValue;
clearTopDownPointers();
return;
}
@@ -830,25 +813,13 @@ void BBState::MergePred(const BBState &Other) {
/// The bottom-up traversal uses this to merge information about successors to
/// form the initial state for a new block.
void BBState::MergeSucc(const BBState &Other) {
- if (BottomUpPathCount == OverflowOccurredValue)
- return;
-
// Other.BottomUpPathCount can be 0, in which case it is either dead or a
// loop backedge. Loop backedges are special.
BottomUpPathCount += Other.BottomUpPathCount;
- // In order to be consistent, we clear the top down pointers when by adding
- // BottomUpPathCount becomes OverflowOccurredValue even though "true" overflow
- // has not occured.
- if (BottomUpPathCount == OverflowOccurredValue) {
- clearBottomUpPointers();
- return;
- }
-
// Check for overflow. If we have overflow, fall back to conservative
// behavior.
if (BottomUpPathCount < Other.BottomUpPathCount) {
- BottomUpPathCount = OverflowOccurredValue;
clearBottomUpPointers();
return;
}
OpenPOWER on IntegriCloud