From e202a253b1f28a564adf994154df3ea23c841afb Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 1 Feb 2006 01:27:37 +0000 Subject: [PATCH] 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 --- include/llvm/InlineAsm.h | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/include/llvm/InlineAsm.h b/include/llvm/InlineAsm.h index 50d00058fad..94d3bc86957 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 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 > + static std::vector ParseConstraints(const std::string &ConstraintString); - std::vector > + /// ParseConstraints - Parse the constraints of this inlineasm object, + /// returning them the same way that ParseConstraints(str) does. + std::vector ParseConstraints() const { return ParseConstraints(Constraints); } -- 2.34.1