[patch] fix for TCE support

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[patch] fix for TCE support

Pekka Jääskeläinen
Hello,

Attached patch fixes TCE support of Clang for the current
trunk version. Tests pass.

Best regards,
--
Pekka
http://tce.cs.tut.fi

Index: include/clang/Driver/HostInfo.h
===================================================================
--- include/clang/Driver/HostInfo.h (revision 97443)
+++ include/clang/Driver/HostInfo.h (working copy)
@@ -80,6 +80,8 @@
                                         const llvm::Triple& Triple);
 const HostInfo *createLinuxHostInfo(const Driver &D,
                                     const llvm::Triple& Triple);
+const HostInfo *createTCEHostInfo(const Driver &D,
+                                  const llvm::Triple& Triple);
 const HostInfo *createUnknownHostInfo(const Driver &D,
                                       const llvm::Triple& Triple);
 
Index: lib/Basic/Targets.cpp
===================================================================
--- lib/Basic/Targets.cpp (revision 97443)
+++ lib/Basic/Targets.cpp (working copy)
@@ -1892,9 +1892,10 @@
       FloatFormat = &llvm::APFloat::IEEEsingle;
       DoubleFormat = &llvm::APFloat::IEEEsingle;
       LongDoubleFormat = &llvm::APFloat::IEEEsingle;
-      DescriptionString = "E-p:32:32:32-a0:32:32"
-                          "-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64"
-                          "-f32:32:32-f64:32:64-n32";
+      DescriptionString = "E-p:32:32:32-i1:8:8-i8:8:32-"
+                          "i16:16:32-i32:32:32-i64:32:64-"
+                          "f32:32:32-f64:64:64-v64:64:64-"
+                          "v128:128:128-a0:0:64";
     }
 
     virtual void getTargetDefines(const LangOptions &Opts,
Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp (revision 97443)
+++ lib/Driver/ToolChains.cpp (working copy)
@@ -728,6 +728,67 @@
   return new DerivedArgList(Args, true);
 }
 
+
+/// TCEToolChain - A tool chain using the llvm bitcode tools to perform
+/// all subcommands. See http://tce.cs.tut.fi for our peculiar target.
+/// Currently does not support anything else but compilation.
+
+TCEToolChain::TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple)
+  : ToolChain(Host, Triple)
+{
+  // Path mangling to find libexec
+  std::string Path(getDriver().Dir);
+
+  Path += "/../libexec";
+  getProgramPaths().push_back(Path);
+}
+
+TCEToolChain::~TCEToolChain() {
+  for (llvm::DenseMap<unsigned, Tool*>::iterator
+           it = Tools.begin(), ie = Tools.end(); it != ie; ++it)
+      delete it->second;
+}
+
+bool TCEToolChain::IsMathErrnoDefault() const {
+  return true;
+}
+
+bool TCEToolChain::IsUnwindTablesDefault() const {
+  return false;
+}
+
+const char *TCEToolChain::GetDefaultRelocationModel() const {
+  return "static";
+}
+
+const char *TCEToolChain::GetForcedPicModel() const {
+  return 0;
+}
+
+Tool &TCEToolChain::SelectTool(const Compilation &C,
+                            const JobAction &JA) const {
+  Action::ActionClass Key;
+  Key = Action::AnalyzeJobClass;
+
+  Tool *&T = Tools[Key];
+  if (!T) {
+    switch (Key) {
+    case Action::PreprocessJobClass:
+      T = new tools::gcc::Preprocess(*this); break;
+    case Action::AnalyzeJobClass:
+      T = new tools::Clang(*this); break;
+    default:
+     assert(false && "Unsupported action for TCE target.");
+    }
+  }
+  return *T;
+}
+
+DerivedArgList *TCEToolChain::TranslateArgs(InputArgList &Args,
+                                            const char *BoundArch) const {
+  return new DerivedArgList(Args, true);
+}
+
 /// OpenBSD - OpenBSD tool chain which can call as(1) and ld(1) directly.
 
 OpenBSD::OpenBSD(const HostInfo &Host, const llvm::Triple& Triple)
Index: lib/Driver/ToolChains.h
===================================================================
--- lib/Driver/ToolChains.h (revision 97443)
+++ lib/Driver/ToolChains.h (working copy)
@@ -267,6 +267,26 @@
 };
 
 
