Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 70366 invoked from network); 27 Mar 2007 08:57:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 27 Mar 2007 08:57:18 -0000 Received: (qmail 98521 invoked by uid 500); 27 Mar 2007 08:57:25 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 98498 invoked by uid 500); 27 Mar 2007 08:57:25 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 98489 invoked by uid 99); 27 Mar 2007 08:57:25 -0000 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 27 Mar 2007 01:57:25 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id B38621A9842; Tue, 27 Mar 2007 01:56:27 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r522818 - /harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/devirtualizer.cpp Date: Tue, 27 Mar 2007 08:56:27 -0000 To: commits@harmony.apache.org From: varlax@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070327085627.B38621A9842@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: varlax Date: Tue Mar 27 01:56:26 2007 New Revision: 522818 URL: http://svn.apache.org/viewvc?view=rev&rev=522818 Log: Applied HARMONY-3242 [drlvm][jit] interface devirtualization bug Tested on SLES10@ia32, SLES9@x64, WinXP@ia32. Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/devirtualizer.cpp Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/devirtualizer.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/devirtualizer.cpp?view=diff&rev=522818&r1=522817&r2=522818 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/devirtualizer.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/devirtualizer.cpp Tue Mar 27 01:56:26 2007 @@ -269,12 +269,15 @@ ldSlot->getMethodDesc()); virtualCallBlock->appendInst(ldSlot2); icall->setSrc(0, funPtr2); - // Move ldInterfaceVTable to the virtual call block + // Duplicate ldInterfaceVTable in virtual call block Inst* ldVTable = vtable->getInst(); if (ldVTable->getOpcode() == Op_TauLdIntfcVTableAddr) { - ldVTable->unlink(); - ldSlot->unlink(); - ldVTable->insertBefore(ldSlot2); + Opnd* slot = ldVTable->getSrc(0); + Type* type = ldVTable->asTypeInst()->getTypeInfo(); + Opnd* vtable2 = _opndManager.createSsaTmpOpnd(vtable->getType()); + Inst* ldVTable2 = _instFactory.makeTauLdIntfcVTableAddr(vtable2, slot, type); + ldSlot2->setSrc(0, vtable2); + ldVTable2->insertBefore(ldSlot2); } } virtualCallBlock->appendInst(virtualCall);