diff options
author | Chris Lattner <sabre@nondot.org> | 2002-11-09 20:14:03 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-11-09 20:14:03 +0000 |
commit | 2dd1adafa6cc595b1e0f980dfdd80b125d2baa5e (patch) | |
tree | c313c6ace3e04e468faeb80c5aa7a2e2c55e0c9c /llvm/lib/Analysis/DataStructure/Local.cpp | |
parent | e742f31e0ca75028b078a8f9c6419622c28dc9c5 (diff) | |
download | bcm5719-llvm-2dd1adafa6cc595b1e0f980dfdd80b125d2baa5e.tar.gz bcm5719-llvm-2dd1adafa6cc595b1e0f980dfdd80b125d2baa5e.zip |
Don't put constants into the scalar map!
llvm-svn: 4657
Diffstat (limited to 'llvm/lib/Analysis/DataStructure/Local.cpp')
-rw-r--r-- | llvm/lib/Analysis/DataStructure/Local.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/llvm/lib/Analysis/DataStructure/Local.cpp b/llvm/lib/Analysis/DataStructure/Local.cpp index 0c0c6afd888..e731d5cb7bb 100644 --- a/llvm/lib/Analysis/DataStructure/Local.cpp +++ b/llvm/lib/Analysis/DataStructure/Local.cpp @@ -150,30 +150,34 @@ DSNodeHandle GraphBuilder::getValueDest(Value &Val) { if (V == Constant::getNullValue(V->getType())) return 0; // Null doesn't point to anything, don't add to ScalarMap! - DSNodeHandle &NH = ScalarMap[V]; - if (NH.getNode()) - return NH; // Already have a node? Just return it... - if (Constant *C = dyn_cast<Constant>(V)) if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(C)) { - return NH = getValueDest(*CPR->getValue()); + return getValueDest(*CPR->getValue()); } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) { if (CE->getOpcode() == Instruction::Cast) - return NH = getValueDest(*CE->getOperand(0)); + return getValueDest(*CE->getOperand(0)); if (CE->getOpcode() == Instruction::GetElementPtr) { visitGetElementPtrInst(*CE); - return ScalarMap[CE]; + std::map<Value*, DSNodeHandle>::iterator I = ScalarMap.find(CE); + assert(I != ScalarMap.end() && "GEP didn't get processed right?"); + DSNodeHandle NH = I->second; + ScalarMap.erase(I); // Remove constant from scalarmap + return NH; } // This returns a conservative unknown node for any unhandled ConstExpr - return NH = createNode(DSNode::UnknownNode); + return createNode(DSNode::UnknownNode); } else if (ConstantIntegral *CI = dyn_cast<ConstantIntegral>(C)) { // Random constants are unknown mem - return NH = createNode(DSNode::UnknownNode); + return createNode(DSNode::UnknownNode); } else { assert(0 && "Unknown constant type!"); } + DSNodeHandle &NH = ScalarMap[V]; + if (NH.getNode()) + return NH; // Already have a node? Just return it... + // Otherwise we need to create a new node to point to... DSNode *N; if (GlobalValue *GV = dyn_cast<GlobalValue>(V)) { |