summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Liao <michael.hliao@gmail.com>2019-08-10 16:15:06 +0000
committerMichael Liao <michael.hliao@gmail.com>2019-08-10 16:15:06 +0000
commit8a25eabd42780616954f10e135effbd95edec847 (patch)
treedebe7a02e0916212823bf8c67424032815bbef5b
parent21c15ef38487ee91eea898dbe80bfc5f8d6c5252 (diff)
downloadbcm5719-llvm-8a25eabd42780616954f10e135effbd95edec847.tar.gz
bcm5719-llvm-8a25eabd42780616954f10e135effbd95edec847.zip
[TableGen] Correct the shift to the proper bit width.
- Replace the previous 32-bit shift with 64-bit one matching `OpInit`. llvm-svn: 368513
-rw-r--r--llvm/test/TableGen/FixedLenDecoderEmitter/InitValue.td11
-rw-r--r--llvm/utils/TableGen/FixedLenDecoderEmitter.cpp2
2 files changed, 12 insertions, 1 deletions
diff --git a/llvm/test/TableGen/FixedLenDecoderEmitter/InitValue.td b/llvm/test/TableGen/FixedLenDecoderEmitter/InitValue.td
index 27058baa73c..2ed3f1343b4 100644
--- a/llvm/test/TableGen/FixedLenDecoderEmitter/InitValue.td
+++ b/llvm/test/TableGen/FixedLenDecoderEmitter/InitValue.td
@@ -28,8 +28,19 @@ def bar : Instruction {
let Inst{15-8} = factor{7-0};
}
+def bax : Instruction {
+ let InOperandList = (ins i32imm:$factor);
+ field bits<16> Inst;
+ field bits<16> SoftFail = 0;
+ bits<33> factor;
+ let factor{32} = 1; // non-zero initial value
+ let Inst{15-8} = factor{32-25};
+ }
+
}
// CHECK: tmp = fieldFromInstruction(insn, 9, 7) << 1;
// CHECK: tmp = 0x1;
// CHECK: tmp |= fieldFromInstruction(insn, 9, 7) << 1;
+// CHECK: tmp = 0x100000000;
+// CHECK: tmp |= fieldFromInstruction(insn, 8, 7) << 25;
diff --git a/llvm/utils/TableGen/FixedLenDecoderEmitter.cpp b/llvm/utils/TableGen/FixedLenDecoderEmitter.cpp
index 7a6f44b9ab6..cfe06dd4d7f 100644
--- a/llvm/utils/TableGen/FixedLenDecoderEmitter.cpp
+++ b/llvm/utils/TableGen/FixedLenDecoderEmitter.cpp
@@ -2038,7 +2038,7 @@ populateInstruction(CodeGenTarget &Target, const Record &EncodingDef,
for (unsigned I = 0; I < OpBits->getNumBits(); ++I)
if (const BitInit *OpBit = dyn_cast<BitInit>(OpBits->getBit(I)))
if (OpBit->getValue())
- OpInfo.InitValue |= 1 << I;
+ OpInfo.InitValue |= 1ULL << I;
unsigned Base = ~0U;
unsigned Width = 0;
OpenPOWER on IntegriCloud