#define LLVM_INLINEASM_H
#include "llvm/Value.h"
+#include "llvm/System/IncludeFile.h"
#include <vector>
namespace llvm {
InlineAsm(const FunctionType *Ty, const std::string &AsmString,
const std::string &Constraints, bool hasSideEffects);
+ virtual ~InlineAsm();
public:
/// InlineAsm::get - Return the the specified uniqued inline asm string.
enum ConstraintPrefix {
isInput, // 'x'
isOutput, // '=x'
- isClobber, // '~x'
+ isClobber // '~x'
};
struct ConstraintInfo {
/// to store the output result is passed as an operand to the call.
bool isIndirectOutput;
+ /// hasMatchingInput - This is set to true for an output constraint iff
+ /// there is an input constraint that is required to match it (e.g. "0").
+ bool hasMatchingInput;
+
+ /// isCommutative - This is set to true for a constraint that is commutative
+ /// with the next operand.
+ bool isCommutative;
+
/// 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);
+ bool Parse(const std::string &Str,
+ std::vector<InlineAsm::ConstraintInfo> &ConstraintsSoFar);
};
/// ParseConstraints - Split up the constraint string into the specific
} // End llvm namespace
+// Make sure the InlineAsm.cpp file is linked when this one is #included.
+FORCE_DEFINING_FILE_TO_BE_LINKED(InlineAsm)
+
#endif