[WebAssembly] Update use of Attributes after r299875

This fixes the failing WebAssemblyLowerEmscriptenEHSjLj tests

llvm-svn: 300015
This commit is contained in:
Derek Schuff 2017-04-12 01:09:34 +00:00
parent c2cb560045
commit 857a7e5473
1 changed files with 14 additions and 17 deletions

View File

@ -435,26 +435,23 @@ 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<AttributeList, 8> 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));
}
}
SmallVector<AttributeSetNode *, 8> AttributesVec;
const AttributeList &InvokeAL = CI->getAttributes();
// Add any return attributes.
if (InvokePAL.hasAttributes(AttributeList::ReturnIndex))
AttributesVec.push_back(
AttributeList::get(C, InvokePAL.getRetAttributes()));
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));
}
// Add any function attributes.
if (InvokePAL.hasAttributes(AttributeList::FunctionIndex))
AttributesVec.push_back(AttributeList::get(C, InvokePAL.getFnAttributes()));
AttributesVec.push_back(InvokeAL.getFnAttributes());
// Reconstruct the AttributesList based on the vector we constructed.
AttributeList NewCallPAL = AttributeList::get(C, AttributesVec);
NewCall->setAttributes(NewCallPAL);
AttributeList NewCallAL = AttributeList::get(C, AttributesVec);
NewCall->setAttributes(NewCallAL);
CI->replaceAllUsesWith(NewCall);