aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-02-13 01:10:38 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-02-13 01:10:38 +0000
commitc7363f1147f8d06c34683480b0cb7e24a395a534 (patch)
tree36c922c207681823fdc444373a8004260fb25cc8 /llvm/lib/Bitcode/Reader/BitcodeReader.cpp
parent193a4fdafd9d4d4d6bbb7a1885fb30427434fe97 (diff)
downloadllvm-c7363f1147f8d06c34683480b0cb7e24a395a534.zip
llvm-c7363f1147f8d06c34683480b0cb7e24a395a534.tar.gz
llvm-c7363f1147f8d06c34683480b0cb7e24a395a534.tar.bz2
AsmWriter/Bitcode: MDSubrange
llvm-svn: 229003
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index f64cd55..f781581 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -1173,6 +1173,8 @@ std::error_code BitcodeReader::ParseValueSymbolTable() {
}
}
+static int64_t unrotateSign(uint64_t U) { return U & 1 ? ~(U >> 1) : U >> 1; }
+
std::error_code BitcodeReader::ParseMetadata() {
unsigned NextMDValueNo = MDValueList.size();
@@ -1349,6 +1351,16 @@ std::error_code BitcodeReader::ParseMetadata() {
NextMDValueNo++);
break;
}
+ case bitc::METADATA_SUBRANGE: {
+ if (Record.size() != 3)
+ return Error("Invalid record");
+
+ MDValueList.AssignValue(
+ GET_OR_DISTINCT(MDSubrange, Record[0],
+ (Context, Record[1], unrotateSign(Record[2]))),
+ NextMDValueNo++);
+ break;
+ }
case bitc::METADATA_STRING: {
std::string String(Record.begin(), Record.end());
llvm::UpgradeMDStringConstant(String);