+/// TCEToolChain - A tool chain using the llvm bitcode tools to perform
+/// all subcommands. See http://tce.cs.tut.fi for our peculiar target.
+class VISIBILITY_HIDDEN TCEToolChain : public ToolChain {
+public:
+  TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple);
+  ~TCEToolChain();
+
+  virtual DerivedArgList *TranslateArgs(InputArgList &Args,
+                                        const char *BoundArch) const;
+  virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
+  bool IsMathErrnoDefault() const;
+  bool IsUnwindTablesDefault() const;
+  const char* GetDefaultRelocationModel() const;
+  const char* GetForcedPicModel() const;
+
+private:
+  mutable llvm::DenseMap<unsigned, Tool*> Tools;
+
+};
+
 } // end namespace toolchains
 } // end namespace driver
 } // end namespace clang
Index: lib/Driver/HostInfo.cpp
===================================================================
--- lib/Driver/HostInfo.cpp (revision 97443)
+++ lib/Driver/HostInfo.cpp (working copy)
@@ -157,6 +157,46 @@
   return TC;
 }
 
+// TCE Host Info
+
+/// TCEHostInfo - TCE host information implementation (see http://tce.cs.tut.fi)
+class TCEHostInfo : public HostInfo {
+
+public:
+  TCEHostInfo(const Driver &D, const llvm::Triple &Triple);
+  ~TCEHostInfo() {};
+
+  virtual bool useDriverDriver() const;
+
+  virtual types::ID lookupTypeForExtension(const char *Ext) const {
+    types::ID Ty = types::lookupTypeForExtension(Ext);
+
+    if (Ty == types::TY_PP_Asm)
+      return types::TY_Asm;
+
+    return Ty;
+  }
+
+  virtual ToolChain *CreateToolChain(const ArgList &Args,
+                                     const char *ArchName) const;
+};
+
+TCEHostInfo::TCEHostInfo(const Driver &D, const llvm::Triple& Triple)
+  : HostInfo(D, Triple) {
+}
+
+bool TCEHostInfo::useDriverDriver() const {
+  return false;
+}
+
+ToolChain *TCEHostInfo::CreateToolChain(const ArgList &Args,
+                                        const char *ArchName) const {
+  llvm::Triple TCTriple(getTriple());
+//  TCTriple.setArchName(ArchName);
+  return new toolchains::TCEToolChain(*this, TCTriple);
+}
+
+
 // Unknown Host Info
 
 /// UnknownHostInfo - Generic host information to use for unknown hosts.
@@ -536,6 +576,12 @@
 }
 
 const HostInfo *
