diff options
author | Pete Cooper <peter_cooper@apple.com> | 2014-08-07 05:47:00 +0000 |
---|---|---|
committer | Pete Cooper <peter_cooper@apple.com> | 2014-08-07 05:47:00 +0000 |
commit | 2597764ad95e1972d071ca89f0366277bcb56b9a (patch) | |
tree | 5d318f532de8a42fc18deab4ed62141b6ecbb239 /llvm/lib/TableGen/TGParser.cpp | |
parent | 99ad2a3b6752de11e17460055f02c0a52132eae1 (diff) | |
download | bcm5719-llvm-2597764ad95e1972d071ca89f0366277bcb56b9a.tar.gz bcm5719-llvm-2597764ad95e1972d071ca89f0366277bcb56b9a.zip |
Change TableGen so that binary literals such as 0b001 are now sized.
Instead of these becoming an integer literal internally, they now become bits<n> values.
Prior to this change, 0b001 was 1 bit long. This is confusing as clearly the user gave 3 bits.
This new type holds both the literal value and the size, and so can ensure sizes match on initializers.
For example, this used to be legal
bits<1> x = 0b00;
but now it must be written as
bits<2> x = 0b00;
llvm-svn: 215084
Diffstat (limited to 'llvm/lib/TableGen/TGParser.cpp')
-rw-r--r-- | llvm/lib/TableGen/TGParser.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/TableGen/TGParser.cpp b/llvm/lib/TableGen/TGParser.cpp index d020a8bdc1a..709c7a52b9f 100644 --- a/llvm/lib/TableGen/TGParser.cpp +++ b/llvm/lib/TableGen/TGParser.cpp @@ -1182,6 +1182,15 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType, Lex.Lex(); // Skip '#'. return ParseSimpleValue(CurRec, ItemType, Mode); case tgtok::IntVal: R = IntInit::get(Lex.getCurIntVal()); Lex.Lex(); break; + case tgtok::BinaryIntVal: { + auto BinaryVal = Lex.getCurBinaryIntVal(); + SmallVector<Init*, 16> Bits(BinaryVal.second); + for (unsigned i = 0, e = BinaryVal.second; i != e; ++i) + Bits[i] = BitInit::get(BinaryVal.first & (1 << i)); + R = BitsInit::get(Bits); + Lex.Lex(); + break; + } case tgtok::StrVal: { std::string Val = Lex.getCurStrVal(); Lex.Lex(); |