blob: 091db6081357a52d09f6317438b4a1c6620bc046 [file] [log] [blame]
//===------------- LLVMInfo.h - Compiler info for LLVM --------------------===//
//
// The VMKit project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef J3_LLVM_INFO_H
#define J3_LLVM_INFO_H
namespace llvm {
class Constant;
class Function;
class FunctionType;
class GCFunctionInfo;
class MDNode;
class Module;
class Type;
class Value;
}
namespace j3 {
class Class;
class JavaField;
class JavaLLVMCompiler;
class JavaMethod;
class Signdef;
class LLVMAssessorInfo {
public:
llvm::Type* llvmType;
llvm::Type* llvmTypePtr;
uint8_t logSizeInBytesConstant;
};
class LLVMClassInfo : public vmkit::PermanentObject {
friend class JavaAOTCompiler;
friend class JavaJITCompiler;
friend class JavaLLVMCompiler;
private:
/// Compiler - The compiler for this class info.
JavaLLVMCompiler* Compiler;
Class* classDef;
/// virtualSizeLLVM - The LLVM constant size of instances of this class.
llvm::Constant* virtualSizeConstant;
/// virtualType - The LLVM type of instance of this class.
llvm::Type * virtualType;
/// staticType - The LLVM type of the static instance of this class.
llvm::Type * staticType;
public:
llvm::Value* getVirtualSize();
llvm::Type* getVirtualType();
llvm::Type* getStaticType();
LLVMClassInfo(Class* cl, JavaLLVMCompiler* comp) :
Compiler(comp),
classDef(cl),
virtualSizeConstant(0),
virtualType(0),
staticType(0) {}
virtual void clear() {
virtualType = 0;
staticType = 0;
virtualSizeConstant = 0;
}
};
class LLVMMethodInfo : public vmkit::PermanentObject {
private:
/// Compiler - The compiler for this method info.
JavaLLVMCompiler* Compiler;
JavaMethod* methodDef;
llvm::Function* methodFunction;
llvm::Constant* offsetConstant;
llvm::FunctionType* functionType;
std::map<Class*, llvm::Function*> customizedVersions;
public:
llvm::Function* getMethod(Class* customizeFor);
llvm::Constant* getOffset();
llvm::FunctionType* getFunctionType();
bool isCustomizable;
LLVMMethodInfo(JavaMethod* M, JavaLLVMCompiler* comp) : Compiler(comp),
methodDef(M), methodFunction(0), offsetConstant(0), functionType(0),
isCustomizable(false) {}
virtual void clear() {
methodFunction = 0;
offsetConstant = 0;
functionType = 0;
customizedVersions.clear();
isCustomizable = false;
}
void setCustomizedVersion(Class* customizeFor, llvm::Function* F);
friend class JavaAOTCompiler;
};
class LLVMFieldInfo : public vmkit::PermanentObject {
private:
/// Compiler - The compiler for this field info.
JavaLLVMCompiler* Compiler;
JavaField* fieldDef;
llvm::Constant* offsetConstant;
public:
llvm::Constant* getOffset();
LLVMFieldInfo(JavaField* F, JavaLLVMCompiler* comp) :
Compiler(comp),
fieldDef(F),
offsetConstant(0) {}
virtual void clear() {
offsetConstant = 0;
}
};
class LLVMSignatureInfo : public vmkit::PermanentObject {
private:
/// Compiler - The compiler for this signature info.
JavaLLVMCompiler* Compiler;
llvm::FunctionType* staticType;
llvm::FunctionType* virtualType;
llvm::FunctionType* nativeType;
llvm::FunctionType* virtualBufType;
llvm::FunctionType* staticBufType;
llvm::PointerType* staticPtrType;
llvm::PointerType* virtualPtrType;
llvm::PointerType* nativePtrType;
llvm::Function* virtualBufFunction;
llvm::Function* virtualAPFunction;
llvm::Function* staticBufFunction;
llvm::Function* staticAPFunction;
llvm::Function* staticStubFunction;
llvm::Function* specialStubFunction;
llvm::Function* virtualStubFunction;
Signdef* signature;
llvm::Function* createFunctionCallBuf(bool virt);
llvm::Function* createFunctionCallAP(bool virt);
llvm::Function* createFunctionStub(bool special, bool virt);
public:
llvm::FunctionType* getVirtualType();
llvm::FunctionType* getStaticType();
llvm::FunctionType* getNativeType();
llvm::FunctionType* getNativeStubType();
llvm::FunctionType* getVirtualBufType();
llvm::FunctionType* getStaticBufType();
llvm::PointerType* getStaticPtrType();
llvm::PointerType* getNativePtrType();
llvm::PointerType* getVirtualPtrType();
llvm::Function* getVirtualBuf();
llvm::Function* getVirtualAP();
llvm::Function* getStaticBuf();
llvm::Function* getStaticAP();
llvm::Function* getStaticStub();
llvm::Function* getSpecialStub();
llvm::Function* getVirtualStub();
LLVMSignatureInfo(Signdef* sign, JavaLLVMCompiler* comp) :
Compiler(comp),
staticType(0),
virtualType(0),
nativeType(0),
virtualBufType(0),
staticBufType(0),
staticPtrType(0),
virtualPtrType(0),
nativePtrType(0),
virtualBufFunction(0),
virtualAPFunction(0),
staticBufFunction(0),
staticAPFunction(0),
staticStubFunction(0),
specialStubFunction(0),
virtualStubFunction(0),
signature(sign) {}
};
} // end namespace j3
#endif