summaryrefslogtreecommitdiff
path: root/include/llvm/InlineAsm.h
diff options
context:
space:
mode:
authorJohn Thompson <John.Thompson.JTSoftware@gmail.com>2010-10-29 17:29:13 +0000
committerJohn Thompson <John.Thompson.JTSoftware@gmail.com>2010-10-29 17:29:13 +0000
commit44ab89eb376af838d1123293a79975aede501464 (patch)
tree36a9f7729ea72c11d16566b7b0d57a843d741b6f /include/llvm/InlineAsm.h
parent3545635a606206232da80a4c18862fa3e06b9e4f (diff)
downloadllvm-44ab89eb376af838d1123293a79975aede501464.tar.gz
llvm-44ab89eb376af838d1123293a79975aede501464.tar.bz2
llvm-44ab89eb376af838d1123293a79975aede501464.tar.xz
Inline asm multiple alternative constraints development phase 2 - improved basic logic, added initial platform support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117667 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/InlineAsm.h')
-rw-r--r--include/llvm/InlineAsm.h23
1 files changed, 13 insertions, 10 deletions
diff --git a/include/llvm/InlineAsm.h b/include/llvm/InlineAsm.h
index 0cb55b7f6e..9343834325 100644
--- a/include/llvm/InlineAsm.h
+++ b/include/llvm/InlineAsm.h
@@ -16,8 +16,8 @@
#ifndef LLVM_INLINEASM_H
#define LLVM_INLINEASM_H
+#include "llvm/ADT/SmallVector.h"
#include "llvm/Value.h"
-#include <vector>
namespace llvm {
@@ -87,6 +87,8 @@ public:
isClobber // '~x'
};
+ typedef SmallVector<std::string,8> ConstraintCodeVector;
+
struct SubConstraintInfo {
/// MatchingInput - If this is not -1, this is an output constraint where an
/// input constraint is required to match it (e.g. "0"). The value is the
@@ -95,10 +97,14 @@ public:
signed char MatchingInput;
/// Code - The constraint code, either the register name (in braces) or the
/// constraint letter/number.
- std::vector<std::string> Codes;
+ ConstraintCodeVector Codes;
/// Default constructor.
SubConstraintInfo() : MatchingInput(-1) {}
};
+
+ typedef SmallVector<SubConstraintInfo,4> SubConstraintInfoVector;
+ struct ConstraintInfo;
+ typedef SmallVector<ConstraintInfo,16> ConstraintInfoVector;
struct ConstraintInfo {
/// Type - The basic type of the constraint: input/output/clobber
@@ -131,14 +137,14 @@ public:
/// Code - The constraint code, either the register name (in braces) or the
/// constraint letter/number.
- std::vector<std::string> Codes;
+ ConstraintCodeVector Codes;
/// isMultipleAlternative - '|': has multiple-alternative constraints.
bool isMultipleAlternative;
/// multipleAlternatives - If there are multiple alternative constraints,
/// this array will contain them. Otherwise it will be empty.
- std::vector<SubConstraintInfo> multipleAlternatives;
+ SubConstraintInfoVector multipleAlternatives;
/// The currently selected alternative constraint index.
unsigned currentAlternativeIndex;
@@ -152,8 +158,7 @@ public:
/// 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(StringRef Str,
- std::vector<InlineAsm::ConstraintInfo> &ConstraintsSoFar);
+ bool Parse(StringRef Str, ConstraintInfoVector &ConstraintsSoFar);
/// selectAlternative - Point this constraint to the alternative constraint
/// indicated by the index.
@@ -163,13 +168,11 @@ public:
/// 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<ConstraintInfo>
- ParseConstraints(StringRef ConstraintString);
+ static ConstraintInfoVector ParseConstraints(StringRef ConstraintString);
/// ParseConstraints - Parse the constraints of this inlineasm object,
/// returning them the same way that ParseConstraints(str) does.
- std::vector<ConstraintInfo>
- ParseConstraints() const {
+ ConstraintInfoVector ParseConstraints() const {
return ParseConstraints(Constraints);
}