+clang::driver::createTCEHostInfo(const Driver &D,
+                                   const llvm::Triple& Triple) {
+  return new TCEHostInfo(D, Triple);
+}
+
+const HostInfo *
 clang::driver::createUnknownHostInfo(const Driver &D,
                                      const llvm::Triple& Triple) {
   return new UnknownHostInfo(D, Triple);
Index: lib/Driver/Driver.cpp
===================================================================
--- lib/Driver/Driver.cpp (revision 97443)
+++ lib/Driver/Driver.cpp (working copy)
@@ -1145,6 +1145,10 @@
   llvm::PrettyStackTraceString CrashInfo("Constructing host");
   llvm::Triple Triple(TripleStr);
 
+  // TCE is an osless target
+  if (Triple.getArchName() == "tce")
+    return createTCEHostInfo(*this, Triple);
+
   switch (Triple.getOS()) {
   case llvm::Triple::AuroraUX:
     return createAuroraUXHostInfo(*this, Triple);

_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: [patch] fix for TCE support

Chris Lattner

On Mar 1, 2010, at 6:12 AM, Pekka Jääskeläinen wrote:

> Hello,
>
> Attached patch fixes TCE support of Clang for the current
> trunk version. Tests pass.

Hi Pekka, the patch looks good to me, please commit.  If you don't have commit access, please send it to me as a non-inline attachment and I'll apply it for you, thanks.

-Chris

>
> Best regards,
> --
> Pekka
> http://tce.cs.tut.fi
> Index: include/clang/Driver/HostInfo.h
> ===================================================================
> --- include/clang/Driver/HostInfo.h (revision 97443)
> +++ include/clang/Driver/HostInfo.h (working copy)
> @@ -80,6 +80,8 @@
>                                         const llvm::Triple& Triple);
> const HostInfo *createLinuxHostInfo(const Driver &D,
>                                     const llvm::Triple& Triple);
> +const HostInfo *createTCEHostInfo(const Driver &D,
> +                                  const llvm::Triple& Triple);
> const HostInfo *createUnknownHostInfo(const Driver &D,
>                                       const llvm::Triple& Triple);
>
> Index: lib/Basic/Targets.cpp
> ===================================================================
> --- lib/Basic/Targets.cpp (revision 97443)
> +++ lib/Basic/Targets.cpp (working copy)
> @@ -1892,9 +1892,10 @@
>       FloatFormat = &llvm::APFloat::IEEEsingle;
>       DoubleFormat = &llvm::APFloat::IEEEsingle;
>       LongDoubleFormat = &llvm::APFloat::IEEEsingle;
> -      DescriptionString = "E-p:32:32:32-a0:32:32"
> -                          "-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64"
> -                          "-f32:32:32-f64:32:64-n32";
> +      DescriptionString = "E-p:32:32:32-i1:8:8-i8:8:32-"
> +                          "i16:16:32-i32:32:32-i64:32:64-"
> +                          "f32:32:32-f64:64:64-v64:64:64-"
> +                          "v128:128:128-a0:0:64";
>     }
>
>     virtual void getTargetDefines(const LangOptions &Opts,
> Index: lib/Driver/ToolChains.cpp
> ===================================================================
> --- lib/Driver/ToolChains.cpp (revision 97443)
> +++ lib/Driver/ToolChains.cpp (working copy)
> @@ -728,6 +728,67 @@
>   return new DerivedArgList(Args, true);
> }
>
> +
> +/// TCEToolChain - A tool chain using the llvm bitcode tools to perform
> +/// all subcommands. See http://tce.cs.tut.fi for our peculiar target.
> +/// Currently does not support anything else but compilation.
> +
> +TCEToolChain::TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple)
> +  : ToolChain(Host, Triple)
> +{
> +  // Path mangling to find libexec
> +  std::string Path(getDriver().Dir);
> +
> +  Path += "/../libexec";
> +  getProgramPaths().push_back(Path);
> +}
> +
> +TCEToolChain::~TCEToolChain() {
> +  for (llvm::DenseMap<unsigned, Tool*>::iterator
> +           it = Tools.begin(), ie = Tools.end(); it != ie; ++it)
> +      delete it->second;
> +}
> +
> +bool TCEToolChain::IsMathErrnoDefault() const {
> +  return true;
> +}
> +
> +bool TCEToolChain::IsUnwindTablesDefault() const {
> +  return false;
> +}
> +
> +const char *TCEToolChain::GetDefaultRelocationModel() const {
> +  return "static";
> +}
> +
> +const char *TCEToolChain::GetForcedPicModel() const {
> +  return 0;
> +}
> +
> +Tool &TCEToolChain::SelectTool(const Compilation &C,
> +                            const JobAction &JA) const {
> +  Action::ActionClass Key;
> +  Key = Action::AnalyzeJobClass;
> +
> +  Tool *&T = Tools[Key];
> +  if (!T) {
> +    switch (Key) {
> +    case Action::PreprocessJobClass:
> +      T = new tools::gcc::Preprocess(*this); break;
> +    case Action::AnalyzeJobClass:
> +      T = new tools::Clang(*this); break;
> +    default:
> +     assert(false && "Unsupported action for TCE target.");
> +    }
> +  }
> +  return *T;
> +}
> +
> +DerivedArgList *TCEToolChain::TranslateArgs(InputArgList &Args,
> +                                            const char *BoundArch) const {
> +  return new DerivedArgList(Args, true);
> +}
> +
> /// OpenBSD - OpenBSD tool chain which can call as(1) and ld(1) directly.
>
> OpenBSD::OpenBSD(const HostInfo &Host, const llvm::Triple& Triple)
> Index: lib/Driver/ToolChains.h
> ===================================================================
> --- lib/Driver/ToolChains.h (revision 97443)
> +++ lib/Driver/ToolChains.h (working copy)
> @@ -267,6 +267,26 @@
> };
>
>
> +/// TCEToolChain - A tool chain using the llvm bitcode tools to perform
> +/// all subcommands. See http://tce.cs.tut.fi for our peculiar target.
> +class VISIBILITY_HIDDEN TCEToolChain : public ToolChain {
> +public:
> +  TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple);
> +  ~TCEToolChain();
> +
> +  virtual DerivedArgList *TranslateArgs(InputArgList &Args,
> +                                        const char *BoundArch) const;
> +  virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
> +  bool IsMathErrnoDefault() const;
> +  bool IsUnwindTablesDefault() const;
> +  const char* GetDefaultRelocationModel() const;
> +  const char* GetForcedPicModel() const;
> +
> +private:
> +  mutable llvm::DenseMap<unsigned, Tool*> Tools;
> +
> +};
> +
> } // end namespace toolchains
> } // end namespace driver
> } // end namespace clang
> Index: lib/Driver/HostInfo.cpp
> ===================================================================
> --- lib/Driver/HostInfo.cpp (revision 97443)
> +++ lib/Driver/HostInfo.cpp (working copy)
> @@ -157,6 +157,46 @@
>   return TC;
> }
>
> +// TCE Host Info
> +
> +/// TCEHostInfo - TCE host information implementation (see http://tce.cs.tut.fi)
> +class TCEHostInfo : public HostInfo {
> +
> +public:
> +  TCEHostInfo(const Driver &D, const llvm::Triple &Triple);
> +  ~TCEHostInfo() {};
> +
> +  virtual bool useDriverDriver() const;
> +
> +  virtual types::ID lookupTypeForExtension(const char *Ext) const {
> +    types::ID Ty = types::lookupTypeForExtension(Ext);
> +
> +    if (Ty == types::TY_PP_Asm)
> +      return types::TY_Asm;
> +
> +    return Ty;
> +  }
> +
> +  virtual ToolChain *CreateToolChain(const ArgList &Args,
> +                                     const char *ArchName) const;
> +};
> +
> +TCEHostInfo::TCEHostInfo(const Driver &D, const llvm::Triple& Triple)
> +  : HostInfo(D, Triple) {
> +}
> +
> +bool TCEHostInfo::useDriverDriver() const {
> +  return false;
> +}
> +
> +ToolChain *TCEHostInfo::CreateToolChain(const ArgList &Args,
> +                                        const char *ArchName) const {
> +  llvm::Triple TCTriple(getTriple());
> +//  TCTriple.setArchName(ArchName);
> +  return new toolchains::TCEToolChain(*this, TCTriple);
> +}
> +
> +
> // Unknown Host Info
>
> /// UnknownHostInfo - Generic host information to use for unknown hosts.
> @@ -536,6 +576,12 @@
> }
>
> const HostInfo *
> +clang::driver::createTCEHostInfo(const Driver &D,
> +                                   const llvm::Triple& Triple) {
> +  return new TCEHostInfo(D, Triple);
> +}
> +
> +const HostInfo *
> clang::driver::createUnknownHostInfo(const Driver &D,
>                                      const llvm::Triple& Triple) {
>   return new UnknownHostInfo(D, Triple);
> Index: lib/Driver/Driver.cpp
> ===================================================================
> --- lib/Driver/Driver.cpp (revision 97443)
> +++ lib/Driver/Driver.cpp (working copy)
> @@ -1145,6 +1145,10 @@
>   llvm::PrettyStackTraceString CrashInfo("Constructing host");
>   llvm::Triple Triple(TripleStr);
>
> +  // TCE is an osless target
> +  if (Triple.getArchName() == "tce")
> +    return createTCEHostInfo(*this, Triple);
> +
>   switch (Triple.getOS()) {
>   case llvm::Triple::AuroraUX:
>     return createAuroraUXHostInfo(*this, Triple);
> _______________________________________________
> cfe-dev mailing list
> [hidden email]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev


_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: [patch] fix for TCE support

Pekka Jääskeläinen
Hi,

I do not have commit access. The patch attached,
please commit. I only updated the datalayout a
bit since your review.

On 03/03/2010 11:08 PM, Chris Lattner wrote:

> On Mar 1, 2010, at 6:12 AM, Pekka Jääskeläinen wrote:
>
>> Hello,
>>
>> Attached patch fixes TCE support of Clang for the current trunk version.
>> Tests pass.
>
> Hi Pekka, the patch looks good to me, please commit.  If you don't have
> commit access, please send it to me as a non-inline attachment and I'll
> apply it for you, thanks.
>
> -Chris
--
Pekka

Index: include/clang/Driver/HostInfo.h
===================================================================
--- include/clang/Driver/HostInfo.h (revision 97574)
+++ include/clang/Driver/HostInfo.h (working copy)
@@ -80,6 +80,8 @@
                                         const llvm::Triple& Triple);
 const HostInfo *createLinuxHostInfo(const Driver &D,
                                     const llvm::Triple& Triple);
+const HostInfo *createTCEHostInfo(const Driver &D,
+                                  const llvm::Triple& Triple);
 const HostInfo *createUnknownHostInfo(const Driver &D,
                                       const llvm::Triple& Triple);
 
Index: lib/Basic/Targets.cpp
===================================================================
--- lib/Basic/Targets.cpp (revision 97574)
+++ lib/Basic/Targets.cpp (working copy)
@@ -1892,9 +1892,10 @@
       FloatFormat = &llvm::APFloat::IEEEsingle;
       DoubleFormat = &llvm::APFloat::IEEEsingle;
       LongDoubleFormat = &llvm::APFloat::IEEEsingle;
-      DescriptionString = "E-p:32:32:32-a0:32:32"
-                          "-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64"
-                          "-f32:32:32-f64:32:64-n32";
+      DescriptionString = "E-p:32:32:32-i1:8:8-i8:8:32-"
+                          "i16:16:32-i32:32:32-i64:32:32-"
+                          "f32:32:32-f64:64:64-v64:64:64-"
+                          "v128:128:128-a0:0:64-n32";
     }
 
     virtual void getTargetDefines(const LangOptions &Opts,
Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp (revision 97574)
+++ lib/Driver/ToolChains.cpp (working copy)
@@ -728,6 +728,66 @@
   return new DerivedArgList(Args, true);
 }
 
