diff options
author | Eric Christopher <echristo@apple.com> | 2011-06-17 01:53:34 +0000 |
---|---|---|
committer | Eric Christopher <echristo@apple.com> | 2011-06-17 01:53:34 +0000 |
commit | e3e07a5b3490bc2977859d56bac211afac2236fb (patch) | |
tree | aa12bb9ce1f8df23213fd22704e9c990155a529a /lib/CodeGen | |
parent | dda231a4a72f793476ce2fa5e9f420c5ba76d267 (diff) |
Check the specific target to figure out if a constraint is a valid
register constraint. Note that we're not checking if the register itself
is valid for the constraint.
Fixes rdar://9382985
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133226 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CGStmt.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp index 187d5a6c3c..86b9e2b997 100644 --- a/lib/CodeGen/CGStmt.cpp +++ b/lib/CodeGen/CGStmt.cpp @@ -1278,8 +1278,11 @@ AddVariableConstraints(const std::string &Constraint, const Expr &AsmExpr, return Constraint; llvm::StringRef Register = Attr->getLabel(); assert(Target.isValidGCCRegisterName(Register)); - // FIXME: We should check which registers are compatible with "r" or "x". - if (Constraint != "r" && Constraint != "x") { + // We're using validateOutputConstraint here because we only care if + // this is a register constraint. + TargetInfo::ConstraintInfo Info(Constraint, ""); + if (Target.validateOutputConstraint(Info) && + !Info.allowsRegister()) { CGM.ErrorUnsupported(&Stmt, "__asm__"); return Constraint; } |