diff options
Diffstat (limited to 'llvm/lib/Bitcode')
| -rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 36 | ||||
| -rw-r--r-- | llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 13 | ||||
| -rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 3 | 
3 files changed, 21 insertions, 31 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 466dcb0..8930d64 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2257,6 +2257,8 @@ static Attribute::AttrKind getAttrFromCode(uint64_t Code) {      return Attribute::Captures;    case bitc::ATTR_KIND_DEAD_ON_RETURN:      return Attribute::DeadOnReturn; +  case bitc::ATTR_KIND_NO_CREATE_UNDEF_OR_POISON: +    return Attribute::NoCreateUndefOrPoison;    }  } @@ -8566,16 +8568,13 @@ Expected<std::unique_ptr<ModuleSummaryIndex>> BitcodeModule::getSummary() {  }  static Expected<std::pair<bool, bool>> -getEnableSplitLTOUnitAndUnifiedFlag(BitstreamCursor &Stream, -                                                 unsigned ID, -                                                 BitcodeLTOInfo <OInfo) { +getEnableSplitLTOUnitAndUnifiedFlag(BitstreamCursor &Stream, unsigned ID) {    if (Error Err = Stream.EnterSubBlock(ID))      return std::move(Err); -  SmallVector<uint64_t, 64> Record; +  SmallVector<uint64_t, 64> Record;    while (true) {      BitstreamEntry Entry; -    std::pair<bool, bool> Result = {false,false};      if (Error E = Stream.advanceSkippingSubblocks().moveInto(Entry))        return std::move(E); @@ -8584,8 +8583,8 @@ getEnableSplitLTOUnitAndUnifiedFlag(BitstreamCursor &Stream,      case BitstreamEntry::Error:        return error("Malformed block");      case BitstreamEntry::EndBlock: { -      // If no flags record found, set both flags to false. -      return Result; +      // If no flags record found, return both flags as false. +      return std::make_pair(false, false);      }      case BitstreamEntry::Record:        // The interesting case. @@ -8607,9 +8606,7 @@ getEnableSplitLTOUnitAndUnifiedFlag(BitstreamCursor &Stream,        bool EnableSplitLTOUnit = Flags & 0x8;        bool UnifiedLTO = Flags & 0x200; -      Result = {EnableSplitLTOUnit, UnifiedLTO}; - -      return Result; +      return std::make_pair(EnableSplitLTOUnit, UnifiedLTO);      }      }    } @@ -8638,26 +8635,15 @@ Expected<BitcodeLTOInfo> BitcodeModule::getLTOInfo() {                              /*EnableSplitLTOUnit=*/false, /*UnifiedLTO=*/false};      case BitstreamEntry::SubBlock: -      if (Entry.ID == bitc::GLOBALVAL_SUMMARY_BLOCK_ID) { -        BitcodeLTOInfo LTOInfo; +      if (Entry.ID == bitc::GLOBALVAL_SUMMARY_BLOCK_ID || +          Entry.ID == bitc::FULL_LTO_GLOBALVAL_SUMMARY_BLOCK_ID) {          Expected<std::pair<bool, bool>> Flags = -            getEnableSplitLTOUnitAndUnifiedFlag(Stream, Entry.ID, LTOInfo); +            getEnableSplitLTOUnitAndUnifiedFlag(Stream, Entry.ID);          if (!Flags)            return Flags.takeError(); -        std::tie(LTOInfo.EnableSplitLTOUnit, LTOInfo.UnifiedLTO) = Flags.get(); -        LTOInfo.IsThinLTO = true; -        LTOInfo.HasSummary = true; -        return LTOInfo; -      } - -      if (Entry.ID == bitc::FULL_LTO_GLOBALVAL_SUMMARY_BLOCK_ID) {          BitcodeLTOInfo LTOInfo; -        Expected<std::pair<bool, bool>> Flags = -            getEnableSplitLTOUnitAndUnifiedFlag(Stream, Entry.ID, LTOInfo); -        if (!Flags) -          return Flags.takeError();          std::tie(LTOInfo.EnableSplitLTOUnit, LTOInfo.UnifiedLTO) = Flags.get(); -        LTOInfo.IsThinLTO = false; +        LTOInfo.IsThinLTO = (Entry.ID == bitc::GLOBALVAL_SUMMARY_BLOCK_ID);          LTOInfo.HasSummary = true;          return LTOInfo;        } diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index ed0443f..c63dc8f 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -1531,7 +1531,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(      break;    }    case bitc::METADATA_BASIC_TYPE: { -    if (Record.size() < 6 || Record.size() > 8) +    if (Record.size() < 6 || Record.size() > 9)        return error("Invalid record");      IsDistinct = Record[0] & 1; @@ -1540,13 +1540,13 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(                                  ? static_cast<DINode::DIFlags>(Record[6])                                  : DINode::FlagZero;      uint32_t NumExtraInhabitants = (Record.size() > 7) ? Record[7] : 0; - +    uint32_t DataSizeInBits = (Record.size() > 8) ? Record[8] : 0;      Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[3]); -      MetadataList.assignValue(          GET_OR_DISTINCT(DIBasicType,                          (Context, Record[1], getMDString(Record[2]), SizeInBits, -                         Record[4], Record[5], NumExtraInhabitants, Flags)), +                         Record[4], Record[5], NumExtraInhabitants, +                         DataSizeInBits, Flags)),          NextMetadataNo);      NextMetadataNo++;      break; @@ -2323,8 +2323,9 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(          GET_OR_DISTINCT(DIObjCProperty,                          (Context, getMDString(Record[1]),                           getMDOrNull(Record[2]), Record[3], -                         getMDString(Record[4]), getMDString(Record[5]), -                         Record[6], getDITypeRefOrNull(Record[7]))), +                         /*GetterName=*/getMDString(Record[5]), +                         /*SetterName=*/getMDString(Record[4]), Record[6], +                         getDITypeRefOrNull(Record[7]))),          NextMetadataNo);      NextMetadataNo++;      break; diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 61aa7c2f5..76494c7 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -956,6 +956,8 @@ static uint64_t getAttrKindEncoding(Attribute::AttrKind Kind) {      return bitc::ATTR_KIND_CAPTURES;    case Attribute::DeadOnReturn:      return bitc::ATTR_KIND_DEAD_ON_RETURN; +  case Attribute::NoCreateUndefOrPoison: +    return bitc::ATTR_KIND_NO_CREATE_UNDEF_OR_POISON;    case Attribute::EndAttrKinds:      llvm_unreachable("Can not encode end-attribute kinds marker.");    case Attribute::None: @@ -1925,6 +1927,7 @@ void ModuleBitcodeWriter::writeDIBasicType(const DIBasicType *N,    Record.push_back(N->getEncoding());    Record.push_back(N->getFlags());    Record.push_back(N->getNumExtraInhabitants()); +  Record.push_back(N->getDataSizeInBits());    Stream.EmitRecord(bitc::METADATA_BASIC_TYPE, Record, Abbrev);    Record.clear();  | 
