bug 122:
- Replace ConstantPointerRef usage with GlobalValue usage


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14953 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp
index 303cad1..695287f 100644
--- a/lib/Transforms/IPO/FunctionResolution.cpp
+++ b/lib/Transforms/IPO/FunctionResolution.cpp
@@ -101,8 +101,7 @@
       if (!Old->use_empty()) {  // Avoid making the CPR unless we really need it
         Value *Replacement = Concrete;
         if (Concrete->getType() != Old->getType())
-          Replacement = ConstantExpr::getCast(ConstantPointerRef::get(Concrete),
-                                              Old->getType());
+          Replacement = ConstantExpr::getCast(Concrete,Old->getType());
         NumResolved += Old->use_size();
         Old->replaceAllUsesWith(Replacement);
       }
@@ -118,11 +117,10 @@
                                    std::vector<GlobalValue*> &Globals,
                                    GlobalVariable *Concrete) {
   bool Changed = false;
-  Constant *CCPR = ConstantPointerRef::get(Concrete);
 
   for (unsigned i = 0; i != Globals.size(); ++i)
     if (Globals[i] != Concrete) {
-      Constant *Cast = ConstantExpr::getCast(CCPR, Globals[i]->getType());
+      Constant *Cast = ConstantExpr::getCast(Concrete, Globals[i]->getType());
       Globals[i]->replaceAllUsesWith(Cast);
 
       // Since there are no uses of Old anymore, remove it from the module.
@@ -138,8 +136,8 @@
 static bool CallersAllIgnoreReturnValue(Function &F) {
   if (F.getReturnType() == Type::VoidTy) return true;
   for (Value::use_iterator I = F.use_begin(), E = F.use_end(); I != E; ++I) {
-    if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(*I)) {
-      for (Value::use_iterator I = CPR->use_begin(), E = CPR->use_end();
+    if (GlobalValue *GV = dyn_cast<GlobalValue>(*I)) {
+      for (Value::use_iterator I = GV->use_begin(), E = GV->use_end();
            I != E; ++I) {
         CallSite CS = CallSite::get(*I);
         if (!CS.getInstruction() || !CS.getInstruction()->use_empty())
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp
index c30ec5f..3478d9d 100644
--- a/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/lib/Transforms/IPO/GlobalOpt.cpp
@@ -48,8 +48,8 @@
       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
         if (isStoredThrough(CE))
           return true;
-      } else if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(C)) {
-        if (isStoredThrough(CPR)) return true;
+      } else if (GlobalValue *GV = dyn_cast<GlobalValue>(C)) {
+        if (isStoredThrough(GV)) return true;
       } else {
         // Must be an element of a constant array or something.
         return true;
diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp
index 8fca968..ed5efe2 100644
--- a/lib/Transforms/IPO/Inliner.cpp
+++ b/lib/Transforms/IPO/Inliner.cpp
@@ -14,7 +14,6 @@
 //===----------------------------------------------------------------------===//
 
 #include "Inliner.h"
-#include "llvm/Constants.h"   // ConstantPointerRef should die
 #include "llvm/Module.h"
 #include "llvm/iOther.h"
 #include "llvm/iTerminators.h"
@@ -174,9 +173,9 @@
     // If the only remaining use of the function is a dead constant
     // pointer ref, remove it.
     if (F && F->hasOneUse())
-      if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(F->use_back()))
-        if (CPR->use_empty()) {
-          CPR->destroyConstant();
+      if (Function *GV = dyn_cast<Function>(F->use_back()))
+        if (GV->removeDeadConstantUsers()) {
+	  delete GV;
           if (F->hasInternalLinkage()) {
             // There *MAY* be an edge from the external call node to this
             // function.  If so, remove it.
diff --git a/lib/Transforms/IPO/RaiseAllocations.cpp b/lib/Transforms/IPO/RaiseAllocations.cpp
index 5302d8f..ca8b7cc 100644
--- a/lib/Transforms/IPO/RaiseAllocations.cpp
+++ b/lib/Transforms/IPO/RaiseAllocations.cpp
@@ -158,9 +158,9 @@
           Changed = true;
           ++NumRaised;
         }
-      } else if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(U)) {
-        Users.insert(Users.end(), CPR->use_begin(), CPR->use_end());
-        EqPointers.push_back(CPR);
+      } else if (GlobalValue *GV = dyn_cast<GlobalValue>(U)) {
+        Users.insert(Users.end(), GV->use_begin(), GV->use_end());
+        EqPointers.push_back(GV);
       } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(U)) {
         if (CE->getOpcode() == Instruction::Cast) {
           Users.insert(Users.end(), CE->use_begin(), CE->use_end());
@@ -207,9 +207,9 @@
           Changed = true;
           ++NumRaised;
         }
-      } else if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(U)) {
-        Users.insert(Users.end(), CPR->use_begin(), CPR->use_end());
-        EqPointers.push_back(CPR);
+      } else if (GlobalValue *GV = dyn_cast<GlobalValue>(U)) {
+        Users.insert(Users.end(), GV->use_begin(), GV->use_end());
+        EqPointers.push_back(GV);
       } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(U)) {
         if (CE->getOpcode() == Instruction::Cast) {
           Users.insert(Users.end(), CE->use_begin(), CE->use_end());
diff --git a/lib/Transforms/Instrumentation/BlockProfiling.cpp b/lib/Transforms/Instrumentation/BlockProfiling.cpp
index b7c19e6..e357e84 100644
--- a/lib/Transforms/Instrumentation/BlockProfiling.cpp
+++ b/lib/Transforms/Instrumentation/BlockProfiling.cpp
@@ -55,14 +55,12 @@
     new GlobalVariable(ATy, false, GlobalValue::InternalLinkage,
                        Constant::getNullValue(ATy), "FuncProfCounters", &M);
 
-  ConstantPointerRef *CounterCPR = ConstantPointerRef::get(Counters);
-
   // Instrument all of the functions...
   unsigned i = 0;
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) 
     if (!I->isExternal())
       // Insert counter at the start of the function
-      IncrementCounterInBlock(I->begin(), i++, CounterCPR);
+      IncrementCounterInBlock(I->begin(), i++, Counters);
 
   // Add the initialization call to main.
   InsertProfilingInitCall(Main, "llvm_start_func_profiling", Counters);
@@ -96,14 +94,12 @@
     new GlobalVariable(ATy, false, GlobalValue::InternalLinkage,
                        Constant::getNullValue(ATy), "BlockProfCounters", &M);
 
-  ConstantPointerRef *CounterCPR = ConstantPointerRef::get(Counters);
-
   // Instrument all of the blocks...
   unsigned i = 0;
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) 
     for (Function::iterator BB = I->begin(), E = I->end(); BB != E; ++BB)
       // Insert counter at the start of the block
-      IncrementCounterInBlock(BB, i++, CounterCPR);
+      IncrementCounterInBlock(BB, i++, Counters);
 
   // Add the initialization call to main.
   InsertProfilingInitCall(Main, "llvm_start_block_profiling", Counters);
diff --git a/lib/Transforms/Instrumentation/EdgeProfiling.cpp b/lib/Transforms/Instrumentation/EdgeProfiling.cpp
index ef334f2..c584ca5 100644
--- a/lib/Transforms/Instrumentation/EdgeProfiling.cpp
+++ b/lib/Transforms/Instrumentation/EdgeProfiling.cpp
@@ -60,8 +60,6 @@
     new GlobalVariable(ATy, false, GlobalValue::InternalLinkage,
                        Constant::getNullValue(ATy), "EdgeProfCounters", &M);
 
-  ConstantPointerRef *CounterCPR = ConstantPointerRef::get(Counters);
-
   // Instrument all of the edges...
   unsigned i = 0;
   for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F)
@@ -80,10 +78,10 @@
           // otherwise insert it in the successor block.
           if (TI->getNumSuccessors() == 0) {
             // Insert counter at the start of the block
-            IncrementCounterInBlock(BB, i++, CounterCPR);
+            IncrementCounterInBlock(BB, i++, Counters);
           } else {
             // Insert counter at the start of the block
-            IncrementCounterInBlock(TI->getSuccessor(s), i++, CounterCPR);
+            IncrementCounterInBlock(TI->getSuccessor(s), i++, Counters);
           }
         }
       }
