diff --git a/clang/CodeGen/CodeGenModule.cpp b/clang/CodeGen/CodeGenModule.cpp index 8bb4c2e51efe..a596c08528dd 100644 --- a/clang/CodeGen/CodeGenModule.cpp +++ b/clang/CodeGen/CodeGenModule.cpp @@ -24,10 +24,8 @@ using namespace clang; using namespace CodeGen; -CodeGenModule::CodeGenModule(ASTContext &C, llvm::Module &M, - const llvm::TargetData &TD) - : Context(C), TheModule(M), TheTargetData(TD), - Types(C, M, TD), CFConstantStringClassRef(0) {} +CodeGenModule::CodeGenModule(ASTContext &C, llvm::Module &M) + : Context(C), TheModule(M), Types(C, M), CFConstantStringClassRef(0) {} llvm::Constant *CodeGenModule::GetAddrOfGlobalDecl(const ValueDecl *D) { // See if it is already in the map. diff --git a/clang/CodeGen/CodeGenModule.h b/clang/CodeGen/CodeGenModule.h index a044c0d02eef..4ca4f8c55063 100644 --- a/clang/CodeGen/CodeGenModule.h +++ b/clang/CodeGen/CodeGenModule.h @@ -23,7 +23,6 @@ namespace llvm { class Constant; class Function; class GlobalVariable; - class TargetData; } namespace clang { @@ -40,7 +39,6 @@ namespace CodeGen { class CodeGenModule { ASTContext &Context; llvm::Module &TheModule; - const llvm::TargetData &TheTargetData; CodeGenTypes Types; llvm::Function *MemCpyFn; @@ -51,7 +49,7 @@ class CodeGenModule { std::vector BuiltinFunctions; public: - CodeGenModule(ASTContext &C, llvm::Module &M, const llvm::TargetData &TD); + CodeGenModule(ASTContext &C, llvm::Module &M); ASTContext &getContext() const { return Context; } llvm::Module &getModule() const { return TheModule; } diff --git a/clang/CodeGen/CodeGenTypes.cpp b/clang/CodeGen/CodeGenTypes.cpp index 745ba1d87ebd..017b65c152c0 100644 --- a/clang/CodeGen/CodeGenTypes.cpp +++ b/clang/CodeGen/CodeGenTypes.cpp @@ -16,7 +16,6 @@ #include "clang/AST/AST.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" -#include "llvm/Target/TargetData.h" using namespace clang; using namespace CodeGen; @@ -40,7 +39,7 @@ namespace { /// layoutStructFields - Do the actual work and lay out all fields. Create /// corresponding llvm struct type. This should be invoked only after /// all fields are added. - void layoutStructFields(CodeGenTypes &CGT, const RecordLayout &RL); + void layoutStructFields(CodeGenTypes &CGT); /// layoutUnionFields - Do the actual work and lay out all fields. Create /// corresponding llvm struct type. This should be invoked only after @@ -61,9 +60,8 @@ namespace { }; } -CodeGenTypes::CodeGenTypes(ASTContext &Ctx, llvm::Module& M, - const llvm::TargetData &TD) - : Context(Ctx), Target(Ctx.Target), TheModule(M), TheTargetData(TD) { +CodeGenTypes::CodeGenTypes(ASTContext &Ctx, llvm::Module& M) + : Context(Ctx), Target(Ctx.Target), TheModule(M) { } CodeGenTypes::~CodeGenTypes() { @@ -247,8 +245,7 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) { RecordOrganizer RO; for (unsigned i = 0, e = RD->getNumMembers(); i != e; ++i) RO.addField(RD->getMember(i)); - const RecordLayout &RL = Context.getRecordLayout(RD, SourceLocation()); - RO.layoutStructFields(*this, RL); + RO.layoutStructFields(*this); // Get llvm::StructType. RecordLayoutInfo *RLI = new RecordLayoutInfo(RO.getLLVMType()); @@ -355,21 +352,16 @@ void RecordOrganizer::addField(const FieldDecl *FD) { /// - Ignore bit fields /// - Ignore field aligments /// - Ignore packed structs -void RecordOrganizer::layoutStructFields(CodeGenTypes &CGT, - const RecordLayout &RL) { +void RecordOrganizer::layoutStructFields(CodeGenTypes &CGT) { // FIXME : Use SmallVector std::vector Fields; unsigned FieldNo = 0; - uint64_t Cursor = 0; - for (llvm::SmallVector::iterator I = FieldDecls.begin(), E = FieldDecls.end(); I != E; ++I) { const FieldDecl *FD = *I; const llvm::Type *Ty = CGT.ConvertType(FD->getType()); - uint64_t Offset = RL.getFieldOffset(FieldNo); - assert (Offset == Cursor && "FIXME Invalid struct layout"); - Cursor += CGT.getTargetData().getTypeSizeInBits(Ty); + // FIXME : Layout FieldDecl FD Fields.push_back(Ty); CGT.addFieldInfo(FD, FieldNo++); diff --git a/clang/CodeGen/CodeGenTypes.h b/clang/CodeGen/CodeGenTypes.h index b89713584c64..95aea85c8eb3 100644 --- a/clang/CodeGen/CodeGenTypes.h +++ b/clang/CodeGen/CodeGenTypes.h @@ -21,7 +21,6 @@ namespace llvm { class Module; class Type; class PATypeHolder; - class TargetData; } namespace clang { @@ -62,7 +61,6 @@ class CodeGenTypes { ASTContext &Context; TargetInfo &Target; llvm::Module& TheModule; - const llvm::TargetData& TheTargetData; llvm::DenseMap TagDeclTypes; @@ -93,10 +91,9 @@ class CodeGenTypes { /// interface to convert type T into a llvm::Type. const llvm::Type *ConvertNewType(QualType T); public: - CodeGenTypes(ASTContext &Ctx, llvm::Module &M, const llvm::TargetData &TD); + CodeGenTypes(ASTContext &Ctx, llvm::Module &M); ~CodeGenTypes(); - const llvm::TargetData &getTargetData() const { return TheTargetData; } TargetInfo &getTarget() const { return Target; } ASTContext &getContext() const { return Context; } diff --git a/clang/CodeGen/ModuleBuilder.cpp b/clang/CodeGen/ModuleBuilder.cpp index a7586b64c2f6..4a5a470563b4 100644 --- a/clang/CodeGen/ModuleBuilder.cpp +++ b/clang/CodeGen/ModuleBuilder.cpp @@ -18,9 +18,8 @@ using namespace clang; /// Init - Create an ModuleBuilder with the specified ASTContext. clang::CodeGen::BuilderTy * -clang::CodeGen::Init(ASTContext &Context, llvm::Module &M, - const llvm::TargetData &TD) { - return new CodeGenModule(Context, M, TD); +clang::CodeGen::Init(ASTContext &Context, llvm::Module &M) { + return new CodeGenModule(Context, M); } void clang::CodeGen::Terminate(BuilderTy *B) { diff --git a/clang/Driver/ASTConsumers.cpp b/clang/Driver/ASTConsumers.cpp index 0fcebcae4ccc..37d637bf1008 100644 --- a/clang/Driver/ASTConsumers.cpp +++ b/clang/Driver/ASTConsumers.cpp @@ -379,19 +379,14 @@ ASTConsumer *clang::CreateUnitValsChecker(Diagnostic &Diags) { // 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 "llvm/Target/TargetMachineRegistry.h" #include namespace { class LLVMEmitter : public ASTConsumer { Diagnostic &Diags; llvm::Module *M; - const llvm::TargetData *TD; ASTContext *Ctx; CodeGen::BuilderTy *Builder; public: @@ -399,16 +394,7 @@ namespace { virtual void Initialize(ASTContext &Context, unsigned MainFileID) { Ctx = &Context; M = new llvm::Module("foo"); - M->setTargetTriple(Ctx->Target.getTargetTriple()); - std::string Err; - const llvm::TargetMachineRegistry::entry *TME = - llvm::TargetMachineRegistry::getClosestStaticTargetForModule(*M, Err); - assert(TME && "Unable to determine target machine"); - // FIXME : Set appropriate subtarget features. - std::string FeatureStr; - llvm::TargetMachine *TheMachine = TME->CtorFn(*M, FeatureStr); - TD = TheMachine->getTargetData(); - Builder = CodeGen::Init(Context, *M, *TD); + Builder = CodeGen::Init(Context, *M); } virtual void HandleTopLevelDecl(Decl *D) { diff --git a/clang/Driver/Makefile b/clang/Driver/Makefile index bf861514ecb5..6d2cfe0a750f 100644 --- a/clang/Driver/Makefile +++ b/clang/Driver/Makefile @@ -4,12 +4,8 @@ CXXFLAGS = -fno-rtti TOOLNAME = clang USEDLIBS = clangCodeGen.a clangAnalysis.a clangRewrite.a clangSEMA.a \ - clangAST.a clangParse.a clangLex.a clangBasic.a LLVMX86 \ + clangAST.a clangParse.a clangLex.a clangBasic.a \ LLVMCore.a LLVMSupport.a LLVMSystem.a \ - LLVMBitWriter.a LLVMBitReader.a LLVMTarget.a LLVMCodeGen.a \ - LLVMSelectionDAG.a LLVMScalarOpts.a LLVMTransformUtils.a \ - LLVMCore.a LLVMAnalysis.a - - + LLVMBitWriter.a LLVMBitReader.a include $(LEVEL)/Makefile.common diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index f766f9e26b51..334f87851d97 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -218,11 +218,6 @@ public: getLongLongInfo(Size, Align, Loc); return static_cast(Size); } - - const char *getTargetTriple() { - // FIXME ! - return "i686-apple-darwin9"; - } private: void ComputeWCharInfo(SourceLocation Loc); }; diff --git a/clang/include/clang/CodeGen/ModuleBuilder.h b/clang/include/clang/CodeGen/ModuleBuilder.h index 96b0f59b8e95..0b1ae476ed46 100644 --- a/clang/include/clang/CodeGen/ModuleBuilder.h +++ b/clang/include/clang/CodeGen/ModuleBuilder.h @@ -16,7 +16,6 @@ namespace llvm { class Module; - class TargetData; } namespace clang { @@ -30,8 +29,7 @@ namespace CodeGen { typedef void BuilderTy; /// Init - Create an ModuleBuilder with the specified ASTContext. - BuilderTy *Init(ASTContext &Context, llvm::Module &M, - const llvm::TargetData &TD); + BuilderTy *Init(ASTContext &Context, llvm::Module &M); /// CodeGenFunction - Convert the AST node for a FunctionDecl into LLVM. ///