diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2007-01-13 02:05:28 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2007-01-13 02:05:28 +0000 |
commit | 4294446fcb9f8f2838b8b445bbcbe4af1974c9ca (patch) | |
tree | a597cf21914225cd4c96164c3001f2044f37825b /llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp | |
parent | 91d93de25ef78fc1d83e4c1e13f999d446c9834d (diff) | |
download | bcm5719-llvm-4294446fcb9f8f2838b8b445bbcbe4af1974c9ca.tar.gz bcm5719-llvm-4294446fcb9f8f2838b8b445bbcbe4af1974c9ca.zip |
"Default context" blocks can occur after a non-default one. This meant
that properties were being applied where they didn't belong. Fixes crash
in new MiBench testcase.
Also mark debugging code as such in #ifdef.
llvm-svn: 33177
Diffstat (limited to 'llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp b/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp index 33dee090986..0191fe33916 100644 --- a/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp +++ b/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp @@ -721,7 +721,8 @@ namespace { Value *LHS, *RHS; ICmpInst::Predicate Op; - Instruction *Context; + BasicBlock *ContextBB; + Instruction *ContextInst; }; std::deque<Operation> WorkList; @@ -1075,7 +1076,8 @@ namespace { WorkList.push_back(Operation()); Operation &O = WorkList.back(); - O.LHS = V1, O.RHS = V2, O.Op = Pred, O.Context = I; + O.LHS = V1, O.RHS = V2, O.Op = Pred, O.ContextInst = I; + O.ContextBB = I ? I->getParent() : TopBB; } /// defToOps - Given an instruction definition that we've learned something @@ -1306,10 +1308,10 @@ namespace { //DOUT << "WorkList size: " << WorkList.size() << "\n"; Operation &O = WorkList.front(); - if (O.Context) { - TopInst = O.Context; - Top = Forest->getNodeForBlock(TopInst->getParent()); - } + TopInst = O.ContextInst; + TopBB = O.ContextBB; + Top = Forest->getNodeForBlock(TopBB); + O.LHS = IG.canonicalize(O.LHS, Top); O.RHS = IG.canonicalize(O.RHS, Top); @@ -1317,8 +1319,8 @@ namespace { assert(O.RHS == IG.canonicalize(O.RHS, Top) && "Canonicalize isn't."); DOUT << "solving " << *O.LHS << " " << O.Op << " " << *O.RHS; - if (O.Context) DOUT << " context: " << *O.Context; - else DOUT << " default context"; + if (O.ContextInst) DOUT << " context inst: " << *O.ContextInst; + else DOUT << " context block: " << O.ContextBB->getName(); DOUT << "\n"; DEBUG(IG.dump()); @@ -1485,6 +1487,7 @@ namespace { return; } +#ifndef NDEBUG // Try to replace the whole instruction. Value *V = IG->canonicalize(I, ET); assert(V == I && "Late instruction canonicalization."); @@ -1511,6 +1514,7 @@ namespace { DOUT << " into " << *I; } } +#endif DOUT << "push (%" << I->getParent()->getName() << ")\n"; Forwards visit(this, DT); |