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-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
