From 404eb05247e442d105accb2a7d17a2d4e6f2462f Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Sun, 6 Jan 2008 18:27:01 +0000 Subject: The transform that tries to turn calls to bitcast functions into direct calls bails out unless caller and callee have essentially equivalent parameter attributes. This is illogical - the callee's attributes should be of no relevance here. Rework the logic, which incidentally fixes a crash when removed arguments have attributes. llvm-svn: 45658 --- llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp') diff --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp index 94ae404107b..8e6a3b91c1f 100644 --- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -505,7 +505,7 @@ void DAE::RemoveDeadArgumentsFromFunction(Function *F) { const Type *RetTy = FTy->getReturnType(); if (DeadRetVal.count(F)) { RetTy = Type::VoidTy; - RAttrs &= ~ParamAttr::VoidTypeIncompatible; + RAttrs &= ~ParamAttr::incompatibleWithType(RetTy, RAttrs); DeadRetVal.erase(F); } @@ -561,8 +561,7 @@ void DAE::RemoveDeadArgumentsFromFunction(Function *F) { // The call return attributes. uint16_t RAttrs = PAL ? PAL->getParamAttrs(0) : 0; // Adjust in case the function was changed to return void. - if (NF->getReturnType() == Type::VoidTy) - RAttrs &= ~ParamAttr::VoidTypeIncompatible; + RAttrs &= ~ParamAttr::incompatibleWithType(NF->getReturnType(), RAttrs); if (RAttrs) ParamAttrsVec.push_back(ParamAttrsWithIndex::get(0, RAttrs)); -- cgit v1.2.3