diff options
author | Anders Carlsson <andersca@mac.com> | 2007-12-08 19:32:57 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2007-12-08 19:32:57 +0000 |
commit | 44fe49c9ccf29b8e9b66ce1f2375be6ec591c03c (patch) | |
tree | 914b45869024ea5d60e881e1dfba5e9582cb3317 | |
parent | c92942c5fe8330c8c090c84ecde31ee8240c95bb (diff) |
Add getTargetPrefix to TargetInfo, to be used with target specific intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44712 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Basic/TargetInfo.cpp | 7 | ||||
-rw-r--r-- | Driver/Targets.cpp | 23 | ||||
-rw-r--r-- | include/clang/Basic/TargetInfo.h | 6 |
3 files changed, 36 insertions, 0 deletions
diff --git a/Basic/TargetInfo.cpp b/Basic/TargetInfo.cpp index 6038e614a5..fcaeccffc0 100644 --- a/Basic/TargetInfo.cpp +++ b/Basic/TargetInfo.cpp @@ -56,6 +56,10 @@ const char* TargetInfo::getTargetTriple() const { return PrimaryTarget->getTargetTriple(); } +const char *TargetInfo::getTargetPrefix() const { + return PrimaryTarget->getTargetPrefix(); +} + /// DiagnoseNonPortability - When a use of a non-portable target feature is /// used, this method emits the diagnostic and marks the translation unit as /// non-portable. @@ -417,6 +421,9 @@ bool TargetInfo::validateInputConstraint(const char *Name, // Eventually, an unknown constraint should just be treated as 'g'. assert(0 && "Unknown input constraint type!"); } + case '%': // commutative + // FIXME: Fail if % is used with the last operand. + break; case 'i': // immediate integer. break; case 'r': // general register. diff --git a/Driver/Targets.cpp b/Driver/Targets.cpp index 63df5d48c8..400090871c 100644 --- a/Driver/Targets.cpp +++ b/Driver/Targets.cpp @@ -402,6 +402,10 @@ namespace PPC { return 0; } + const char *getTargetPrefix() { + return "ppc"; + } + } // End namespace PPC @@ -480,6 +484,10 @@ namespace X86 { return "~{dirflag},~{fpsr},~{flags}"; } + const char *getTargetPrefix() { + return "x86"; + } + } // End namespace X86 //===----------------------------------------------------------------------===// @@ -503,6 +511,9 @@ public: virtual const char *getVAListDeclaration() const { return getPPCVAListDeclaration(); } + virtual const char *getTargetPrefix() const { + return PPC::getTargetPrefix(); + } virtual void getGCCRegNames(const char * const *&Names, unsigned &NumNames) const { PPC::getGCCRegNames(Names, NumNames); @@ -537,6 +548,9 @@ public: virtual const char *getVAListDeclaration() const { return getPPCVAListDeclaration(); } + virtual const char *getTargetPrefix() const { + return PPC::getTargetPrefix(); + } virtual void getGCCRegNames(const char * const *&Names, unsigned &NumNames) const { PPC::getGCCRegNames(Names, NumNames); @@ -571,6 +585,9 @@ public: virtual const char *getVAListDeclaration() const { return getI386VAListDeclaration(); } + virtual const char *getTargetPrefix() const { + return X86::getTargetPrefix(); + } virtual void getGCCRegNames(const char * const *&Names, unsigned &NumNames) const { X86::getGCCRegNames(Names, NumNames); @@ -605,6 +622,9 @@ public: virtual const char *getVAListDeclaration() const { return getX86_64VAListDeclaration(); } + virtual const char *getTargetPrefix() const { + return X86::getTargetPrefix(); + } virtual void getGCCRegNames(const char * const *&Names, unsigned &NumNames) const { X86::getGCCRegNames(Names, NumNames); @@ -643,6 +663,9 @@ public: virtual const char *getVAListDeclaration() const { return getI386VAListDeclaration(); } + virtual const char *getTargetPrefix() const { + return X86::getTargetPrefix(); + } virtual void getGCCRegNames(const char * const *&Names, unsigned &NumNames) const { X86::getGCCRegNames(Names, NumNames); diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index 07292f78ce..d02af435fc 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -245,6 +245,10 @@ public: return static_cast<unsigned>(Size); } + /// getTargetPrefix - Return the target prefix used for identifying + /// llvm intrinsics. + const char *getTargetPrefix() const; + /// getTargetTriple - Return the target triple of the primary target. const char *getTargetTriple() const; @@ -280,6 +284,8 @@ public: /// TargetInfoImpl object was created from. const char* getTargetTriple() const { return Triple.c_str(); } + virtual const char *getTargetPrefix() const = 0; + /// getTargetDefines - Return a list of the target-specific #define values set /// when compiling to this target. Each string should be of the form /// "#define X Y\n". |