You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by mf...@apache.org on 2008/01/18 16:29:52 UTC

svn commit: r613188 - in /harmony/enhanced/drlvm/trunk/vm: gc_gen/src/common/gc_for_vm.cpp jitrino/src/optimizer/Inst.cpp jitrino/src/optimizer/helper_inliner.cpp

Author: mfursov
Date: Fri Jan 18 07:29:49 2008
New Revision: 613188

URL: http://svn.apache.org/viewvc?rev=613188&view=rev
Log:
Fix for HARMONY-5393 [drlvm][jit][opt] VMMagic based helper inliner optimization passes incorrect params to helpers with a number params > 2

Enabling WB VMMagic based helper registration in VM's helpers registry 


Modified:
    harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Inst.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp?rev=613188&r1=613187&r2=613188&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp Fri Jan 18 07:29:49 2008
@@ -64,6 +64,7 @@
 #endif
     vm_helper_register_magic_helper(VM_RT_NEW_RESOLVED_USING_VTABLE_AND_SIZE, "org/apache/harmony/drlvm/gc_gen/GCHelper", "alloc");
     vm_helper_register_magic_helper(VM_RT_NEW_VECTOR_USING_VTABLE,  "org/apache/harmony/drlvm/gc_gen/GCHelper", "allocArray");
+    vm_helper_register_magic_helper(VM_RT_GC_HEAP_WRITE_REF,  "org/apache/harmony/drlvm/gc_gen/GCHelper", "write_barrier_slot_rem");
 }
 
 int gc_init() 

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Inst.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Inst.cpp?rev=613188&r1=613187&r2=613188&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Inst.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Inst.cpp Fri Jan 18 07:29:49 2008
@@ -1855,8 +1855,8 @@
 }
 
 Inst* InstFactory::makeConvUnmanaged(Modifier mod, Type::Tag toType, Opnd* dst, Opnd* src) {
-    assert ((dst->getType()->isUnmanagedPtr() && src->getType()->isObject()) 
-        || (dst->getType()->isObject() && src->getType()->isUnmanagedPtr())); 
+    assert ((dst->getType()->isUnmanagedPtr() && (src->getType()->isObject() || src->getType()->isManagedPtr()))
+        || ((dst->getType()->isObject() || dst->getType()->isManagedPtr())) && src->getType()->isUnmanagedPtr()); 
     return makeInst(Op_ConvUnmanaged, mod, toType, dst, src);
 }
 

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp?rev=613188&r1=613187&r2=613188&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp Fri Jan 18 07:29:49 2008
@@ -208,7 +208,7 @@
     }
     assert(method);
 
-    //Convert all inst params info helper params
+    //Convert all inst params into helper params
     uint32 numHelperArgs = method->getNumParams();
     uint32 numInstArgs = inst->getNumSrcOperands();
     Opnd** helperArgs =new (irm->getMemoryManager()) Opnd*[numHelperArgs];
@@ -227,11 +227,26 @@
     }
     for (uint32 i = 0; i < numInstArgs; i++) {
         Opnd* instArg = inst->getSrc(i);
-        if (instArg->getType()->tag == Type::Tau) { //TODO: what to do with taus?
+        if (instArg->getType()->tag == Type::Tau) {
             continue;
         }
         assert(currentHelperArg < numHelperArgs);
-        helperArgs[currentHelperArg] = instArg;
+        Type* helperArgType = method->getParamType(currentHelperArg);
+        Type* instArgType = instArg->getType();
+        assert(instArgType->isNumeric() == helperArgType->isNumeric());
+
+        bool needObjToMagicConversion = (instArgType->isObject() || instArgType->isManagedPtr()) 
+                && helperArgType->isNamedType() && VMMagicUtils::isVMMagicClass(helperArgType->asNamedType()->getName());
+
+        Opnd* helperArg = instArg;
+        if (needObjToMagicConversion) {
+            Type* dstType = typeManager->getUnmanagedPtrType(typeManager->getInt8Type()); //TODO: use convertVMMagicType2HIR here from translator
+            helperArg = opndManager->createSsaTmpOpnd(dstType);
+            Modifier mod = Modifier(Overflow_None)|Modifier(Exception_Never)|Modifier(Strict_No);
+            instFactory->makeConvUnmanaged(mod, dstType->tag, helperArg, instArg)->insertBefore(inst);
+        }
+        helperArgs[currentHelperArg] = helperArg;
+        currentHelperArg++;
     }
     assert(helperArgs[numHelperArgs-1]!=NULL);