diff --git a/lib/Transforms/Instrumentation/EmitFunctions.cpp b/lib/Transforms/Instrumentation/EmitFunctions.cpp
index 27c2587..a1c23da 100644
--- a/lib/Transforms/Instrumentation/EmitFunctions.cpp
+++ b/lib/Transforms/Instrumentation/EmitFunctions.cpp
@@ -77,7 +77,7 @@
     
       //std::cerr<<MI;
 
-      vConsts.push_back(ConstantPointerRef::get(MI));
+      vConsts.push_back(MI);
       sBCons.push_back(ConstantInt::get(Type::SByteTy, hasBackEdge(MI)));
       
       counter++;
diff --git a/lib/Transforms/Instrumentation/ProfilingUtils.cpp b/lib/Transforms/Instrumentation/ProfilingUtils.cpp
index 3c22b4b..1c0c4ad 100644
--- a/lib/Transforms/Instrumentation/ProfilingUtils.cpp
+++ b/lib/Transforms/Instrumentation/ProfilingUtils.cpp
@@ -42,8 +42,7 @@
   std::vector<Constant*> GEPIndices(2, Constant::getNullValue(Type::IntTy));
   unsigned NumElements = 0;
   if (Array) {
-    ConstantPointerRef *ArrayCPR = ConstantPointerRef::get(Array);
-    Args[2] = ConstantExpr::getGetElementPtr(ArrayCPR, GEPIndices);
+    Args[2] = ConstantExpr::getGetElementPtr(Array, GEPIndices);
     NumElements =
       cast<ArrayType>(Array->getType()->getElementType())->getNumElements();
   } else {
@@ -87,7 +86,7 @@
 }
 
 void llvm::IncrementCounterInBlock(BasicBlock *BB, unsigned CounterNum,
-                                   ConstantPointerRef *CounterArray) {
+                                   GlobalValue *CounterArray) {
   // Insert the increment after any alloca or PHI instructions...
   BasicBlock::iterator InsertPos = BB->begin();
   while (isa<AllocaInst>(InsertPos) || isa<PHINode>(InsertPos))
diff --git a/lib/Transforms/Instrumentation/ProfilingUtils.h b/lib/Transforms/Instrumentation/ProfilingUtils.h
index 17e2348..c6d1b73 100644
--- a/lib/Transforms/Instrumentation/ProfilingUtils.h
+++ b/lib/Transforms/Instrumentation/ProfilingUtils.h
@@ -26,7 +26,7 @@
   void InsertProfilingInitCall(Function *MainFn, const char *FnName,
                                GlobalValue *Arr = 0);
   void IncrementCounterInBlock(BasicBlock *BB, unsigned CounterNum,
-                               ConstantPointerRef *CounterArray);
+                               GlobalValue *CounterArray);
 }
 
 #endif
