Don't insert null entries into the scalar map for constexpr (cast null to Ty)
authorChris Lattner <sabre@nondot.org>
Sun, 9 Feb 2003 23:04:12 +0000 (23:04 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 9 Feb 2003 23:04:12 +0000 (23:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5523 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/Local.cpp

index 559d79aa8fac38e7ebcbf4aadb5ec5e9bcde2126..b54827699ed69d7972875a5cdc5728c87d101667 100644 (file)
@@ -174,16 +174,22 @@ DSNodeHandle GraphBuilder::getValueDest(Value &Val) {
       return NH = getValueDest(*CPR->getValue());
     } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
       if (CE->getOpcode() == Instruction::Cast)
-        return NH = getValueDest(*CE->getOperand(0));
-      if (CE->getOpcode() == Instruction::GetElementPtr) {
+        NH = getValueDest(*CE->getOperand(0));
+      else if (CE->getOpcode() == Instruction::GetElementPtr) {
         visitGetElementPtrInst(*CE);
         hash_map<Value*, DSNodeHandle>::iterator I = ScalarMap.find(CE);
         assert(I != ScalarMap.end() && "GEP didn't get processed right?");
-        return NH = I->second;
+        NH = I->second;
+      } else {
+        // This returns a conservative unknown node for any unhandled ConstExpr
+        return NH = createNode(DSNode::UnknownNode);
+      }
+      if (NH.getNode() == 0) {  // (getelementptr null, X) returns null
+        ScalarMap.erase(V);
+        return 0;
       }
+      return NH;
 
-      // This returns a conservative unknown node for any unhandled ConstExpr
-      return NH = createNode(DSNode::UnknownNode);
     } else if (ConstantIntegral *CI = dyn_cast<ConstantIntegral>(C)) {
       // Random constants are unknown mem
       return NH = createNode(DSNode::UnknownNode);