[vmkit-commits] [vmkit] r65324 - in /vmkit/trunk/lib/JnJVM: LLVMRuntime/runtime-default.ll VMCore/JavaJIT.cpp VMCore/JnjvmModule.cpp VMCore/JnjvmModule.h VMCore/LowerConstantCalls.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Feb 23 09:18:29 PST 2009
Author: geoffray
Date: Mon Feb 23 11:18:28 2009
New Revision: 65324
URL: http://llvm.org/viewvc/llvm-project?rev=65324&view=rev
Log:
Optimization of final virtual fields.
Modified:
vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll?rev=65324&r1=65323&r2=65324&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Mon Feb 23 11:18:28 2009
@@ -191,6 +191,14 @@
declare %JavaCommonClass* @getArrayClass(%JavaCommonClass*,
%JavaCommonClass**) readnone
+declare i8 @getFinalInt8Field(i8*) readnone
+declare i16 @getFinalInt16Field(i16*) readnone
+declare i32 @getFinalInt32Field(i32*) readnone
+declare i64 @getFinalLongField(i64*) readnone
+declare double @getFinalDoubleField(double*) readnone
+declare float @getFinalFloatField(float*) readnone
+declare %JavaObject* @getFinalObjectField(%JavaObject**) readnone
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exception methods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=65324&r1=65323&r2=65324&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Mon Feb 23 11:18:28 2009
@@ -1696,8 +1696,43 @@
JITVerifyNull(obj);
Value* ptr = ldResolved(index, false, obj, type, LAI.llvmTypePtr);
+
+ JnjvmBootstrapLoader* JBL = compilingClass->classLoader->bootstrapLoader;
+ bool final = false;
+ if (!compilingMethod->name->equals(JBL->initName)) {
+ JavaField* field = compilingClass->ctpInfo->lookupField(index, false);
+ if (field) final = isFinal(field->access);
+ if (final) {
+ Function* F = 0;
+ if (sign->isPrimitive()) {
+ const PrimitiveTypedef* prim = (PrimitiveTypedef*)sign;
+ if (prim->isInt()) {
+ F = module->GetFinalInt32FieldFunction;
+ } else if (prim->isByte()) {
+ F = module->GetFinalInt8FieldFunction;
+ } else if (prim->isBool()) {
+ F = module->GetFinalInt8FieldFunction;
+ } else if (prim->isShort()) {
+ F = module->GetFinalInt16FieldFunction;
+ } else if (prim->isChar()) {
+ F = module->GetFinalInt16FieldFunction;
+ } else if (prim->isLong()) {
+ F = module->GetFinalLongFieldFunction;
+ } else if (prim->isFloat()) {
+ F = module->GetFinalFloatFieldFunction;
+ } else if (prim->isDouble()) {
+ F = module->GetFinalDoubleFieldFunction;
+ } else {
+ abort();
+ }
+ } else {
+ F = module->GetFinalObjectFieldFunction;
+ }
+ push(CallInst::Create(F, ptr, "", currentBlock), sign->isUnsigned());
+ }
+ }
- push(new LoadInst(ptr, "", currentBlock), sign->isUnsigned());
+ if (!final) push(new LoadInst(ptr, "", currentBlock), sign->isUnsigned());
if (type == Type::Int64Ty || type == Type::DoubleTy) {
push(module->constantZero, false);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=65324&r1=65323&r2=65324&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Mon Feb 23 11:18:28 2009
@@ -2356,7 +2356,14 @@
ThrowExceptionFunction = module->getFunction("JavaThreadThrowException");
GetArrayClassFunction = module->getFunction("getArrayClass");
-
+
+ GetFinalInt8FieldFunction = module->getFunction("getFinalInt8Field");
+ GetFinalInt16FieldFunction = module->getFunction("getFinalInt16Field");
+ GetFinalInt32FieldFunction = module->getFunction("getFinalInt32Field");
+ GetFinalLongFieldFunction = module->getFunction("getFinalLongField");
+ GetFinalFloatFieldFunction = module->getFunction("getFinalFloatField");
+ GetFinalDoubleFieldFunction = module->getFunction("getFinalDoubleField");
+ GetFinalObjectFieldFunction = module->getFunction("getFinalObjectField");
#ifdef ISOLATE
StringLookupFunction = module->getFunction("stringLookup");
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=65324&r1=65323&r2=65324&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Mon Feb 23 11:18:28 2009
@@ -362,6 +362,14 @@
llvm::Function* GetLockFunction;
llvm::Function* OverflowThinLockFunction;
+
+ llvm::Function* GetFinalInt8FieldFunction;
+ llvm::Function* GetFinalInt16FieldFunction;
+ llvm::Function* GetFinalInt32FieldFunction;
+ llvm::Function* GetFinalLongFieldFunction;
+ llvm::Function* GetFinalFloatFieldFunction;
+ llvm::Function* GetFinalDoubleFieldFunction;
+ llvm::Function* GetFinalObjectFieldFunction;
static llvm::ConstantInt* OffsetObjectSizeInClassConstant;
static llvm::ConstantInt* OffsetVTInClassConstant;
Modified: vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp?rev=65324&r1=65323&r2=65324&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp Mon Feb 23 11:18:28 2009
@@ -461,6 +461,18 @@
V == module->ForceLoadedCheckFunction ) {
Changed = true;
CI->eraseFromParent();
+ } else if (V == module->GetFinalInt8FieldFunction ||
+ V == module->GetFinalInt16FieldFunction ||
+ V == module->GetFinalInt32FieldFunction ||
+ V == module->GetFinalLongFieldFunction ||
+ V == module->GetFinalFloatFieldFunction ||
+ V == module->GetFinalDoubleFieldFunction ||
+ V == module->GetFinalObjectFieldFunction) {
+ Changed = true;
+ Value* val = Call.getArgument(0);
+ Value* res = new LoadInst(val, "", CI);
+ CI->replaceAllUsesWith(res);
+ CI->eraseFromParent();
}
#ifdef ISOLATE_SHARING
else if (V == module->GetCtpClassFunction) {
More information about the vmkit-commits
mailing list