From 70cae83ffd093f183dec07c464db3c0bb6b92c10 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Fri, 2 Mar 2012 10:54:52 -0500 Subject: [PATCH 1/3] Add r600 TargetInfo --- lib/Basic/Targets.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 70 insertions(+), 0 deletions(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 85dfd78..64dc01c 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -1068,6 +1068,73 @@ namespace { } namespace { + +class AMDGPUTargetInfo : public TargetInfo { +public: + + AMDGPUTargetInfo(const std::string& triple) : TargetInfo(triple) { } + + virtual const char * getClobbers() const { + return ""; + } + + virtual void getGCCRegNames(const char * const *&Names, + unsigned &numNames) const { + Names = NULL; + numNames = 0; + } + + virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, + unsigned &NumAliases) const { + Aliases = NULL; + NumAliases = 0; + } + + virtual bool validateAsmConstraint(const char *&Name, + TargetInfo::ConstraintInfo &info) const { + return true; + } + + virtual void getTargetBuiltins(const Builtin::Info *&Records, + unsigned &NumRecords) const { + Records = NULL; + NumRecords = 0; + } +}; + + +static const unsigned R600AddrSpaceMap[] = { + 1, // opencl_global + 3, // opencl_local + 2 // opencl_constant +}; + +class R600TargetInfo : public AMDGPUTargetInfo { +public: + R600TargetInfo(const std::string& triple) : AMDGPUTargetInfo(triple) { + DescriptionString = + "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16" + "-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:32:32" + "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64" + "-v96:128:128-v128:128:128-v192:256:256-v256:256:256" + "-v512:512:512-v1024:1024:1024-v2048:2048:2048" + "-n8:16:32:64"; + AddrSpaceMap = &R600AddrSpaceMap; + } + + virtual void getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const { + Builder.defineMacro("__R600__"); + } + + virtual const char * getVAListDeclaration() const { + return ""; + } +}; + +} // end anonymous namespace + +namespace { // MBlaze abstract base class class MBlazeTargetInfo : public TargetInfo { static const char * const GCCRegNames[]; @@ -3963,6 +4030,9 @@ static TargetInfo *AllocateTarget(const std::string &T) { case llvm::Triple::mblaze: return new MBlazeTargetInfo(T); + case llvm::Triple::r600: + return new R600TargetInfo(T); + case llvm::Triple::sparc: switch (os) { case llvm::Triple::Linux: -- 1.7.7.6