[cfe-commits] r43572 - in /cfe/trunk: CodeGen/CodeGenModule.cpp CodeGen/CodeGenModule.h CodeGen/CodeGenTypes.cpp CodeGen/CodeGenTypes.h CodeGen/ModuleBuilder.cpp Driver/ASTConsumers.cpp Driver/Makefile include/clang/Basic/TargetInfo.h include/clang/CodeGen/ModuleBuilder.h

Devang Patel dpatel at apple.com
Wed Oct 31 13:01:02 PDT 2007


Author: dpatel
Date: Wed Oct 31 15:01:01 2007
New Revision: 43572

URL: http://llvm.org/viewvc/llvm-project?rev=43572&view=rev
Log:
Take 2.

Make target info available to clang code generator.  This is far from complete but this helps clang codegen module make progress.

At the moment target triplet and target description strings are hard coded in clang::TargetInfo

Modified:
    cfe/trunk/CodeGen/CodeGenModule.cpp
    cfe/trunk/CodeGen/CodeGenModule.h
    cfe/trunk/CodeGen/CodeGenTypes.cpp
    cfe/trunk/CodeGen/CodeGenTypes.h
    cfe/trunk/CodeGen/ModuleBuilder.cpp
    cfe/trunk/Driver/ASTConsumers.cpp
    cfe/trunk/Driver/Makefile
    cfe/trunk/include/clang/Basic/TargetInfo.h
    cfe/trunk/include/clang/CodeGen/ModuleBuilder.h

Modified: cfe/trunk/CodeGen/CodeGenModule.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CodeGen/CodeGenModule.cpp?rev=43572&r1=43571&r2=43572&view=diff

==============================================================================
--- cfe/trunk/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/CodeGen/CodeGenModule.cpp Wed Oct 31 15:01:01 2007
@@ -24,9 +24,10 @@
 using namespace CodeGen;
 
 
-CodeGenModule::CodeGenModule(ASTContext &C, llvm::Module &M)
-  : Context(C), TheModule(M),
-    Types(C, M), MemCpyFn(0), CFConstantStringClassRef(0) {}
+CodeGenModule::CodeGenModule(ASTContext &C, llvm::Module &M,
+                             const llvm::TargetData &TD)
+  : Context(C), TheModule(M), TheTargetData(TD),
+    Types(C, M, TD), MemCpyFn(0), CFConstantStringClassRef(0) {}
 
 llvm::Constant *CodeGenModule::GetAddrOfGlobalDecl(const ValueDecl *D) {
   // See if it is already in the map.

Modified: cfe/trunk/CodeGen/CodeGenModule.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CodeGen/CodeGenModule.h?rev=43572&r1=43571&r2=43572&view=diff

==============================================================================
--- cfe/trunk/CodeGen/CodeGenModule.h (original)
+++ cfe/trunk/CodeGen/CodeGenModule.h Wed Oct 31 15:01:01 2007
@@ -23,6 +23,7 @@
   class Constant;
   class Function;
   class GlobalVariable;
+  class TargetData;
 }
 
 namespace clang {
@@ -39,6 +40,7 @@
 class CodeGenModule {
   ASTContext &Context;
   llvm::Module &TheModule;
+  const llvm::TargetData &TheTargetData;
   CodeGenTypes Types;
 
   llvm::Function *MemCpyFn;
@@ -49,7 +51,7 @@
   
   std::vector<llvm::Function *> BuiltinFunctions;
 public:
-  CodeGenModule(ASTContext &C, llvm::Module &M);
+  CodeGenModule(ASTContext &C, llvm::Module &M, const llvm::TargetData &TD);
   
   ASTContext &getContext() const { return Context; }
   llvm::Module &getModule() const { return TheModule; }

Modified: cfe/trunk/CodeGen/CodeGenTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CodeGen/CodeGenTypes.cpp?rev=43572&r1=43571&r2=43572&view=diff

==============================================================================
--- cfe/trunk/CodeGen/CodeGenTypes.cpp (original)
+++ cfe/trunk/CodeGen/CodeGenTypes.cpp Wed Oct 31 15:01:01 2007
@@ -60,8 +60,9 @@
   };
 }
 
