diff options
author | Chris Lattner <sabre@nondot.org> | 2009-03-10 06:33:24 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-03-10 06:33:24 +0000 |
commit | 10ca96ae9aed6906c3302403ef1a146a8d4c6b74 (patch) | |
tree | 5b363ae980aee4bc3a1552ca642a50ef2d2f9184 /lib/CodeGen/CGStmt.cpp | |
parent | bb57265fdba1e8af05dd917b8bf243d49cfb3465 (diff) |
move matching of named operands into AsmStmt class. At the same
time handle + operands in operand counting, fixing asm.c:t7 to
expand into $2 instead of $1.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66531 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGStmt.cpp')
-rw-r--r-- | lib/CodeGen/CGStmt.cpp | 29 |
1 files changed, 5 insertions, 24 deletions
diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp index ff1f76f4a3..93c4f5b07d 100644 --- a/lib/CodeGen/CGStmt.cpp +++ b/lib/CodeGen/CGStmt.cpp @@ -771,34 +771,15 @@ static std::string ConvertAsmString(const AsmStmt& S, bool &Failed) { if (EscapedChar == '[') { const char *NameEnd = (const char*)memchr(StrStart, ']', StrEnd-StrStart); // FIXME: Should be caught by sema. + // FIXME: Does sema catch multiple operands with the same name? assert(NameEnd != 0 && "Could not parse symbolic name"); - std::string SymbolicName(StrStart, NameEnd); - StrStart = NameEnd+1; - int Index = -1; - - // Check if this is an output operand. - for (unsigned i = 0; i != S.getNumOutputs(); ++i) { - if (S.getOutputName(i) == SymbolicName) { - Index = i; - break; - } - } - - if (Index == -1) { - for (unsigned i = 0; i != S.getNumInputs(); ++i) { - if (S.getInputName(i) == SymbolicName) { - Index = S.getNumOutputs() + i; - break; - } - } - } - - assert(Index != -1 && "Did not find right operand!"); - - Result += '$' + llvm::utostr(Index); + int OperandIndex = S.getNamedOperand(SymbolicName); + assert(OperandIndex != -1 && "FIXME: Catch in Sema."); + + Result += '$' + llvm::utostr(unsigned(OperandIndex)); continue; } |