summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-02-01 01:27:37 +0000
committerChris Lattner <sabre@nondot.org>2006-02-01 01:27:37 +0000
commite202a253b1f28a564adf994154df3ea23c841afb (patch)
treebdcfe2d3c1ce090eaa3f8fcc8d664d92a58af813 /include
parent760df2988190552252ca7860b31aab49d058453a (diff)
downloadllvm-e202a253b1f28a564adf994154df3ea23c841afb.tar.gz
llvm-e202a253b1f28a564adf994154df3ea23c841afb.tar.bz2
llvm-e202a253b1f28a564adf994154df3ea23c841afb.tar.xz
Beef up the interface to inline asm constraint parsing, making it more
general, useful, and easier to use. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25864 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/InlineAsm.h30
1 files changed, 27 insertions, 3 deletions
diff --git a/include/llvm/InlineAsm.h b/include/llvm/InlineAsm.h
index 50d00058fa..94d3bc8695 100644
--- a/include/llvm/InlineAsm.h
+++ b/include/llvm/InlineAsm.h
@@ -70,17 +70,41 @@ public:
enum ConstraintPrefix {
isInput, // 'x'
isOutput, // '=x'
- isIndirectOutput, // '==x'
isClobber, // '~x'
};
+ struct ConstraintInfo {
+ /// Type - The basic type of the constraint: input/output/clobber
+ ///
+ ConstraintPrefix Type;
+
+ /// isEarlyClobber - "&": output operand writes result before inputs are all
+ /// read. This is only ever set for an output operand.
+ bool isEarlyClobber;
+
+ /// isIndirectOutput - If this is true for an output constraint, the address
+ /// to store the output result is passed as an operand to the call.
+ bool isIndirectOutput;
+
+ /// Code - The constraint code, either the register name (in braces) or the
+ /// constraint letter/number.
+ std::vector<std::string> Codes;
+
+ /// Parse - Analyze the specified string (e.g. "==&{eax}") and fill in the
+ /// fields in this structure. If the constraint string is not understood,
+ /// return true, otherwise return false.
+ bool Parse(const std::string &Str);
+ };
+
/// ParseConstraints - Split up the constraint string into the specific
/// constraints and their prefixes. If this returns an empty vector, and if
/// the constraint string itself isn't empty, there was an error parsing.
- static std::vector<std::pair<ConstraintPrefix, std::string> >
+ static std::vector<ConstraintInfo>
ParseConstraints(const std::string &ConstraintString);
- std::vector<std::pair<ConstraintPrefix, std::string> >
+ /// ParseConstraints - Parse the constraints of this inlineasm object,
+ /// returning them the same way that ParseConstraints(str) does.
+ std::vector<ConstraintInfo>
ParseConstraints() const {
return ParseConstraints(Constraints);
}