aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-03-04 00:23:29 +0000
committerJohn McCall <rjmccall@apple.com>2010-03-04 00:23:29 +0000
commitc9fe644675503894e9e76e8ecd8e6519426548de (patch)
treeff130be72fa30cac9af308e4eedb57d8c647d818 /lib/CodeGen
parent5fccd36204f11c8491325038e6ffcc784399098e (diff)
Create a TargetMachine whenever we create a CodeGenAction. The codegen of
some builtins will rely on target knowledge. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97693 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/CodeGenModule.cpp7
-rw-r--r--lib/CodeGen/CodeGenModule.h8
-rw-r--r--lib/CodeGen/ModuleBuilder.cpp13
3 files changed, 20 insertions, 8 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 91c7322c67..a3a9e61977 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -40,11 +40,12 @@ using namespace CodeGen;
CodeGenModule::CodeGenModule(ASTContext &C, const CodeGenOptions &CGO,
- llvm::Module &M, const llvm::TargetData &TD,
- Diagnostic &diags)
+ llvm::Module &M, const llvm::TargetMachine &TM,
+ const llvm::TargetData &TD, Diagnostic &diags)
: BlockModule(C, M, TD, Types, *this), Context(C),
Features(C.getLangOptions()), CodeGenOpts(CGO), TheModule(M),
- TheTargetData(TD), TheTargetCodeGenInfo(0), Diags(diags),
+ TheTargetMachine(TM), TheTargetData(TD), TheTargetCodeGenInfo(0),
+ Diags(diags),
Types(C, M, TD, getTargetCodeGenInfo().getABIInfo()),
MangleCtx(C), VtableInfo(*this), Runtime(0),
MemCpyFn(0), MemMoveFn(0), MemSetFn(0), CFConstantStringClassRef(0),
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index ac8332647b..8b9a0f29c7 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -38,6 +38,7 @@ namespace llvm {
class Function;
class GlobalValue;
class TargetData;
+ class TargetMachine;
class FunctionType;
class LLVMContext;
}
@@ -86,6 +87,7 @@ class CodeGenModule : public BlockModule {
const LangOptions &Features;
const CodeGenOptions &CodeGenOpts;
llvm::Module &TheModule;
+ const llvm::TargetMachine &TheTargetMachine;
const llvm::TargetData &TheTargetData;
mutable const TargetCodeGenInfo *TheTargetCodeGenInfo;
Diagnostic &Diags;
@@ -168,7 +170,8 @@ class CodeGenModule : public BlockModule {
llvm::LLVMContext &VMContext;
public:
CodeGenModule(ASTContext &C, const CodeGenOptions &CodeGenOpts,
- llvm::Module &M, const llvm::TargetData &TD, Diagnostic &Diags);
+ llvm::Module &M, const llvm::TargetMachine &TM,
+ const llvm::TargetData &TD, Diagnostic &Diags);
~CodeGenModule();
@@ -198,6 +201,9 @@ public:
const llvm::TargetData &getTargetData() const { return TheTargetData; }
llvm::LLVMContext &getLLVMContext() { return VMContext; }
const TargetCodeGenInfo &getTargetCodeGenInfo() const;
+ const llvm::TargetMachine &getTargetMachine() const {
+ return TheTargetMachine;
+ }
/// getDeclVisibilityMode - Compute the visibility of the decl \arg D.
LangOptions::VisibilityMode getDeclVisibilityMode(const Decl *D) const;
diff --git a/lib/CodeGen/ModuleBuilder.cpp b/lib/CodeGen/ModuleBuilder.cpp
index 1e1edc1c48..4ae18bbb14 100644
--- a/lib/CodeGen/ModuleBuilder.cpp
+++ b/lib/CodeGen/ModuleBuilder.cpp
@@ -29,6 +29,7 @@ namespace {
class CodeGeneratorImpl : public CodeGenerator {
Diagnostic &Diags;
llvm::OwningPtr<const llvm::TargetData> TD;
+ const llvm::TargetMachine &TM;
ASTContext *Ctx;
const CodeGenOptions CodeGenOpts; // Intentionally copied in.
protected:
@@ -36,8 +37,11 @@ namespace {
llvm::OwningPtr<CodeGen::CodeGenModule> Builder;
public:
CodeGeneratorImpl(Diagnostic &diags, const std::string& ModuleName,
- const CodeGenOptions &CGO, llvm::LLVMContext& C)
- : Diags(diags), CodeGenOpts(CGO), M(new llvm::Module(ModuleName, C)) {}
+ const CodeGenOptions &CGO,
+ const llvm::TargetMachine &TM,
+ llvm::LLVMContext& C)
+ : Diags(diags), TM(TM), CodeGenOpts(CGO),
+ M(new llvm::Module(ModuleName, C)) {}
virtual ~CodeGeneratorImpl() {}
@@ -56,7 +60,7 @@ namespace {
M->setDataLayout(Ctx->Target.getTargetDescription());
TD.reset(new llvm::TargetData(Ctx->Target.getTargetDescription()));
Builder.reset(new CodeGen::CodeGenModule(Context, CodeGenOpts,
- *M, *TD, Diags));
+ *M, TM, *TD, Diags));
}
virtual void HandleTopLevelDecl(DeclGroupRef DG) {
@@ -95,6 +99,7 @@ namespace {
CodeGenerator *clang::CreateLLVMCodeGen(Diagnostic &Diags,
const std::string& ModuleName,
const CodeGenOptions &CGO,
+ const llvm::TargetMachine &Machine,
llvm::LLVMContext& C) {
- return new CodeGeneratorImpl(Diags, ModuleName, CGO, C);
+ return new CodeGeneratorImpl(Diags, ModuleName, CGO, Machine, C);
}