+
+/// TCEToolChain - A tool chain using the llvm bitcode tools to perform
+/// all subcommands. See http://tce.cs.tut.fi for our peculiar target.
+/// Currently does not support anything else but compilation.
+
+TCEToolChain::TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple)
+  : ToolChain(Host, Triple) {
+  // Path mangling to find libexec
+  std::string Path(getDriver().Dir);
+
+  Path += "/../libexec";
+  getProgramPaths().push_back(Path);
+}
+
+TCEToolChain::~TCEToolChain() {
+  for (llvm::DenseMap<unsigned, Tool*>::iterator
+           it = Tools.begin(), ie = Tools.end(); it != ie; ++it)
+      delete it->second;
+}
+
+bool TCEToolChain::IsMathErrnoDefault() const {
+  return true;
+}
+
+bool TCEToolChain::IsUnwindTablesDefault() const {
+  return false;
+}
+
+const char *TCEToolChain::GetDefaultRelocationModel() const {
+  return "static";
+}
+
+const char *TCEToolChain::GetForcedPicModel() const {
+  return 0;
+}
+
+Tool &TCEToolChain::SelectTool(const Compilation &C,
+                            const JobAction &JA) const {
+  Action::ActionClass Key;
+  Key = Action::AnalyzeJobClass;
+
+  Tool *&T = Tools[Key];
+  if (!T) {
+    switch (Key) {
+    case Action::PreprocessJobClass:
+      T = new tools::gcc::Preprocess(*this); break;
+    case Action::AnalyzeJobClass:
+      T = new tools::Clang(*this); break;
+    default:
+     assert(false && "Unsupported action for TCE target.");
+    }
+  }
+  return *T;
+}
+
+DerivedArgList *TCEToolChain::TranslateArgs(InputArgList &Args,
+                                            const char *BoundArch) const {
+  return new DerivedArgList(Args, true);
+}
+
 /// OpenBSD - OpenBSD tool chain which can call as(1) and ld(1) directly.
 
 OpenBSD::OpenBSD(const HostInfo &Host, const llvm::Triple& Triple)
