diff options
Diffstat (limited to 'llvm/lib/Bitcode')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 41 | ||||
-rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 61 |
2 files changed, 20 insertions, 82 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 9c63116..832907a 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -815,30 +815,6 @@ private: return getFnValueByID(ValNo, Ty, TyID, ConstExprInsertBB); } - Expected<ConstantRange> readConstantRange(ArrayRef<uint64_t> Record, - unsigned &OpNum) { - if (Record.size() - OpNum < 3) - return error("Too few records for range"); - unsigned BitWidth = Record[OpNum++]; - if (BitWidth > 64) { - unsigned LowerActiveWords = Record[OpNum]; - unsigned UpperActiveWords = Record[OpNum++] >> 32; - if (Record.size() - OpNum < LowerActiveWords + UpperActiveWords) - return error("Too few records for range"); - APInt Lower = - readWideAPInt(ArrayRef(&Record[OpNum], LowerActiveWords), BitWidth); - OpNum += LowerActiveWords; - APInt Upper = - readWideAPInt(ArrayRef(&Record[OpNum], UpperActiveWords), BitWidth); - OpNum += UpperActiveWords; - return ConstantRange(Lower, Upper); - } else { - int64_t Start = BitcodeReader::decodeSignRotatedValue(Record[OpNum++]); - int64_t End = BitcodeReader::decodeSignRotatedValue(Record[OpNum++]); - return ConstantRange(APInt(BitWidth, Start), APInt(BitWidth, End)); - } - } - /// Upgrades old-style typeless byval/sret/inalloca attributes by adding the /// corresponding argument's pointee type. Also upgrades intrinsics that now /// require an elementtype attribute. @@ -2127,8 +2103,6 @@ static Attribute::AttrKind getAttrFromCode(uint64_t Code) { return Attribute::CoroDestroyOnlyWhenComplete; case bitc::ATTR_KIND_DEAD_ON_UNWIND: return Attribute::DeadOnUnwind; - case bitc::ATTR_KIND_RANGE: - return Attribute::Range; } } @@ -2298,21 +2272,6 @@ Error BitcodeReader::parseAttributeGroupBlock() { return error("Not a type attribute"); B.addTypeAttr(Kind, HasType ? getTypeByID(Record[++i]) : nullptr); - } else if (Record[i] == 7) { - Attribute::AttrKind Kind; - - i++; - if (Error Err = parseAttrKind(Record[i++], &Kind)) - return Err; - if (!Attribute::isConstantRangeAttrKind(Kind)) - return error("Not a ConstantRange attribute"); - - Expected<ConstantRange> MaybeCR = readConstantRange(Record, i); - if (!MaybeCR) - return MaybeCR.takeError(); - i--; - - B.addConstantRangeAttr(Kind, MaybeCR.get()); } else { return error("Invalid attribute group entry"); } diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 597f493..656f2a6 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -844,8 +844,6 @@ static uint64_t getAttrKindEncoding(Attribute::AttrKind Kind) { return bitc::ATTR_KIND_CORO_ONLY_DESTROY_WHEN_COMPLETE; case Attribute::DeadOnUnwind: return bitc::ATTR_KIND_DEAD_ON_UNWIND; - case Attribute::Range: - return bitc::ATTR_KIND_RANGE; case Attribute::EndAttrKinds: llvm_unreachable("Can not encode end-attribute kinds marker."); case Attribute::None: @@ -858,39 +856,6 @@ static uint64_t getAttrKindEncoding(Attribute::AttrKind Kind) { llvm_unreachable("Trying to encode unknown attribute"); } -static void emitSignedInt64(SmallVectorImpl<uint64_t> &Vals, uint64_t V) { - if ((int64_t)V >= 0) - Vals.push_back(V << 1); - else - Vals.push_back((-V << 1) | 1); -} - -static void emitWideAPInt(SmallVectorImpl<uint64_t> &Vals, const APInt &A) { - // We have an arbitrary precision integer value to write whose - // bit width is > 64. However, in canonical unsigned integer - // format it is likely that the high bits are going to be zero. - // So, we only write the number of active words. - unsigned NumWords = A.getActiveWords(); - const uint64_t *RawData = A.getRawData(); - for (unsigned i = 0; i < NumWords; i++) - emitSignedInt64(Vals, RawData[i]); -} - -static void emitConstantRange(SmallVectorImpl<uint64_t> &Record, - const ConstantRange &CR) { - unsigned BitWidth = CR.getBitWidth(); - Record.push_back(BitWidth); - if (BitWidth > 64) { - Record.push_back(CR.getLower().getActiveWords() | - (uint64_t(CR.getUpper().getActiveWords()) << 32)); - emitWideAPInt(Record, CR.getLower()); - emitWideAPInt(Record, CR.getUpper()); - } else { - emitSignedInt64(Record, CR.getLower().getSExtValue()); - emitSignedInt64(Record, CR.getUpper().getSExtValue()); - } -} - void ModuleBitcodeWriter::writeAttributeGroupTable() { const std::vector<ValueEnumerator::IndexAndAttrSet> &AttrGrps = VE.getAttributeGroups(); @@ -924,17 +889,13 @@ void ModuleBitcodeWriter::writeAttributeGroupTable() { Record.append(Val.begin(), Val.end()); Record.push_back(0); } - } else if (Attr.isTypeAttribute()) { + } else { + assert(Attr.isTypeAttribute()); Type *Ty = Attr.getValueAsType(); Record.push_back(Ty ? 6 : 5); Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum())); if (Ty) Record.push_back(VE.getTypeID(Attr.getValueAsType())); - } else { - assert(Attr.isConstantRangeAttribute()); - Record.push_back(7); - Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum())); - emitConstantRange(Record, Attr.getValueAsConstantRange()); } } @@ -1755,6 +1716,24 @@ void ModuleBitcodeWriter::writeDIGenericSubrange( Record.clear(); } +static void emitSignedInt64(SmallVectorImpl<uint64_t> &Vals, uint64_t V) { + if ((int64_t)V >= 0) + Vals.push_back(V << 1); + else + Vals.push_back((-V << 1) | 1); +} + +static void emitWideAPInt(SmallVectorImpl<uint64_t> &Vals, const APInt &A) { + // We have an arbitrary precision integer value to write whose + // bit width is > 64. However, in canonical unsigned integer + // format it is likely that the high bits are going to be zero. + // So, we only write the number of active words. + unsigned NumWords = A.getActiveWords(); + const uint64_t *RawData = A.getRawData(); + for (unsigned i = 0; i < NumWords; i++) + emitSignedInt64(Vals, RawData[i]); +} + void ModuleBitcodeWriter::writeDIEnumerator(const DIEnumerator *N, SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) { |