diff options
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)) | 

