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).