diff options
author | Anders Carlsson <andersca@mac.com> | 2010-01-30 19:34:25 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-01-30 19:34:25 +0000 |
commit | fdba9c069023f686e2608affde02c82131ee1cf8 (patch) | |
tree | 5e1ed19e6c36f9ff7894e7f251bab93188f8240e /lib | |
parent | 83c021c6d33aa173cf1a6e3bc61006dabb042703 (diff) |
Combine AsmStmt::setOutputsAndInputs and AsmStmt::setClobbers.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94918 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/Stmt.cpp | 22 | ||||
-rw-r--r-- | lib/Frontend/PCHReaderStmt.cpp | 7 | ||||
-rw-r--r-- | lib/Sema/SemaStmt.cpp | 9 |
3 files changed, 17 insertions, 21 deletions
diff --git a/lib/AST/Stmt.cpp b/lib/AST/Stmt.cpp index 821bcb5106..577b0ac560 100644 --- a/lib/AST/Stmt.cpp +++ b/lib/AST/Stmt.cpp @@ -147,8 +147,6 @@ unsigned AsmStmt::getNumPlusOperands() const { return Res; } - - Expr *AsmStmt::getInputExpr(unsigned i) { return cast<Expr>(Exprs[i + NumOutputs]); } @@ -161,11 +159,13 @@ std::string AsmStmt::getInputConstraint(unsigned i) const { } -void AsmStmt::setOutputsAndInputs(unsigned NumOutputs, - unsigned NumInputs, - const std::string *Names, - StringLiteral **Constraints, - Stmt **Exprs) { +void AsmStmt::setOutputsAndInputsAndClobbers(const std::string *Names, + StringLiteral **Constraints, + Stmt **Exprs, + unsigned NumOutputs, + unsigned NumInputs, + StringLiteral **Clobbers, + unsigned NumClobbers) { this->NumOutputs = NumOutputs; this->NumInputs = NumInputs; this->Names.clear(); @@ -175,6 +175,9 @@ void AsmStmt::setOutputsAndInputs(unsigned NumOutputs, Constraints, Constraints + NumOutputs + NumInputs); this->Exprs.clear(); this->Exprs.insert(this->Exprs.end(), Exprs, Exprs + NumOutputs + NumInputs); + + this->Clobbers.clear(); + this->Clobbers.insert(this->Clobbers.end(), Clobbers, Clobbers + NumClobbers); } /// getNamedOperand - Given a symbolic operand reference like %[foo], @@ -197,11 +200,6 @@ int AsmStmt::getNamedOperand(const std::string &SymbolicName) const { return -1; } -void AsmStmt::setClobbers(StringLiteral **Clobbers, unsigned NumClobbers) { - this->Clobbers.clear(); - this->Clobbers.insert(this->Clobbers.end(), Clobbers, Clobbers + NumClobbers); -} - /// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing /// it into pieces. If the asm string is erroneous, emit errors and return /// true, otherwise return false. diff --git a/lib/Frontend/PCHReaderStmt.cpp b/lib/Frontend/PCHReaderStmt.cpp index 21c9cbf17c..630aa36fd2 100644 --- a/lib/Frontend/PCHReaderStmt.cpp +++ b/lib/Frontend/PCHReaderStmt.cpp @@ -325,14 +325,15 @@ unsigned PCHStmtReader::VisitAsmStmt(AsmStmt *S) { Constraints.push_back(cast_or_null<StringLiteral>(StmtStack[StackIdx++])); Exprs.push_back(StmtStack[StackIdx++]); } - S->setOutputsAndInputs(NumOutputs, NumInputs, - Names.data(), Constraints.data(), Exprs.data()); // Constraints llvm::SmallVector<StringLiteral*, 16> Clobbers; for (unsigned I = 0; I != NumClobbers; ++I) Clobbers.push_back(cast_or_null<StringLiteral>(StmtStack[StackIdx++])); - S->setClobbers(Clobbers.data(), NumClobbers); + + S->setOutputsAndInputsAndClobbers(Names.data(), Constraints.data(), + Exprs.data(), NumOutputs, NumInputs, + Clobbers.data(), NumClobbers); assert(StackIdx == StmtStack.size() && "Error deserializing AsmStmt"); return NumOutputs*2 + NumInputs*2 + NumClobbers + 1; diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp index fad3e4ba0a..1662360052 100644 --- a/lib/Sema/SemaStmt.cpp +++ b/lib/Sema/SemaStmt.cpp @@ -1197,8 +1197,7 @@ Sema::OwningStmtResult Sema::ActOnAsmStmt(SourceLocation AsmLoc, return StmtError(Diag(Literal->getLocStart(),diag::err_asm_wide_character) << Literal->getSourceRange()); - TargetInfo::ConstraintInfo Info(Literal->getString(), - Names[i]); + TargetInfo::ConstraintInfo Info(Literal->getString(), Names[i]); if (!Context.Target.validateOutputConstraint(Info)) return StmtError(Diag(Literal->getLocStart(), diag::err_asm_invalid_output_constraint) @@ -1263,11 +1262,9 @@ Sema::OwningStmtResult Sema::ActOnAsmStmt(SourceLocation AsmLoc, return StmtError(Diag(Literal->getLocStart(),diag::err_asm_wide_character) << Literal->getSourceRange()); - std::string Clobber(Literal->getStrData(), - Literal->getStrData() + - Literal->getByteLength()); + llvm::StringRef Clobber = Literal->getString(); - if (!Context.Target.isValidGCCRegisterName(Clobber.c_str())) + if (!Context.Target.isValidGCCRegisterName(Clobber)) return StmtError(Diag(Literal->getLocStart(), diag::err_asm_unknown_register_name) << Clobber); } |