give CreateObjCRuntime a full CGM so it can get whatever state it needs,

instead of passing in just a couple random things it currently 
happens to use.

llvm-svn: 52756
This commit is contained in:
Chris Lattner 2008-06-26 04:19:03 +00:00
parent 63dd337fc2
commit 87ab27d42f
4 changed files with 16 additions and 30 deletions

View File

@ -243,11 +243,3 @@ llvm::Function *CGObjCEtoile::MethodPreamble(
return Method;
}
/*
clang::CodeGen::CGObjCRuntime *clang::CodeGen::CreateObjCRuntime(
llvm::Module &M,
const llvm::Type *LLVMIntType,
const llvm::Type *LLVMLongType) {
return new CGObjCEtoile(M, LLVMIntType, LLVMLongType);
}
*/

View File

@ -15,12 +15,15 @@
//===----------------------------------------------------------------------===//
#include "CGObjCRuntime.h"
#include "CodeGenModule.h"
#include "clang/AST/ASTContext.h"
#include "llvm/Module.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/IRBuilder.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include <map>
using namespace clang;
// FIXME: Remove THIS!
#include "llvm/Analysis/ValueTracking.h"
@ -39,8 +42,9 @@ static const int RuntimeVersion = 8;
static const int ProtocolVersion = 2;
namespace {
class CGObjCGNU : public clang::CodeGen::CGObjCRuntime {
class CGObjCGNU : public CodeGen::CGObjCRuntime {
private:
CodeGen::CodeGenModule &CGM;
llvm::Module &TheModule;
const llvm::StructType *SelStructTy;
const llvm::Type *SelectorTy;
@ -94,9 +98,7 @@ private:
llvm::Constant *MakeGlobal(const llvm::ArrayType *Ty,
std::vector<llvm::Constant*> &V, const std::string &Name="");
public:
CGObjCGNU(llvm::Module &Mp,
const llvm::Type *LLVMIntType,
const llvm::Type *LLVMLongType);
CGObjCGNU(CodeGen::CodeGenModule &cgm);
virtual llvm::Constant *GenerateConstantString(const char *String,
const size_t length);
virtual llvm::Value *GenerateMessageSend(llvm::IRBuilder &Builder,
@ -172,13 +174,11 @@ static std::string SymbolNameForMethod(const std::string &ClassName, const
(isClassMethod ? "+" : "-") + MethodName;
}
CGObjCGNU::CGObjCGNU(llvm::Module &M,
const llvm::Type *LLVMIntType,
const llvm::Type *LLVMLongType) :
TheModule(M),
IntTy(LLVMIntType),
LongTy(LLVMLongType)
{
CGObjCGNU::CGObjCGNU(CodeGen::CodeGenModule &cgm)
: CGM(cgm), TheModule(CGM.getModule()) {
IntTy = CGM.getTypes().ConvertType(CGM.getContext().IntTy);
LongTy = CGM.getTypes().ConvertType(CGM.getContext().LongTy);
Zeros[0] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0);
Zeros[1] = Zeros[0];
NULLPtr = llvm::ConstantPointerNull::get(
@ -928,9 +928,6 @@ llvm::Function *CGObjCGNU::MethodPreamble(
return Method;
}
clang::CodeGen::CGObjCRuntime *clang::CodeGen::CreateObjCRuntime(
llvm::Module &M,
const llvm::Type *LLVMIntType,
const llvm::Type *LLVMLongType) {
return new CGObjCGNU(M, LLVMIntType, LLVMLongType);
CodeGen::CGObjCRuntime *CodeGen::CreateObjCRuntime(CodeGen::CodeGenModule &CGM){
return new CGObjCGNU(CGM);
}

View File

@ -29,6 +29,7 @@ namespace llvm {
namespace clang {
namespace CodeGen {
class CodeGenModule;
//FIXME Several methods should be pure virtual but aren't to avoid the
//partially-implemented subclass breaking.
@ -119,9 +120,7 @@ public:
/// Creates an instance of an Objective-C runtime class.
//TODO: This should include some way of selecting which runtime to target.
CGObjCRuntime *CreateObjCRuntime(llvm::Module &M,
const llvm::Type *LLVMIntType,
const llvm::Type *LLVMLongType);
CGObjCRuntime *CreateObjCRuntime(CodeGenModule &CGM);
}
}
#endif

View File

@ -39,9 +39,7 @@ CodeGenModule::CodeGenModule(ASTContext &C, const LangOptions &LO,
Types(C, M, TD), MemCpyFn(0), MemMoveFn(0), MemSetFn(0),
CFConstantStringClassRef(0) {
//TODO: Make this selectable at runtime
Runtime = CreateObjCRuntime(M,
getTypes().ConvertType(getContext().IntTy),
getTypes().ConvertType(getContext().LongTy));
Runtime = CreateObjCRuntime(*this);
// If debug info generation is enabled, create the CGDebugInfo object.
if (GenerateDebugInfo)