diff options
author | Chris Lattner <sabre@nondot.org> | 2006-02-01 01:27:37 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-02-01 01:27:37 +0000 |
commit | e202a253b1f28a564adf994154df3ea23c841afb (patch) | |
tree | bdcfe2d3c1ce090eaa3f8fcc8d664d92a58af813 | |
parent | 760df2988190552252ca7860b31aab49d058453a (diff) |
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
-rw-r--r-- | include/llvm/InlineAsm.h | 30 |
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); } |