Index: lib/Driver/ToolChains.h
===================================================================
--- lib/Driver/ToolChains.h (revision 97574)
+++ lib/Driver/ToolChains.h (working copy)
@@ -267,6 +267,26 @@
 };
 
 
+/// TCEToolChain - A tool chain using the llvm bitcode tools to perform
+/// all subcommands. See http://tce.cs.tut.fi for our peculiar target.
+class VISIBILITY_HIDDEN TCEToolChain : public ToolChain {
+public:
+  TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple);
+  ~TCEToolChain();
+
+  virtual DerivedArgList *TranslateArgs(InputArgList &Args,
+                                        const char *BoundArch) const;
+  virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
+  bool IsMathErrnoDefault() const;
+  bool IsUnwindTablesDefault() const;
+  const char* GetDefaultRelocationModel() const;
+  const char* GetForcedPicModel() const;
+
+private:
+  mutable llvm::DenseMap<unsigned, Tool*> Tools;
+
+};
+
 } // end namespace toolchains
 } // end namespace driver
 } // end namespace clang
Index: lib/Driver/HostInfo.cpp
===================================================================
--- lib/Driver/HostInfo.cpp (revision 97574)
+++ lib/Driver/HostInfo.cpp (working copy)
@@ -157,6 +157,46 @@
   return TC;
 }
 
