Master Thesis Research Advice. JIT

Vladyslav Tkachuk tkachuk.vladyslav at gmail.com
Wed Apr 15 22:05:27 UTC 2020


Hello,

I am a Master's student at the University of Passau, Germany.
My master thesis research is concerned with detecting equivalent mutants in
Java.
The main research question is to use the Trivial Compiler Equivalency
technique. This means that we acquire Assembly code produced by Java JIT
compiler for initial and mutated source and then compare them.

I have previously contacted Tobias Hartmann, who advised me to write here
regarding technical questions. I would like to ask you if there is any
solution to a problem I have.

Last time Tobias recommended me to use Opto-Assembly to achieve my purpose.
It was a good hint and it helped me to get more precise data.
However, after doing some research I noticed that in some cases C2 compiler
unloaded the method code which I expected to find in assembly. As I found
out this was a part of deoptimization and the method code was meant to be
executed by the interpreter.
Here is an example of what I mean:

{method}
 - this oop:          0x000000000d2319c8
 - method holder:     'Rational'
 - constants:         0x000000000d230cf8 constant pool [85]
{0x000000000d230d00} for 'Rational' cache=0x000000000d231cd8
 - access:            0x81000001  public
 - name:              'toString'
 - signature:         '()Ljava/lang/String;'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
some setup code
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
02c    movq    RBP, RDX # spill
02f    movl    RDX, #11 # int
      nop # 3 bytes pad for loops and calls
*037    call,static  wrapper for: uncommon_trap(reason='unloaded'
action='reinterpret' index='11')*
*        # Rational::toString @ bci:0  L[0]=RBP L[1]=_ L[2]=_ L[3]=_ L[4]=_
L[5]=_ L[6]=_ L[7]=_*
*        # OopMap{rbp=Oop off=60}*
03c    int3 # ShouldNotReachHere
03c


This is a 'toString' method and as I could see and understand, there is no
actual method code, but only a call to it.

I would like to know if it is possible to completely disable any
deoptimizations and consistently receive the full asm code? I consent that
it is not practical and hurts performance, but it is not a goal in this
scope. According to my observations, in most cases the method code is full,
but strangely here it did not work. I have tried to google any useful info,
unfortunately, I did not see anything helpful, despite the explanations
about what deoptimization is and its types.

I would be grateful if you could shed some light on the issue.
Thanks in advance for any useful information.

Best regards,
Vladyslav Tkachuk


More information about the hotspot-compiler-dev mailing list