diff options
Diffstat (limited to 'llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp')
| -rw-r--r-- | llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp index 0b763e423fe0..d95fd55870f8 100644 --- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -287,6 +287,7 @@ bool DeadArgumentEliminationPass::RemoveDeadArgumentsFromCallers(Function &Fn) { SmallVector<unsigned, 8> UnusedArgs; bool Changed = false; + AttrBuilder UBImplyingAttributes = AttributeFuncs::getUBImplyingAttributes(); for (Argument &Arg : Fn.args()) { if (!Arg.hasSwiftErrorAttr() && Arg.use_empty() && !Arg.hasPassPointeeByValueCopyAttr()) { @@ -295,6 +296,7 @@ bool DeadArgumentEliminationPass::RemoveDeadArgumentsFromCallers(Function &Fn) { Changed = true; } UnusedArgs.push_back(Arg.getArgNo()); + Fn.removeParamAttrs(Arg.getArgNo(), UBImplyingAttributes); } } @@ -312,6 +314,8 @@ bool DeadArgumentEliminationPass::RemoveDeadArgumentsFromCallers(Function &Fn) { Value *Arg = CB->getArgOperand(ArgNo); CB->setArgOperand(ArgNo, UndefValue::get(Arg->getType())); + CB->removeParamAttrs(ArgNo, UBImplyingAttributes); + ++NumArgumentsReplacedWithUndef; Changed = true; } |
