You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Nikolay Sidelnikov (JIRA)" <ji...@apache.org> on 2006/12/15 08:15:21 UTC

[jira] Created: (HARMONY-2727) [drlvm][jit][opt] JIt generates duplicated code.

[drlvm][jit][opt] JIt generates duplicated code.
------------------------------------------------

                 Key: HARMONY-2727
                 URL: http://issues.apache.org/jira/browse/HARMONY-2727
             Project: Harmony
          Issue Type: Bug
            Reporter: Nikolay Sidelnikov


java.util.TreeMap.successor()
Java code of the method:
    static TreeMapEntry successor(TreeMapEntry x) {
        if (x.right != null)
            return minimum(x.right);
        TreeMapEntry y = x.parent;
        while (y != null && x == y.right) {
            x = y;
            y = y.parent;
        }
        return y;
    }
Also method "minimum" was inlined. Its code:
    static TreeMapEntry minimum(TreeMapEntry x) {
        while (x.left != null)
            x = x.left;
        return x;
    }

The generated asm code the follwoing:

line address    code                    
1       B7EE60: push        ebx
2       B7EE61: push        ebp
3       B7EE62: mov         eax,dword ptr [esp+0Ch]
4       B7EE66: mov         ebp,eax
5       B7EE68: mov         ebx,dword ptr [eax+14h]
6       B7EE6B: test        ebx,ebx
7       B7EE6D: je          00B7EEA8
8       B7EE73: mov         ebp,dword ptr fs:[00000014h]
9       B7EE7A: mov         eax,ebx
10      B7EE7C: mov         ebx,dword ptr [eax+18h]
11      B7EE7F: test        ebx,ebx
12      B7EE81: je          00B7EEF2
13      B7EE87: mov         ebp,dword ptr fs:[00000014h]
14      B7EE8E: cmp         dword ptr [ebp+00000270h],0
15      B7EE98: je          00B7EE7A
16      B7EE9E: call        00A96850
17      B7EEA3: jmp         00B7EE7A
18      B7EEA8: mov         ebx,dword ptr [eax+1Ch]
19      B7EEAB: mov         eax,dword ptr fs:[00000014h]
20      B7EEB2: mov         eax,ebx
21      B7EEB4: test        eax,eax
22      B7EEB6: je          00B7EEED
23      B7EEBC: cmp         ebp,dword ptr [eax+14h]
24      B7EEBF: jne         00B7EEED
25      B7EEC5: mov         ebp,eax
26      B7EEC7: mov         eax,dword ptr [eax+1Ch]
27      B7EECA: mov         ebx,eax
28      B7EECC: mov         eax,dword ptr fs:[00000014h]
29      B7EED3: cmp         dword ptr [eax+00000270h],0
30      B7EEDD: je          00B7EEB2
31      B7EEE3: call        00A96850
32      B7EEE8: jmp         00B7EEB2
33      B7EEED: pop         ebp
34      B7EEEE: pop         ebx
35      B7EEEF: ret         4
36      B7EEF2: pop         ebp
37      B7EEF3: pop         ebx
38      B7EEF4: ret         4
------------------------------------
Code in lines 33-35 and 36-38 are identical. The first one is return from the
second cycle and the second is return from the first cycle. In order to make
code less this code should be combined.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] Commented: (HARMONY-2727) [drlvm][jit][opt] JIt generates duplicated code.

Posted by "Cheng, BuQi (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HARMONY-2727?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12621358#action_12621358 ] 

Cheng, BuQi commented on HARMONY-2727:
--------------------------------------

Hi, Nikolay:

   Would you like to give out the example to repeat the problem? A repeated example and associated compilation options will be helpful to solve the problem. 

Thanks!

Buqi

