[16] RFR(S): 8251093: Improve C1 register allocator logging and debugging support

Christian Hagedorn christian.hagedorn at oracle.com
Fri Aug 14 12:10:50 UTC 2020


Hi

Please review the following enhancement for C1:
https://bugs.openjdk.java.net/browse/JDK-8251093
http://cr.openjdk.java.net/~chagedorn/8251093/webrev.00/

While I was working on JDK-8249603 [1], I added some additional 
debugging and logging code which helped to figure out what was going on. 
I think it would be useful to have this code around for the analysis of 
future C1 register allocator bugs.

This RFE adds (everything non-product code):
- find_interval(number): Can be called like that from gdb anywhere to 
find an interval with the given number.
- Interval::print_children()/print_parent(): Useful when debugging with 
gdb to quickly show the split children and parent.
- LinearScan::print_reg_num(number): Prints the register or stack 
location for this register number. This is useful in some places 
(logging with TraceLinearScanLevel set) where it just printed a number 
which first had to be manually looked up in other logs.

I additionally did some cleanup of the touched code.

We could additionally split the TraceLinearScanLevel flag into separate 
flags related to the different phases of the register allocation 
algorithm. It currently just prints too much details on the higher 
levels. You often find yourself being interested in a specific part of 
the algorithm and only want to know more details there. To achieve that 
you now you have to either handle all the noise or manually 
disable/enable other logs. We could file an RFE to clean this up if it's 
worth the effort - given that there are not many new issues filed for C1 
register allocation today.

Thank you!

Best regards,
Christian


[1] https://bugs.openjdk.java.net/browse/JDK-8251093



More information about the hotspot-compiler-dev mailing list