Hi,

There seemed to be some conflicting changes in Targets.cpp. Updated TCE target patch to work with svn revision 79415.

Mikael Lepistö
Thanks for the review.

On 17.8.2009, at 22:05, Eli Friedman wrote:

2009/8/17 Mikael Lepistö <[email protected]>:
Hi,

I added the comment as requested in llvm-commits list. Patch adds support to Clang for compiling C code with TCE compatible type sizes and alignments.
TCE further uses the bitcode to generate target program and processor
description. TCE is publicly (currently with MIT licence) available ASP
design environment.

Detailed comments on the patch:

+  class TCETargetInfo : public TargetInfo{
+  public:
+    TCETargetInfo(const std::string& triple) : TargetInfo(triple) {
+      TLSSupported = false;
+      IntWidth = 32;
+      LongWidth = LongLongWidth = 32;

Making "long long" 32 bits is not compliant with C99; that said, it's
your choice.  (I'm double-checking because it looks like you mostly
copied the PIC16 target, which is an unusual target.)

+      FloatFormat = &llvm::APFloat::IEEEsingle;
+      DoubleFormat = &llvm::APFloat::IEEEsingle;

Making "double" an IEEE single is not compliant with C99, but again,
your choice.

Sad but true. Hopefully we can add at least 64bit long long support soon.

+ virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { return 32; } + virtual uint64_t getPointerAlignV(unsigned AddrSpace) const { return 32; }

These are identical to the default implementation.

Removed.

+    virtual void getTargetDefines(const LangOptions &Opts,
+                                  std::vector<char> &Defines) const {
+      Define(Defines, "tce");

This should check something like "if (Opts.GNUMode)", like DefineStd
does.  Alternatively, you could just use DefineStd here, although that
has slightly different behavior.

Fixed.


+    virtual const char *getVAListDeclaration() const { return "";}

You don't support using stdarg.h?

Yes, we support that, fixed.

+    virtual bool useGlobalsForAutomaticVariables() const {return true;}

Do you know what this does? If so, it's fine, but if not you should remove it.

Fixed, we like' em in stack :)

-Mikael



------------------------------------------------------------------------

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

Index: lib/Basic/Targets.cpp
===================================================================
--- lib/Basic/Targets.cpp	(revision 79415)
+++ lib/Basic/Targets.cpp	(working copy)
@@ -1482,6 +1482,70 @@
   }
 }
 
+namespace {
+
+  // LLVM and Clang cannot be used directly to output native binaries for 
+  // target, but is used to compile C code to llvm bitcode with correct 
+  // type and alignment information.
+  // 
+  // TCE uses the llvm bitcode as input and uses it for generating customized 
+  // target processor and program binary. TCE co-design environment is 
+  // publicly available in http://tce.cs.tut.fi
+
+  class TCETargetInfo : public TargetInfo{
+  public:
+    TCETargetInfo(const std::string& triple) : TargetInfo(triple) {
+      TLSSupported = false;
+      IntWidth = 32;
+      LongWidth = LongLongWidth = 32;
+      IntMaxTWidth = 32;
+      PointerWidth = 32;
+      IntAlign = 32;
+      LongAlign = LongLongAlign = 32;
+      PointerAlign = 32;
+      SizeType = UnsignedInt;
+      IntMaxType = SignedLong;
+      UIntMaxType = UnsignedLong;
+      IntPtrType = SignedInt;
+      PtrDiffType = SignedInt;
+      FloatWidth = 32;
+      FloatAlign = 32;
+      DoubleWidth = 32;
+      DoubleAlign = 32;
+      LongDoubleWidth = 32;
+      LongDoubleAlign = 32;
+      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";
+    }
+
+    virtual void getTargetDefines(const LangOptions &Opts,
+                                  std::vector<char> &Defines) const {
+      DefineStd(Defines, "tce", Opts);
+      Define(Defines, "__TCE__");
+      Define(Defines, "__TCE_V1__");
+    }
+    virtual void getTargetBuiltins(const Builtin::Info *&Records,
+                                   unsigned &NumRecords) const {}
+    virtual const char *getClobbers() const {return "";}
+    virtual const char *getVAListDeclaration() const {
+      return "typedef void* __builtin_va_list;";
+    }
+    virtual const char *getTargetPrefix() const {return "tce";}
+    virtual void getGCCRegNames(const char * const *&Names,
+                                unsigned &NumNames) const {}
+    virtual bool validateAsmConstraint(const char *&Name,
+                                       TargetInfo::ConstraintInfo &info) const {
+      return true;
+    }
+    virtual void getGCCRegAliases(const GCCRegAlias *&Aliases,
+                                  unsigned &NumAliases) const {}
+  };
+}
+
 //===----------------------------------------------------------------------===//
 // Driver code
 //===----------------------------------------------------------------------===//
@@ -1494,6 +1558,9 @@
 
   switch (Triple.getArch()) {
   default:
+    // tce is not yet found from llvm targets
+    if (T.find("tce-") == 0)
+      return new TCETargetInfo(T);
     return NULL;
 
   case llvm::Triple::arm:
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to