From cf6039548bd7ee4ad960da0a480b399869f6fc6f Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Mon, 1 Aug 2011 22:45:43 +0000 Subject: Make the FixedLengthDecoderEmitter smart enough to autogenerate decoders for encodings like "let Inst{11-7} = foo;", where the RHS has no bitwidth specifiers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136660 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/FixedLenDecoderEmitter.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'utils/TableGen/FixedLenDecoderEmitter.cpp') diff --git a/utils/TableGen/FixedLenDecoderEmitter.cpp b/utils/TableGen/FixedLenDecoderEmitter.cpp index 249da8e25f..a262394d5b 100644 --- a/utils/TableGen/FixedLenDecoderEmitter.cpp +++ b/utils/TableGen/FixedLenDecoderEmitter.cpp @@ -1267,8 +1267,14 @@ static bool populateInstruction(const CodeGenInstruction &CGI, unsigned Offset = 0; for (unsigned bi = 0; bi < Bits.getNumBits(); ++bi) { + VarInit *Var = 0; VarBitInit *BI = dynamic_cast(Bits.getBit(bi)); - if (!BI) { + if (BI) + Var = dynamic_cast(BI->getVariable()); + else + Var = dynamic_cast(Bits.getBit(bi)); + + if (!Var) { if (Base != ~0U) { OpInfo.addField(Base, Width, Offset); Base = ~0U; @@ -1278,8 +1284,6 @@ static bool populateInstruction(const CodeGenInstruction &CGI, continue; } - VarInit *Var = dynamic_cast(BI->getVariable()); - assert(Var); if (Var->getName() != NI->second && Var->getName() != TiedNames[NI->second]) { if (Base != ~0U) { @@ -1294,8 +1298,8 @@ static bool populateInstruction(const CodeGenInstruction &CGI, if (Base == ~0U) { Base = bi; Width = 1; - Offset = BI->getBitNum(); - } else if (BI->getBitNum() != Offset + Width) { + Offset = BI ? BI->getBitNum() : 0; + } else if (BI && BI->getBitNum() != Offset + Width) { OpInfo.addField(Base, Width, Offset); Base = bi; Width = 1; -- cgit v1.2.3