aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp')
-rw-r--r--llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp4
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;
}