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
This commit is contained in:
Owen Anderson 2011-08-01 22:45:43 +00:00
parent 02c8460a74
commit cf6039548b

View File

@ -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<VarBitInit*>(Bits.getBit(bi));
if (!BI) {
if (BI)
Var = dynamic_cast<VarInit*>(BI->getVariable());
else
Var = dynamic_cast<VarInit*>(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<VarInit*>(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;