aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode
diff options
context:
space:
mode:
authorFlorian Mayer <fmayer@google.com>2024-03-08 12:12:35 -0800
committerGitHub <noreply@github.com>2024-03-08 12:12:35 -0800
commit0861755e597e671424ee369f36dff5591b7178ee (patch)
tree81bac3cf28dec74438e0dd5f36df2f0f25fbbb0c /llvm/lib/Bitcode
parent0d7dba6300b452c751cde4eeaedcbfeb86f6185c (diff)
downloadllvm-0861755e597e671424ee369f36dff5591b7178ee.zip
llvm-0861755e597e671424ee369f36dff5591b7178ee.tar.gz
llvm-0861755e597e671424ee369f36dff5591b7178ee.tar.bz2
Revert "[IR] Add new Range attribute using new ConstantRange Attribute type" (#84549)
Reverts llvm/llvm-project#83171 broke sanitizer buildbot https://lab.llvm.org/buildbot/#/builders/168/builds/19110/steps/10/logs/stdio
Diffstat (limited to 'llvm/lib/Bitcode')
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp41
-rw-r--r--llvm/lib/Bitcode/Writer/BitcodeWriter.cpp61
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) {