diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index debb530..cba5680 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -3601,6 +3601,16 @@ Error BitcodeReader::parseFunctionRecord(ArrayRef<uint64_t> Record) { } } + if (Func->getCallingConv() == CallingConv::X86_INTR && + !Func->arg_empty() && !Func->hasParamAttribute(0, Attribute::ByVal)) { + unsigned ParamTypeID = getContainedTypeID(FTyID, 1); + Type *ByValTy = getPtrElementTypeByID(ParamTypeID); + if (!ByValTy) + return error("Missing param element type for x86_intrcc upgrade"); + Attribute NewAttr = Attribute::getWithByValType(Context, ByValTy); + Func->addParamAttr(0, NewAttr); + } + MaybeAlign Alignment; if (Error Err = parseAlignmentValue(Record[5], Alignment)) return Err; |