forked from OSchip/llvm-project
Check whether MCInst operand isImm before calling getImm.
When processing possible aliases, TableGen assumes that if an operand *can* be an immediate, then it always *will* be. This is incorrect for the AArch64 backend. This patch inserts a check in the generated code to make sure isImm is true first. llvm-svn: 171972
This commit is contained in:
parent
f1450d8d7c
commit
ab7689ecee
|
@ -863,12 +863,18 @@ void AsmWriterEmitter::EmitPrintAliasInstruction(raw_ostream &O) {
|
|||
|
||||
break;
|
||||
}
|
||||
case CodeGenInstAlias::ResultOperand::K_Imm:
|
||||
Cond = std::string("MI->getOperand(") +
|
||||
llvm::utostr(i) + ").getImm() == " +
|
||||
llvm::utostr(CGA->ResultOperands[i].getImm());
|
||||
case CodeGenInstAlias::ResultOperand::K_Imm: {
|
||||
std::string Op = "MI->getOperand(" + llvm::utostr(i) + ")";
|
||||
|
||||
// Just because the alias has an immediate result, doesn't mean the
|
||||
// MCInst will. An MCExpr could be present, for example.
|
||||
IAP->addCond(Op + ".isImm()");
|
||||
|
||||
Cond = Op + ".getImm() == "
|
||||
+ llvm::utostr(CGA->ResultOperands[i].getImm());
|
||||
IAP->addCond(Cond);
|
||||
break;
|
||||
}
|
||||
case CodeGenInstAlias::ResultOperand::K_Reg:
|
||||
// If this is zero_reg, something's playing tricks we're not
|
||||
// equipped to handle.
|
||||
|
|
Loading…
Reference in New Issue