summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2012-09-03 20:40:52 +0000
committerChad Rosier <mcrosier@apple.com>2012-09-03 20:40:52 +0000
commit93380f63c9f8ae43e4949330e06c5b692cf22c05 (patch)
treec717a6c271f20e3ba80f3d995e1c5b8aea1325ba
parent591a26898f6ba89c930e3a43065d3840b9b2740a (diff)
downloadbcm5719-llvm-93380f63c9f8ae43e4949330e06c5b692cf22c05.tar.gz
bcm5719-llvm-93380f63c9f8ae43e4949330e06c5b692cf22c05.zip
[ms-inline asm] Use the new GetMCInstOperandNum() interface in the front-end.
llvm-svn: 163126
-rw-r--r--clang/lib/Sema/SemaStmtAsm.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp
index d3d646d246f..148604d97e8 100644
--- a/clang/lib/Sema/SemaStmtAsm.cpp
+++ b/clang/lib/Sema/SemaStmtAsm.cpp
@@ -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) {
OpenPOWER on IntegriCloud