Code Review for kill-hotspot

Prepared by:goetz on Thu Oct 24 11:58:32 CEST 2013
Workspace:/net/usr.work/d045726/oJ/kill-hotspot
Compare against: http://hg.openjdk.java.net/hsx/hotspot-main/hotspot
Compare against version:5502
Summary of changes: 52 lines changed: 50 ins; 0 del; 2 mod; 2968 unchg
Changeset: kill-hotspot.changeset
Author comments:

The dependency analysis of the opto scheduler mistakes kills for defs potentially causing wrong schedules. This webrev adds some checker code that prints occurances of such kills.

The dependency analysis distinguishes kills from defs by the number of out edges. If a kill has a precedence out-edge, it is mistaken for a def. If there is another def further down, no precedence edge is added between the kill and the def, potentially leading to wrong schedules. The algorithm wants to add edges between the uses of the assumed def and the def further down, but there are no uses.

We actually saw errors on sparc with a modification that adds some additional precedence edges before scheduling. But also running some checker code on main hotspot reveils such kills:

kill with precedence edges: 178	MachProj

B12: #  B20 B13 <- N134  Freq: 0.995265
 345  Region            ===  345  181  [[ ... ]] 
 175  loadConL_set64    ===  1  [[ 176  173 ]] #954437177/0x0000000038e38e39
 176  MachProj          ===  175  [[]] #1
 174  convI2L_reg       === _  179  [[ 173 ]] 
 173  mulL_reg_reg      === _  174  175  [[ 172  177 ]] 
 177  loadConL_set64    ===  1  | 173  [[ 178  172 ]] #16225432009/0x00000003c71c71c9
 178  MachProj          ===  177  [[ 170 ]] #1
 256  loadConP_set      ===  11  [[ 277  277  255  291  297  297 ]] ...
 259  loadConP_set      ===  11  [[ 280  280  258  292  300  300 ]] ...
 172  addL_reg_reg      === _  173  177  [[ 171  170 ]] 
 171  shrL_reg_imm6_L2I === _  172  [[ 169  170 ]] #34/0x00000022
 169  shlI_reg_imm5     === _  171  [[ 168  221 ]] #1/0x00000001
 170  shlI_reg_imm5     === _  171  | 172  178  [[ 168  221 ]] #4/0x00000004
 221  loadConI13        ===  1  | 170  169  [[ 220 ]] #0/0x00000000
 168  addI_reg_reg      === _  169  170  [[ 126  118  110  103 ]] 
 126  addI_reg_imm13    === _  168  [[ 125 ]] #-8/0xfffffff8
 103  addI_reg_imm13    === _  168  [[ 102 ]] #7/0x00000007
 118  addI_reg_imm13    === _  168  [[ 117 ]] #-1/0xffffffff
 122  loadConI13        ===  1  [[ 121 ]] #17/0x00000011
 107  loadConI13        ===  1  [[ 106 ]] #25/0x00000019
 129  cmpU_imm_branch   ===  345  166  [[ 130  128  182 ]] ...

Here is the full log of running jvm2008 derby and mpegaudio.

Legend: Modified file
Deleted file
New file

Cdiffs Udiffs Wdiffs Sdiffs Frames Old New ----- Raw src/share/vm/opto/output.cpp

rev 5503 : Check for kills that are classified as defs in register dependency analysis.
52 lines changed: 50 ins; 0 del; 2 mod; 2968 unchg

This code review page was prepared using /sapmnt/home1/d045726/bin/webrev.ksh (vers 24.0-hg+jbs).