> [drlvm][jit][opt] JIt generates duplicated code.
> ------------------------------------------------
>
>                 Key: HARMONY-2727
>                 URL: https://issues.apache.org/jira/browse/HARMONY-2727
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>            Reporter: Nikolay Sidelnikov
>
> java.util.TreeMap.successor()
> Java code of the method:
>     static TreeMapEntry successor(TreeMapEntry x) {
>         if (x.right != null)
>             return minimum(x.right);
>         TreeMapEntry y = x.parent;
>         while (y != null && x == y.right) {
>             x = y;
>             y = y.parent;
>         }
>         return y;
>     }
> Also method "minimum" was inlined. Its code:
>     static TreeMapEntry minimum(TreeMapEntry x) {
>         while (x.left != null)
>             x = x.left;
>         return x;
>     }
> The generated asm code the follwoing:
> line address    code                    
> 1       B7EE60: push        ebx
> 2       B7EE61: push        ebp
> 3       B7EE62: mov         eax,dword ptr [esp+0Ch]
> 4       B7EE66: mov         ebp,eax
> 5       B7EE68: mov         ebx,dword ptr [eax+14h]
> 6       B7EE6B: test        ebx,ebx
> 7       B7EE6D: je          00B7EEA8
> 8       B7EE73: mov         ebp,dword ptr fs:[00000014h]
> 9       B7EE7A: mov         eax,ebx
> 10      B7EE7C: mov         ebx,dword ptr [eax+18h]
> 11      B7EE7F: test        ebx,ebx
> 12      B7EE81: je          00B7EEF2
> 13      B7EE87: mov         ebp,dword ptr fs:[00000014h]
> 14      B7EE8E: cmp         dword ptr [ebp+00000270h],0
> 15      B7EE98: je          00B7EE7A
> 16      B7EE9E: call        00A96850
> 17      B7EEA3: jmp         00B7EE7A
> 18      B7EEA8: mov         ebx,dword ptr [eax+1Ch]
> 19      B7EEAB: mov         eax,dword ptr fs:[00000014h]
> 20      B7EEB2: mov         eax,ebx
> 21      B7EEB4: test        eax,eax
> 22      B7EEB6: je          00B7EEED
> 23      B7EEBC: cmp         ebp,dword ptr [eax+14h]
> 24      B7EEBF: jne         00B7EEED
> 25      B7EEC5: mov         ebp,eax
> 26      B7EEC7: mov         eax,dword ptr [eax+1Ch]
> 27      B7EECA: mov         ebx,eax
> 28      B7EECC: mov         eax,dword ptr fs:[00000014h]
> 29      B7EED3: cmp         dword ptr [eax+00000270h],0
> 30      B7EEDD: je          00B7EEB2
> 31      B7EEE3: call        00A96850
> 32      B7EEE8: jmp         00B7EEB2
> 33      B7EEED: pop         ebp
> 34      B7EEEE: pop         ebx
> 35      B7EEEF: ret         4
> 36      B7EEF2: pop         ebp
> 37      B7EEF3: pop         ebx
> 38      B7EEF4: ret         4
> ------------------------------------
> Code in lines 33-35 and 36-38 are identical. The first one is return from the
> second cycle and the second is return from the first cycle. In order to make
> code less this code should be combined.

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


[jira] Updated: (HARMONY-2727) [drlvm][jit][opt] JIt generates duplicated code.

Posted by "Nikolay Sidelnikov (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HARMONY-2727?page=all ]

Nikolay Sidelnikov updated HARMONY-2727:
----------------------------------------

    Component/s: DRLVM

> [drlvm][jit][opt] JIt generates duplicated code.
> ------------------------------------------------
>
>                 Key: HARMONY-2727
>                 URL: http://issues.apache.org/jira/browse/HARMONY-2727
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>            Reporter: Nikolay Sidelnikov
>
> java.util.TreeMap.successor()
> Java code of the method:
>     static TreeMapEntry successor(TreeMapEntry x) {
>         if (x.right != null)
>             return minimum(x.right);
>         TreeMapEntry y = x.parent;
>         while (y != null && x == y.right) {
>             x = y;
>             y = y.parent;
>         }
>         return y;
>     }
> Also method "minimum" was inlined. Its code:
>     static TreeMapEntry minimum(TreeMapEntry x) {
>         while (x.left != null)
>             x = x.left;
>         return x;
>     }
> The generated asm code the follwoing:
> line address    code                    
> 1       B7EE60: push        ebx
> 2       B7EE61: push        ebp
> 3       B7EE62: mov         eax,dword ptr [esp+0Ch]
> 4       B7EE66: mov         ebp,eax
> 5       B7EE68: mov         ebx,dword ptr [eax+14h]
> 6       B7EE6B: test        ebx,ebx
> 7       B7EE6D: je          00B7EEA8
> 8       B7EE73: mov         ebp,dword ptr fs:[00000014h]
> 9       B7EE7A: mov         eax,ebx
> 10      B7EE7C: mov         ebx,dword ptr [eax+18h]
> 11      B7EE7F: test        ebx,ebx
> 12      B7EE81: je          00B7EEF2
> 13      B7EE87: mov         ebp,dword ptr fs:[00000014h]
> 14      B7EE8E: cmp         dword ptr [ebp+00000270h],0
> 15      B7EE98: je          00B7EE7A
> 16      B7EE9E: call        00A96850
> 17      B7EEA3: jmp         00B7EE7A
> 18      B7EEA8: mov         ebx,dword ptr [eax+1Ch]
> 19      B7EEAB: mov         eax,dword ptr fs:[00000014h]
> 20      B7EEB2: mov         eax,ebx
> 21      B7EEB4: test        eax,eax
> 22      B7EEB6: je          00B7EEED
> 23      B7EEBC: cmp         ebp,dword ptr [eax+14h]
> 24      B7EEBF: jne         00B7EEED
> 25      B7EEC5: mov         ebp,eax
> 26      B7EEC7: mov         eax,dword ptr [eax+1Ch]
> 27      B7EECA: mov         ebx,eax
> 28      B7EECC: mov         eax,dword ptr fs:[00000014h]
> 29      B7EED3: cmp         dword ptr [eax+00000270h],0
> 30      B7EEDD: je          00B7EEB2
> 31      B7EEE3: call        00A96850
> 32      B7EEE8: jmp         00B7EEB2
> 33      B7EEED: pop         ebp
> 34      B7EEEE: pop         ebx
> 35      B7EEEF: ret         4
> 36      B7EEF2: pop         ebp
> 37      B7EEF3: pop         ebx
> 38      B7EEF4: ret         4
> ------------------------------------
> Code in lines 33-35 and 36-38 are identical. The first one is return from the
> second cycle and the second is return from the first cycle. In order to make
> code less this code should be combined.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira