[ms-inline asm] Use the new GetMCInstOperandNum() interface in the front-end.

llvm-svn: 163126
This commit is contained in:
Chad Rosier 2012-09-03 20:40:52 +00:00
parent 591a26898f
commit 93380f63c9
1 changed files with 20 additions and 3 deletions

View File

@ -568,14 +568,31 @@ StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc,
// Build the list of clobbers, outputs and inputs.
unsigned NumDefs = Desc.getNumDefs();
for (unsigned i = 0, e = Inst.getNumOperands(); i != e; ++i) {
const llvm::MCOperand &Op = Inst.getOperand(i);
for (unsigned i = 1, e = Operands.size(); i != e; ++i) {
unsigned NumMCOperands;
unsigned MCIdx = TargetParser->GetMCInstOperandNum(Kind, Inst, Operands, i,
NumMCOperands);
assert (NumMCOperands && "Expected at least 1 MCOperand!");
// If we have a one-to-many mapping, then search for the MCExpr.
if (NumMCOperands > 1) {
bool foundExpr = false;
for (unsigned j = MCIdx, e = MCIdx + NumMCOperands; j != e; ++j) {
if (Inst.getOperand(j).isExpr()) {
foundExpr = true;
MCIdx = j;
break;
}
}
assert (foundExpr && "Expected for find an expression!");
}
const llvm::MCOperand &Op = Inst.getOperand(MCIdx);
// Immediate.
if (Op.isImm() || Op.isFPImm())
continue;
bool isDef = NumDefs && (i < NumDefs);
bool isDef = NumDefs && (MCIdx < NumDefs);
// Register/Clobber.
if (Op.isReg() && isDef) {