diff options
| author | Petar Jovanovic <petar.jovanovic@mips.com> | 2018-09-24 10:01:24 +0000 |
|---|---|---|
| committer | Petar Jovanovic <petar.jovanovic@mips.com> | 2018-09-24 10:01:24 +0000 |
| commit | c451c9ef50b7b3df260e709a9dcd6324356d57a2 (patch) | |
| tree | 9f97a79c1e713e1ab2a3602bfc08c6ca6481a56b /llvm/lib | |
| parent | a7b2405b06c97d1610ec4c212028e362c36c1473 (diff) | |
| download | bcm5719-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.cpp | 11 |
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)) |

