mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 19:12:56 +02:00
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
1ca1b4e032
commit
3e5ebc3e07
@ -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
Block a user