FYI, fixed a bug in the devirtualizer.

Naveen


Begin forwarded message:

From: "Naveen Neelakantam (JIRA)" <[EMAIL PROTECTED]>
Date: February 26, 2007 2:06:07 PM CST
To: [EMAIL PROTECTED]
Subject: [jira] Created: (HARMONY-3242) [drlvm][jit] interface devirtualization bug

[drlvm][jit] interface devirtualization bug
-------------------------------------------

                 Key: HARMONY-3242
URL: https://issues.apache.org/jira/browse/ HARMONY-3242
             Project: Harmony
          Issue Type: Bug
          Components: DRLVM
         Environment: RHEL4, gcc 4.1.0, core2
            Reporter: Naveen Neelakantam
         Attachments: devirt_bug.emconf, devirt_intf_bug.patch

When devirtualizing an interface call, the devirtualizer incorrectly moves the ldInterfaceVTable instruction to immediately before function pointer calculation for each guarded virtual call. This is problematic because a single ldInterfaceVTable instruction may be a producer for several function pointer calculations. Moving the ldInterfaceVTable instruction can therefore prevent it from dominating its consumers.

This bug will not manifest itself in most situations because global code motion (gcm) is typically run after interface devirtualization. Global code motion will move the ldInterfaceVTable back into a basic block that dominates all of its consumers.

So, to observe the bug a new .emconf is needed, one that does not run gcm. I've attached devirt_bug.emconf which is a copy of server.emconf but with gcm removed.

I've also attached a patch which fixes the issue (devirt_intf_bug.patch). Instead of moving the ldInterfaceVTable instruction, the patch places a duplicate before each guarded function pointer calculation.

Demonstration of bug using devirt_bug.emconf and the DaCapo chart benchmark:
java -showversion -Xem:./devirt_bug.emconf -jar dacapo-2006-10- MR2.jar chart
Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r511936, (Feb 26 2007), Linux/ia32/gcc 4.1.0, release build
http://incubator.apache.org/harmony
===== DaCapo chart starting =====
Done plotting: ./scratch/javac-tgt-ptr-prf-time.pdf
Done plotting: ./scratch/javac-src-ptr-prf-time.pdf
SIGSEGV in VM code.
Stack trace:
Done plotting: ./scratch/javac-dst-ptr-prf-time.pdf
Done plotting: ./scratch/javac-tgt-mut-prf-time.pdf
Done plotting: ./scratch/javac-src-mut-prf-time.pdf

        1: ?? (:-1)
read() failed during execution of addr2line
        2: ?? (??:-1)
read() failed during execution of addr2line
        3: ?? (??:-1)
read() failed during execution of addr2line
        4: ?? (??:-1)
read() failed during execution of addr2line
        5: ?? (??:-1)
read() failed during execution of addr2line
        6: ?? (??:-1)
read() failed during execution of addr2line
        7: ?? (??:-1)
read() failed during execution of addr2line
        8: ?? (??:-1)
read() failed during execution of addr2line
        9: ?? (??:-1)
read() failed during execution of addr2line
        10: ?? (??:-1)
read() failed during execution of addr2line
        11: ?? (??:-1)
read() failed during execution of addr2line
        12: ?? (??:-1)
read() failed during execution of addr2line
        13: ?? (??:-1)
read() failed during execution of addr2line
        14: ?? (??:-1)
read() failed during execution of addr2line
        15: ?? (??:-1)
read() failed during execution of addr2line
        16: ?? (??:-1)
read() failed during execution of addr2line
        17: ?? (??:-1)
read() failed during execution of addr2line
        18: ?? (??:-1)
read() failed during execution of addr2line
        19: ?? (??:-1)
read() failed during execution of addr2line
        20: ?? (??:-1)
read() failed during execution of addr2line
        21: ?? (??:-1)
read() failed during execution of addr2line
        22: ?? (??:-1)
read() failed during execution of addr2line
        23: ?? (??:-1)
        24: IP is 0xA50AADC3 <native code>
        25: java/lang/EMThreadSupport.run()V (EMThreadSupport.java:68)
26: java/lang/EMThreadSupport$1.run()V (EMThreadSupport.java:44)
        27: java/lang/Thread.run()V (Thread.java:-1)
        28: java/lang/Thread.runImpl()V (Thread.java:-1)
read() failed during execution of addr2line
        29: ?? (??:-1)
read() failed during execution of addr2line
        30: ?? (??:-1)
read() failed during execution of addr2line
        31: ?? (??:-1)
read() failed during execution of addr2line
        32: ?? (??:-1)
read() failed during execution of addr2line
        33: ?? (??:-1)
read() failed during execution of addr2line
        34: ?? (??:-1)
read() failed during execution of addr2line
        35: ?? (??:-1)
read() failed during execution of addr2line
        36: ?? (??:-1)
read() failed during execution of addr2line
        37: ?? (??:-1)
read() failed during execution of addr2line
        38: ?? (??:-1)
read() failed during execution of addr2line
        39: ?? (??:-1)
<end of stack trace>
Segmentation fault


--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Reply via email to