aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/IPO/FunctionResolution.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Transforms/IPO/FunctionResolution.cpp')
-rw-r--r--lib/Transforms/IPO/FunctionResolution.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp
index 8acddf5900..86352d46a8 100644
--- a/lib/Transforms/IPO/FunctionResolution.cpp
+++ b/lib/Transforms/IPO/FunctionResolution.cpp
@@ -80,12 +80,14 @@ static bool ResolveFunctions(Module &M, std::vector<GlobalValue*> &Globals,
// functions and that the Old function has no varargs fns specified. In
// otherwords it's just <retty> (...)
//
- Value *Replacement = Concrete;
- if (Concrete->getType() != Old->getType())
- Replacement = ConstantExpr::getCast(ConstantPointerRef::get(Concrete),
- Old->getType());
- NumResolved += Old->use_size();
- Old->replaceAllUsesWith(Replacement);
+ 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());
+ NumResolved += Old->use_size();
+ Old->replaceAllUsesWith(Replacement);
+ }
// Since there are no uses of Old anymore, remove it from the module.
M.getFunctionList().erase(Old);