From 5b6cae5524905bc43cfc21a515f828528d1f2e68 Mon Sep 17 00:00:00 2001 From: Steven Wu Date: Thu, 20 May 2021 09:53:55 -0700 Subject: [IR][AutoUpgrade] Drop alignment from non-pointer parameters and returns This is a follow-up of D102201. After some discussion, it is a better idea to upgrade all invalid uses of alignment attributes on function return values and parameters, not just limited to void function return types. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D102726 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp') diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 7272951..ea655f9 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -5629,10 +5629,15 @@ Error BitcodeReader::materialize(GlobalValue *GV) { } } - // Remove align from return attribute on CallInst. - if (auto *CI = dyn_cast(&I)) { - if (CI->getFunctionType()->getReturnType()->isVoidTy()) - CI->removeAttribute(0, Attribute::Alignment); + // Remove incompatible attributes on function calls. + if (auto *CI = dyn_cast(&I)) { + CI->removeAttributes(AttributeList::ReturnIndex, + AttributeFuncs::typeIncompatible( + CI->getFunctionType()->getReturnType())); + + for (unsigned ArgNo = 0; ArgNo < CI->arg_size(); ++ArgNo) + CI->removeParamAttrs(ArgNo, AttributeFuncs::typeIncompatible( + CI->getArgOperand(ArgNo)->getType())); } } -- cgit v1.1