summaryrefslogtreecommitdiffstats
path: root/llvm
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
commit2a09ffe2f92249e7186b8ea4ffdbde9a3e7e707d (patch)
tree4a21767bd4010c497023131a71d2ef892afdf830 /llvm
parenta24617f5d4e901c08d06cdb98ab50a34075f7809 (diff)
downloadbcm5719-llvm-2a09ffe2f92249e7186b8ea4ffdbde9a3e7e707d.tar.gz
bcm5719-llvm-2a09ffe2f92249e7186b8ea4ffdbde9a3e7e707d.zip
Beef up the interface to inline asm constraint parsing, making it more
general, useful, and easier to use. llvm-svn: 25864
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/InlineAsm.h30
1 files changed, 27 insertions, 3 deletions
diff --git a/llvm/include/llvm/InlineAsm.h b/llvm/include/llvm/InlineAsm.h
index 50d00058fad..94d3bc86957 100644
--- a/llvm/include/llvm/InlineAsm.h
+++ b/llvm/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);
}
OpenPOWER on IntegriCloud