summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorPetar Jovanovic <petar.jovanovic@mips.com>2018-09-24 10:01:24 +0000
committerPetar Jovanovic <petar.jovanovic@mips.com>2018-09-24 10:01:24 +0000
commitc451c9ef50b7b3df260e709a9dcd6324356d57a2 (patch)
tree9f97a79c1e713e1ab2a3602bfc08c6ca6481a56b /llvm/lib
parenta7b2405b06c97d1610ec4c212028e362c36c1473 (diff)
downloadbcm5719-llvm-c451c9ef50b7b3df260e709a9dcd6324356d57a2.tar.gz
bcm5719-llvm-c451c9ef50b7b3df260e709a9dcd6324356d57a2.zip
[deadargelim] Update dbg.value of 'unused' parameters
DeadArgElim pass marks unused function arguments as ‘undef’ without updating existing dbg.values referring to it. As a consequence the debug info metadata in the final executable was wrong. Patch by Djordje Todorovic. Differential Revision: https://reviews.llvm.org/D51968 llvm-svn: 342871
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
index cd2bd734eb2..0cf238b5d60 100644
--- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
+++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
@@ -289,16 +289,21 @@ bool DeadArgumentEliminationPass::RemoveDeadArgumentsFromCallers(Function &Fn) {
return false;
SmallVector<unsigned, 8> UnusedArgs;
+ bool Changed = false;
+
for (Argument &Arg : Fn.args()) {
- if (!Arg.hasSwiftErrorAttr() && Arg.use_empty() && !Arg.hasByValOrInAllocaAttr())
+ if (!Arg.hasSwiftErrorAttr() && Arg.use_empty() && !Arg.hasByValOrInAllocaAttr()) {
+ if (Arg.isUsedByMetadata()) {
+ Arg.replaceAllUsesWith(UndefValue::get(Arg.getType()));
+ Changed = true;
+ }
UnusedArgs.push_back(Arg.getArgNo());
+ }
}
if (UnusedArgs.empty())
return false;
- bool Changed = false;
-
for (Use &U : Fn.uses()) {
CallSite CS(U.getUser());
if (!CS || !CS.isCallee(&U))
OpenPOWER on IntegriCloud