-CodeGenTypes::CodeGenTypes(ASTContext &Ctx, llvm::Module& M)
-  : Context(Ctx), Target(Ctx.Target), TheModule(M) {
+CodeGenTypes::CodeGenTypes(ASTContext &Ctx, llvm::Module& M,
+                           const llvm::TargetData &TD)
+  : Context(Ctx), Target(Ctx.Target), TheModule(M), TheTargetData(TD) {
 }
 
 CodeGenTypes::~CodeGenTypes() {

Modified: cfe/trunk/CodeGen/CodeGenTypes.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CodeGen/CodeGenTypes.h?rev=43572&r1=43571&r2=43572&view=diff

==============================================================================
--- cfe/trunk/CodeGen/CodeGenTypes.h (original)
+++ cfe/trunk/CodeGen/CodeGenTypes.h Wed Oct 31 15:01:01 2007
@@ -21,6 +21,7 @@
   class Module;
   class Type;
   class PATypeHolder;
+  class TargetData;
 }
 
 namespace clang {
@@ -61,6 +62,7 @@
   ASTContext &Context;
   TargetInfo &Target;
   llvm::Module& TheModule;
+  const llvm::TargetData& TheTargetData;
   
   llvm::DenseMap<const TagDecl*, llvm::Type*> TagDeclTypes;
 
@@ -91,7 +93,7 @@
   /// interface to convert type T into a llvm::Type.
   const llvm::Type *ConvertNewType(QualType T);
 public:
-  CodeGenTypes(ASTContext &Ctx, llvm::Module &M);
+  CodeGenTypes(ASTContext &Ctx, llvm::Module &M, const llvm::TargetData &TD);
   ~CodeGenTypes();
   
   TargetInfo &getTarget() const { return Target; }

Modified: cfe/trunk/CodeGen/ModuleBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CodeGen/ModuleBuilder.cpp?rev=43572&r1=43571&r2=43572&view=diff

==============================================================================
--- cfe/trunk/CodeGen/ModuleBuilder.cpp (original)
+++ cfe/trunk/CodeGen/ModuleBuilder.cpp Wed Oct 31 15:01:01 2007
@@ -18,8 +18,9 @@
 
 /// Init - Create an ModuleBuilder with the specified ASTContext.
 clang::CodeGen::BuilderTy *
-clang::CodeGen::Init(ASTContext &Context, llvm::Module &M) {
-  return new CodeGenModule(Context, M);
+clang::CodeGen::Init(ASTContext &Context, llvm::Module &M,
+                     const llvm::TargetData &TD) {
+  return new CodeGenModule(Context, M, TD);
 }
 
 void clang::CodeGen::Terminate(BuilderTy *B) {

Modified: cfe/trunk/Driver/ASTConsumers.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/ASTConsumers.cpp?rev=43572&r1=43571&r2=43572&view=diff

==============================================================================
--- cfe/trunk/Driver/ASTConsumers.cpp (original)
+++ cfe/trunk/Driver/ASTConsumers.cpp Wed Oct 31 15:01:01 2007
@@ -379,14 +379,18 @@
 // LLVM Emitter
 
 #include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/TargetInfo.h"
 #include "clang/CodeGen/ModuleBuilder.h"
 #include "llvm/Module.h"
+#include "llvm/Target/TargetData.h"
+#include "llvm/Target/TargetMachine.h"
 #include <iostream>
 
 namespace {
   class LLVMEmitter : public ASTConsumer {
     Diagnostic &Diags;
     llvm::Module *M;
+    const llvm::TargetData *TD;
     ASTContext *Ctx;
     CodeGen::BuilderTy *Builder;
   public:
@@ -394,7 +398,9 @@
     virtual void Initialize(ASTContext &Context, unsigned MainFileID) {
       Ctx = &Context;
       M = new llvm::Module("foo");
-      Builder = CodeGen::Init(Context, *M);
+      M->setTargetTriple(Ctx->Target.getTargetTriple());
+      TD = new llvm::TargetData(Ctx->Target.getTargetDescription());
+      Builder = CodeGen::Init(Context, *M, *TD);
     }
     
     virtual void HandleTopLevelDecl(Decl *D) {

Modified: cfe/trunk/Driver/Makefile
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/Makefile?rev=43572&r1=43571&r2=43572&view=diff

==============================================================================
--- cfe/trunk/Driver/Makefile (original)
+++ cfe/trunk/Driver/Makefile Wed Oct 31 15:01:01 2007
@@ -6,6 +6,8 @@
 USEDLIBS = clangCodeGen.a clangAnalysis.a clangRewrite.a clangSEMA.a \
            clangAST.a clangParse.a clangLex.a clangBasic.a \
            LLVMCore.a LLVMSupport.a LLVMSystem.a \
-           LLVMBitWriter.a LLVMBitReader.a
+           LLVMBitWriter.a LLVMBitReader.a LLVMTarget.a 
+	
+	
 
 include $(LEVEL)/Makefile.common

Modified: cfe/trunk/include/clang/Basic/TargetInfo.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=43572&r1=43571&r2=43572&view=diff

==============================================================================
--- cfe/trunk/include/clang/Basic/TargetInfo.h (original)
+++ cfe/trunk/include/clang/Basic/TargetInfo.h Wed Oct 31 15:01:01 2007
@@ -218,6 +218,17 @@
     getLongLongInfo(Size, Align, Loc);
     return static_cast<unsigned>(Size);
   }
+
+  const char *getTargetTriple() {
+    // FIXME !
+    return "i686-apple-darwin9";
+  }
+  const char *getTargetDescription() {
+    // FIXME !
+    // Hard code darwin-x86 for now.
+    return "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:\
+32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128";
+  }
 private:
   void ComputeWCharInfo(SourceLocation Loc);
 };

Modified: cfe/trunk/include/clang/CodeGen/ModuleBuilder.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/ModuleBuilder.h?rev=43572&r1=43571&r2=43572&view=diff

==============================================================================
--- cfe/trunk/include/clang/CodeGen/ModuleBuilder.h (original)
+++ cfe/trunk/include/clang/CodeGen/ModuleBuilder.h Wed Oct 31 15:01:01 2007
@@ -16,6 +16,7 @@
 
 namespace llvm {
   class Module;
+  class TargetData;
 }
 
 namespace clang {
@@ -29,7 +30,8 @@
   typedef void BuilderTy;
   
   /// Init - Create an ModuleBuilder with the specified ASTContext.
-  BuilderTy *Init(ASTContext &Context, llvm::Module &M);
+  BuilderTy *Init(ASTContext &Context, llvm::Module &M,
+                  const llvm::TargetData &TD);
   
   /// CodeGenFunction - Convert the AST node for a FunctionDecl into LLVM.
   ///





More information about the cfe-commits mailing list