diff options
author | David Greene <greened@obbligato.org> | 2011-07-29 19:07:00 +0000 |
---|---|---|
committer | David Greene <greened@obbligato.org> | 2011-07-29 19:07:00 +0000 |
commit | b3da8123c0a440f4b7115ecbcef2ccb85e328b68 (patch) | |
tree | 825f13fa25380b19a824b723f1b1f56101e57f20 /llvm/utils/TableGen/CodeEmitterGen.cpp | |
parent | 4bd5aebaeadf22ef74a716710009056cb511cc14 (diff) | |
download | bcm5719-llvm-b3da8123c0a440f4b7115ecbcef2ccb85e328b68.tar.gz bcm5719-llvm-b3da8123c0a440f4b7115ecbcef2ccb85e328b68.zip |
[AVX] Remove Mutating Members from Inits
Get rid of all Init members that modify internal state. This is in
preparation for making references to Inits const.
llvm-svn: 136483
Diffstat (limited to 'llvm/utils/TableGen/CodeEmitterGen.cpp')
-rw-r--r-- | llvm/utils/TableGen/CodeEmitterGen.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/llvm/utils/TableGen/CodeEmitterGen.cpp b/llvm/utils/TableGen/CodeEmitterGen.cpp index d828dfc25db..8b5cddae25e 100644 --- a/llvm/utils/TableGen/CodeEmitterGen.cpp +++ b/llvm/utils/TableGen/CodeEmitterGen.cpp @@ -41,19 +41,23 @@ void CodeEmitterGen::reverseBits(std::vector<Record*> &Insts) { BitsInit *BI = R->getValueAsBitsInit("Inst"); unsigned numBits = BI->getNumBits(); - BitsInit *NewBI = new BitsInit(numBits); + + SmallVector<Init *, 16> NewBits(numBits); + for (unsigned bit = 0, end = numBits / 2; bit != end; ++bit) { unsigned bitSwapIdx = numBits - bit - 1; Init *OrigBit = BI->getBit(bit); Init *BitSwap = BI->getBit(bitSwapIdx); - NewBI->setBit(bit, BitSwap); - NewBI->setBit(bitSwapIdx, OrigBit); + NewBits[bit] = BitSwap; + NewBits[bitSwapIdx] = OrigBit; } if (numBits % 2) { unsigned middle = (numBits + 1) / 2; - NewBI->setBit(middle, BI->getBit(middle)); + NewBits[middle] = BI->getBit(middle); } + BitsInit *NewBI = new BitsInit(ArrayRef<Init *>(NewBits)); + // Update the bits in reversed order so that emitInstrOpBits will get the // correct endianness. R->getValue("Inst")->setValue(NewBI); |