diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 551dfd4..e16e8a0 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -1865,7 +1865,7 @@ static uint64_t getRawAttributeMask(Attribute::AttrKind Val) { case Attribute::StackProtect: return 1 << 14; case Attribute::StackProtectReq: return 1 << 15; case Attribute::Alignment: return 31 << 16; - case Attribute::NoCapture: return 1 << 21; + // 1ULL << 21 is NoCapture, which is upgraded separately. case Attribute::NoRedZone: return 1 << 22; case Attribute::NoImplicitFloat: return 1 << 23; case Attribute::Naked: return 1 << 24; @@ -1986,6 +1986,12 @@ static void decodeLLVMAttributesForBitcode(AttrBuilder &B, B.addMemoryAttr(ME); } + // Upgrade nocapture to captures(none). + if (Attrs & (1ULL << 21)) { + Attrs &= ~(1ULL << 21); + B.addCapturesAttr(CaptureInfo::none()); + } + addRawAttributeValue(B, Attrs); } @@ -2098,8 +2104,6 @@ static Attribute::AttrKind getAttrFromCode(uint64_t Code) { return Attribute::NoBuiltin; case bitc::ATTR_KIND_NO_CALLBACK: return Attribute::NoCallback; - case bitc::ATTR_KIND_NO_CAPTURE: - return Attribute::NoCapture; case bitc::ATTR_KIND_NO_DIVERGENCE_SOURCE: return Attribute::NoDivergenceSource; case bitc::ATTR_KIND_NO_DUPLICATE: @@ -2349,6 +2353,11 @@ Error BitcodeReader::parseAttributeGroupBlock() { upgradeOldMemoryAttribute(ME, EncodedKind)) continue; + if (EncodedKind == bitc::ATTR_KIND_NO_CAPTURE) { + B.addCapturesAttr(CaptureInfo::none()); + continue; + } + if (Error Err = parseAttrKind(EncodedKind, &Kind)) return Err; |