+// TCE Host Info
+
+/// TCEHostInfo - TCE host information implementation (see http://tce.cs.tut.fi)
+class TCEHostInfo : public HostInfo {
+
+public:
+  TCEHostInfo(const Driver &D, const llvm::Triple &Triple);
+  ~TCEHostInfo() {};
+
+  virtual bool useDriverDriver() const;
+
+  virtual types::ID lookupTypeForExtension(const char *Ext) const {
+    types::ID Ty = types::lookupTypeForExtension(Ext);
+
+    if (Ty == types::TY_PP_Asm)
+      return types::TY_Asm;
+
+    return Ty;
+  }
+
+  virtual ToolChain *CreateToolChain(const ArgList &Args,
+                                     const char *ArchName) const;
+};
+
+TCEHostInfo::TCEHostInfo(const Driver &D, const llvm::Triple& Triple)
+  : HostInfo(D, Triple) {
+}
+
+bool TCEHostInfo::useDriverDriver() const {
+  return false;
+}
+
+ToolChain *TCEHostInfo::CreateToolChain(const ArgList &Args,
+                                        const char *ArchName) const {
+  llvm::Triple TCTriple(getTriple());
+//  TCTriple.setArchName(ArchName);
+  return new toolchains::TCEToolChain(*this, TCTriple);
+}
+
+
 // Unknown Host Info
 
 /// UnknownHostInfo - Generic host information to use for unknown hosts.
@@ -536,6 +576,12 @@
 }
 
 const HostInfo *
