The bcwriter does not want ConstantPointerRef's to be indexed, and the asmwriter...
[oota-llvm.git] / lib / VMCore / SlotCalculator.cpp
index 283ca96bd2626e9f950d5ff98f4b6ba55f6feea7..6ce2f35ffb1ce5a8a3d807e6cf13b2de2ad28096 100644 (file)
@@ -321,11 +321,16 @@ void SlotCalculator::purgeFunction() {
   SC_DEBUG("end purgeFunction!\n");
 }
 
-int SlotCalculator::getSlot(const Value *D) const {
-  std::map<const Value*, unsigned>::const_iterator I = NodeMap.find(D);
-  if (I == NodeMap.end()) return -1;
-  return (int)I->second;
+int SlotCalculator::getSlot(const Value *V) const {
+  std::map<const Value*, unsigned>::const_iterator I = NodeMap.find(V);
+  if (I != NodeMap.end())
+    return (int)I->second;
+
+  // Do not number ConstantPointerRef's at all.  They are an abomination.
+  if (const ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(V))
+    return getSlot(CPR->getValue());
+
+  return -1;
 }
 
 
@@ -333,6 +338,10 @@ int SlotCalculator::getOrCreateSlot(const Value *V) {
   int SlotNo = getSlot(V);        // Check to see if it's already in!
   if (SlotNo != -1) return SlotNo;
 
+  // Do not number ConstantPointerRef's at all.  They are an abomination.
+  if (const ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(V))
+    return getOrCreateSlot(CPR->getValue());
+
   if (!isa<GlobalValue>(V))
     if (const Constant *C = dyn_cast<Constant>(V)) {
       // If we are emitting a bytecode file, do not index the characters that