diff --git a/lib/Transforms/Instrumentation/TraceValues.cpp b/lib/Transforms/Instrumentation/TraceValues.cpp
index 30904a6..6cc46fa 100644
--- a/lib/Transforms/Instrumentation/TraceValues.cpp
+++ b/lib/Transforms/Instrumentation/TraceValues.cpp
@@ -243,7 +243,7 @@
   GlobalVariable *fmtVal = getStringRef(Mod, Message+getPrintfCodeFor(V)+"\n");
 
   // Turn the format string into an sbyte *
-  Constant *GEP =ConstantExpr::getGetElementPtr(ConstantPointerRef::get(fmtVal),
+  Constant *GEP=ConstantExpr::getGetElementPtr(fmtVal,
                 std::vector<Constant*>(2,Constant::getNullValue(Type::LongTy)));
   
   // Insert a call to the hash function if this is a pointer value
diff --git a/lib/Transforms/Utils/LowerInvoke.cpp b/lib/Transforms/Utils/LowerInvoke.cpp
index bde4ff5..835a5ae 100644
--- a/lib/Transforms/Utils/LowerInvoke.cpp
+++ b/lib/Transforms/Utils/LowerInvoke.cpp
@@ -135,7 +135,7 @@
     if (MsgGV) {
       std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy));
       AbortMessage = 
-        ConstantExpr::getGetElementPtr(ConstantPointerRef::get(MsgGV), GEPIdx);
+        ConstantExpr::getGetElementPtr(MsgGV, GEPIdx);
     }
 
   } else {
@@ -154,7 +154,7 @@
     if (MsgGV) {
       std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy));
       AbortMessage =
-        ConstantExpr::getGetElementPtr(ConstantPointerRef::get(MsgGV), GEPIdx);
+        ConstantExpr::getGetElementPtr(MsgGV, GEPIdx);
     }
   }
 
@@ -191,7 +191,7 @@
                                                  WriteFn->getParent());
       std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy));
       AbortMessage = 
-        ConstantExpr::getGetElementPtr(ConstantPointerRef::get(MsgGV), GEPIdx);
+        ConstantExpr::getGetElementPtr(MsgGV, GEPIdx);
     }
 
     // These are the arguments we WANT...
diff --git a/lib/Transforms/Utils/ValueMapper.cpp b/lib/Transforms/Utils/ValueMapper.cpp
index 7a5fcff..9f52556 100644
--- a/lib/Transforms/Utils/ValueMapper.cpp
+++ b/lib/Transforms/Utils/ValueMapper.cpp
@@ -14,6 +14,7 @@
 
 #include "ValueMapper.h"
 #include "llvm/Constants.h"
+#include "llvm/GlobalValue.h"
 #include "llvm/Instruction.h"
 #include <iostream>
 
@@ -32,9 +33,8 @@
     if (isa<ConstantIntegral>(C) || isa<ConstantFP>(C) ||
         isa<ConstantPointerNull>(C) || isa<ConstantAggregateZero>(C))
       return VMSlot = C;           // Primitive constants map directly
-    else if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(C)) {
-      GlobalValue *MV = cast<GlobalValue>(MapValue((Value*)CPR->getValue(),VM));
-      return VMSlot = ConstantPointerRef::get(MV);
+    else if (GlobalValue *GV = dyn_cast<GlobalValue>(C)) {
+      return VMSlot = GV;
     } else if (ConstantArray *CA = dyn_cast<ConstantArray>(C)) {
       const std::vector<Use> &Vals = CA->getValues();
       for (unsigned i = 0, e = Vals.size(); i != e; ++i) {