From e9dc13a1838b954a69a7ab7c7f76ed12c3718c02 Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Wed, 12 Apr 2017 01:17:31 +0000 Subject: [PATCH] Revert "[WebAssembly] Update use of Attributes after r299875" This reverts commit 2a0eb61dcccb15058d5b2a572bb3da0cf47fd550, r300015 I raced with rnk on the commit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@300016 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../WebAssemblyLowerEmscriptenEHSjLj.cpp | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp b/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp index 08e2707bb97..16e7ffa58c0 100644 --- a/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp +++ b/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp @@ -435,23 +435,26 @@ Value *WebAssemblyLowerEmscriptenEHSjLj::wrapInvoke(CallOrInvoke *CI) { // Because we added the pointer to the callee as first argument, all // argument attribute indices have to be incremented by one. - SmallVector AttributesVec; - const AttributeList &InvokeAL = CI->getAttributes(); - - // Add any return attributes. - AttributesVec.push_back(InvokeAL.getRetAttributes()); - // No attributes for the callee pointer. - AttributesVec.push_back(nullptr); - // Copy the argument attributes from the original - for (unsigned i = 1, e = CI->getNumArgOperands(); i <= e; ++i) { - AttributesVec.push_back(InvokeAL.getParamAttributes(i)); + SmallVector AttributesVec; + const AttributeList &InvokePAL = CI->getAttributes(); + CallSite::arg_iterator AI = CI->arg_begin(); + unsigned i = 1; // Argument attribute index starts from 1 + for (unsigned e = CI->getNumArgOperands(); i <= e; ++AI, ++i) { + if (InvokePAL.hasAttributes(i)) { + AttrBuilder B(InvokePAL, i); + AttributesVec.push_back(AttributeList::get(C, i + 1, B)); + } } - + // Add any return attributes. + if (InvokePAL.hasAttributes(AttributeList::ReturnIndex)) + AttributesVec.push_back( + AttributeList::get(C, InvokePAL.getRetAttributes())); // Add any function attributes. - AttributesVec.push_back(InvokeAL.getFnAttributes()); + if (InvokePAL.hasAttributes(AttributeList::FunctionIndex)) + AttributesVec.push_back(AttributeList::get(C, InvokePAL.getFnAttributes())); // Reconstruct the AttributesList based on the vector we constructed. - AttributeList NewCallAL = AttributeList::get(C, AttributesVec); - NewCall->setAttributes(NewCallAL); + AttributeList NewCallPAL = AttributeList::get(C, AttributesVec); + NewCall->setAttributes(NewCallPAL); CI->replaceAllUsesWith(NewCall); -- 2.50.1