[Local] Generalize insertReplacementDbgValues, NFC

This utility should operate on Values, not Instructions. While I'm here,
I've also made it possible to skip emitting replacement dbg.values for
certain debug users (by having RewriteExpr return nullptr).

llvm-svn: 335152
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
index 7dd74a1..a718276 100644
--- a/llvm/lib/Transforms/Utils/Local.cpp
+++ b/llvm/lib/Transforms/Utils/Local.cpp
@@ -1672,7 +1672,7 @@
 }
 
 void llvm::insertReplacementDbgValues(
-    Instruction &From, Instruction &To, Instruction &InsertBefore,
+    Value &From, Value &To, Instruction &InsertBefore,
     function_ref<DIExpression *(DbgInfoIntrinsic &OldDII)> RewriteExpr) {
   // Collect all debug users of From.
   SmallVector<DbgInfoIntrinsic *, 1> Users;
@@ -1682,11 +1682,11 @@
 
   // Insert a replacement debug value for each old debug user. It's assumed
   // that the old debug users will be erased later.
-  DIBuilder DIB(*From.getModule());
+  DIBuilder DIB(*InsertBefore.getModule());
   for (auto *OldDII : Users)
-    DIB.insertDbgValueIntrinsic(&To, OldDII->getVariable(),
-                                RewriteExpr(*OldDII),
-                                OldDII->getDebugLoc().get(), &InsertBefore);
+    if (DIExpression *Expr = RewriteExpr(*OldDII))
+      DIB.insertDbgValueIntrinsic(&To, OldDII->getVariable(), Expr,
+                                  OldDII->getDebugLoc().get(), &InsertBefore);
 }
 
 unsigned llvm::removeAllNonTerminatorAndEHPadInstructions(BasicBlock *BB) {