+clang::driver::createTCEHostInfo(const Driver &D,
+                                   const llvm::Triple& Triple) {
+  return new TCEHostInfo(D, Triple);
+}
+
+const HostInfo *
 clang::driver::createUnknownHostInfo(const Driver &D,
                                      const llvm::Triple& Triple) {
   return new UnknownHostInfo(D, Triple);
Index: lib/Driver/Driver.cpp
===================================================================
--- lib/Driver/Driver.cpp (revision 97574)
+++ lib/Driver/Driver.cpp (working copy)
@@ -1145,6 +1145,10 @@
   llvm::PrettyStackTraceString CrashInfo("Constructing host");
   llvm::Triple Triple(TripleStr);
 
+  // TCE is an osless target
+  if (Triple.getArchName() == "tce")
+    return createTCEHostInfo(*this, Triple);
+
   switch (Triple.getOS()) {
   case llvm::Triple::AuroraUX:
     return createAuroraUXHostInfo(*this, Triple);

_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: [patch] fix for TCE support

Chris Lattner

On Mar 4, 2010, at 9:52 AM, Pekka Jääskeläinen wrote:

> Hi,
>
> I do not have commit access. The patch attached,
> please commit. I only updated the datalayout a
> bit since your review.

Your patch is being included inline, please resend as an attachment.  If you're using thunderbird, please see http://llvm.org/docs/DeveloperPolicy.html#patches

-Chris

>
> On 03/03/2010 11:08 PM, Chris Lattner wrote:
>> On Mar 1, 2010, at 6:12 AM, Pekka Jääskeläinen wrote:
>>> Hello,
>>> Attached patch fixes TCE support of Clang for the current trunk version.
>>> Tests pass.
>> Hi Pekka, the patch looks good to me, please commit.  If you don't have
>> commit access, please send it to me as a non-inline attachment and I'll
>> apply it for you, thanks.
>> -Chris
>
> --
> Pekka
> Index: include/clang/Driver/HostInfo.h
> ===================================================================
> --- include/clang/Driver/HostInfo.h (revision 97574)
> +++ include/clang/Driver/HostInfo.h (working copy)
> @@ -80,6 +80,8 @@
>                                         const llvm::Triple& Triple);
> const HostInfo *createLinuxHostInfo(const Driver &D,
>                                     const llvm::Triple& Triple);
> +const HostInfo *createTCEHostInfo(const Driver &D,
> +                                  const llvm::Triple& Triple);
> const HostInfo *createUnknownHostInfo(const Driver &D,
>                                       const llvm::Triple& Triple);
>
> Index: lib/Basic/Targets.cpp
> ===================================================================
> --- lib/Basic/Targets.cpp (revision 97574)
> +++ lib/Basic/Targets.cpp (working copy)
> @@ -1892,9 +1892,10 @@
>       FloatFormat = &llvm::APFloat::IEEEsingle;
>       DoubleFormat = &llvm::APFloat::IEEEsingle;
>       LongDoubleFormat = &llvm::APFloat::IEEEsingle;
> -      DescriptionString = "E-p:32:32:32-a0:32:32"
> -                          "-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64"
> -                          "-f32:32:32-f64:32:64-n32";
> +      DescriptionString = "E-p:32:32:32-i1:8:8-i8:8:32-"
> +                          "i16:16:32-i32:32:32-i64:32:32-"
> +                          "f32:32:32-f64:64:64-v64:64:64-"
> +                          "v128:128:128-a0:0:64-n32";
>     }
>
>     virtual void getTargetDefines(const LangOptions &Opts,
> Index: lib/Driver/ToolChains.cpp
> ===================================================================
> --- lib/Driver/ToolChains.cpp (revision 97574)
> +++ lib/Driver/ToolChains.cpp (working copy)
> @@ -728,6 +728,66 @@
>   return new DerivedArgList(Args, true);
> }
>
> +
> +/// TCEToolChain - A tool chain using the llvm bitcode tools to perform
> +/// all subcommands. See http://tce.cs.tut.fi for our peculiar target.
> +/// Currently does not support anything else but compilation.
> +
> +TCEToolChain::TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple)
> +  : ToolChain(Host, Triple) {
> +  // Path mangling to find libexec
> +  std::string Path(getDriver().Dir);
> +
> +  Path += "/../libexec";
> +  getProgramPaths().push_back(Path);
> +}
> +
> +TCEToolChain::~TCEToolChain() {
> +  for (llvm::DenseMap<unsigned, Tool*>::iterator
> +           it = Tools.begin(), ie = Tools.end(); it != ie; ++it)
> +      delete it->second;
> +}
> +
> +bool TCEToolChain::IsMathErrnoDefault() const {
> +  return true;
> +}
> +
> +bool TCEToolChain::IsUnwindTablesDefault() const {
> +  return false;
> +}
> +
> +const char *TCEToolChain::GetDefaultRelocationModel() const {
> +  return "static";
> +}
> +
> +const char *TCEToolChain::GetForcedPicModel() const {
> +  return 0;
> +}
> +
> +Tool &TCEToolChain::SelectTool(const Compilation &C,
> +                            const JobAction &JA) const {
> +  Action::ActionClass Key;
> +  Key = Action::AnalyzeJobClass;
> +
> +  Tool *&T = Tools[Key];
> +  if (!T) {
> +    switch (Key) {
> +    case Action::PreprocessJobClass:
> +      T = new tools::gcc::Preprocess(*this); break;
> +    case Action::AnalyzeJobClass:
> +      T = new tools::Clang(*this); break;
> +    default:
> +     assert(false && "Unsupported action for TCE target.");
> +    }
> +  }
> +  return *T;
> +}
> +
> +DerivedArgList *TCEToolChain::TranslateArgs(InputArgList &Args,
> +                                            const char *BoundArch) const {
> +  return new DerivedArgList(Args, true);
> +}
> +
> /// OpenBSD - OpenBSD tool chain which can call as(1) and ld(1) directly.
>
> OpenBSD::OpenBSD(const HostInfo &Host, const llvm::Triple& Triple)
> Index: lib/Driver/ToolChains.h
> ===================================================================
> --- lib/Driver/ToolChains.h (revision 97574)
> +++ lib/Driver/ToolChains.h (working copy)
> @@ -267,6 +267,26 @@
> };
>
>
> +/// TCEToolChain - A tool chain using the llvm bitcode tools to perform
> +/// all subcommands. See http://tce.cs.tut.fi for our peculiar target.
> +class VISIBILITY_HIDDEN TCEToolChain : public ToolChain {
> +public:
> +  TCEToolChain(const HostInfo &Host, const llvm::Triple& Triple);
> +  ~TCEToolChain();
> +
> +  virtual DerivedArgList *TranslateArgs(InputArgList &Args,
> +                                        const char *BoundArch) const;
> +  virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
> +  bool IsMathErrnoDefault() const;
> +  bool IsUnwindTablesDefault() const;
> +  const char* GetDefaultRelocationModel() const;
> +  const char* GetForcedPicModel() const;
> +
> +private:
> +  mutable llvm::DenseMap<unsigned, Tool*> Tools;
> +
> +};
> +
> } // end namespace toolchains
> } // end namespace driver
> } // end namespace clang
> Index: lib/Driver/HostInfo.cpp
> ===================================================================
> --- lib/Driver/HostInfo.cpp (revision 97574)
> +++ lib/Driver/HostInfo.cpp (working copy)
> @@ -157,6 +157,46 @@
>   return TC;
> }
>
> +// TCE Host Info
> +
> +/// TCEHostInfo - TCE host information implementation (see http://tce.cs.tut.fi)
> +class TCEHostInfo : public HostInfo {
> +
> +public:
> +  TCEHostInfo(const Driver &D, const llvm::Triple &Triple);
> +  ~TCEHostInfo() {};
> +
> +  virtual bool useDriverDriver() const;
> +
> +  virtual types::ID lookupTypeForExtension(const char *Ext) const {
> +    types::ID Ty = types::lookupTypeForExtension(Ext);
> +
> +    if (Ty == types::TY_PP_Asm)
> +      return types::TY_Asm;
> +
> +    return Ty;
> +  }
> +
> +  virtual ToolChain *CreateToolChain(const ArgList &Args,
> +                                     const char *ArchName) const;
> +};
> +
> +TCEHostInfo::TCEHostInfo(const Driver &D, const llvm::Triple& Triple)
> +  : HostInfo(D, Triple) {
> +}
> +
> +bool TCEHostInfo::useDriverDriver() const {
> +  return false;
> +}
> +
> +ToolChain *TCEHostInfo::CreateToolChain(const ArgList &Args,
> +                                        const char *ArchName) const {
> +  llvm::Triple TCTriple(getTriple());
> +//  TCTriple.setArchName(ArchName);
> +  return new toolchains::TCEToolChain(*this, TCTriple);
> +}
> +
> +
> // Unknown Host Info
>
> /// UnknownHostInfo - Generic host information to use for unknown hosts.
> @@ -536,6 +576,12 @@
> }
>
> const HostInfo *
> +clang::driver::createTCEHostInfo(const Driver &D,
> +                                   const llvm::Triple& Triple) {
> +  return new TCEHostInfo(D, Triple);
> +}
> +
> +const HostInfo *
> clang::driver::createUnknownHostInfo(const Driver &D,
>                                      const llvm::Triple& Triple) {
>   return new UnknownHostInfo(D, Triple);
> Index: lib/Driver/Driver.cpp
> ===================================================================
> --- lib/Driver/Driver.cpp (revision 97574)
> +++ lib/Driver/Driver.cpp (working copy)
> @@ -1145,6 +1145,10 @@
>   llvm::PrettyStackTraceString CrashInfo("Constructing host");
>   llvm::Triple Triple(TripleStr);
>
> +  // TCE is an osless target
> +  if (Triple.getArchName() == "tce")
> +    return createTCEHostInfo(*this, Triple);
> +
>   switch (Triple.getOS()) {
>   case llvm::Triple::AuroraUX:
>     return createAuroraUXHostInfo(*this, Triple);


_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|

Re: [patch] fix for TCE support

Pekka Jääskeläinen
Chris Lattner wrote:
> Your patch is being included inline, please resend as an attachment.  If
> you're using thunderbird, please see
> http://llvm.org/docs/DeveloperPolicy.html#patches

Done. Is it better now?

--
--PJ

_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

clang-2.7-tce-support.patch (6K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [patch] fix for TCE support

Chris Lattner

On Mar 4, 2010, at 12:44 PM, Pekka Jääskeläinen wrote:

> Chris Lattner wrote:
>> Your patch is being included inline, please resend as an attachment.  If
>> you're using thunderbird, please see
>> http://llvm.org/docs/DeveloperPolicy.html#patches
>
> Done. Is it better now?

Yep, great!  Applied as r97746,

-Chris
_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev