hg: valhalla/valhalla/langtools: Add support for tracking 'any'-related opcodes

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu Jul 24 13:21:26 UTC 2014

Hi Remi,
thanks for the comments. This is an initial prototype to get things 
going and unblock the work on the specializer. The current support will 
be enough to compile simple classes such as Box (in Brian's document).

Said that, opcodes such as dup/pop can easily be added in the current 
code by adding more 'cases' to the filtering switch.

areturn is there - but it's generated in a different code path - see 

For opcodes such as new and newarray, we need to have unerased 
expression types being saved by javac somewhere, so that was a bit 
beyond the scope of this patch.

Regarging comparisons - the first issue is that  type-checking support 
for comparisons involving 'any' type-variable is not there yet - i.e. 
the compiler will reject it as of now. Once that's allowed, you will be 
able to compare T with T but not T with int (similarly as you cannot 
compare an ordinary type-variable with a string). In other words, I 
don't believe equals() will ever be generated - i.e. the compiler will 
always use if_acmpeq and the likes, which will be tagged, eventually, in 
the bytecode.


On 24/07/14 13:25, Remi Forax wrote:
> Hi Maurizio,
> I think you have miss several opcodes that also need to be marked as any,
>   anewarray, areturn and i think dup, dup_x1, dup_x2  and pop
> (I suppose than Object.equals will be used instead of if_acmpeq, 
> if_acmpne)
> Maybe you want to treat anewarray like opcodes getfield/invoke* but
> in that case, either you need invokedynamic or a new bytecode ?
> cheers,
> Rémi
> On 07/24/2014 01:26 PM, maurizio.cimadamore at oracle.com wrote:
>> Changeset: bb57e20a33a4
>> Author:    mcimadamore
>> Date:      2014-07-24 12:22 +0100
>> URL: 
>> http://hg.openjdk.java.net/valhalla/valhalla/langtools/rev/bb57e20a33a4
>> Add support for tracking 'any'-related opcodes
>> *) Overhauled Items hierarchy (now field/methods have their own classes)
>> *) Add AnyItem to model a bytecode item associated with 'any' variables
>> *) Add new BytecodeMapping attribute to map 'any'-related opcodes 
>> back to the original (unerased) signature
>> ! src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
>> ! src/share/classes/com/sun/tools/javac/jvm/Code.java
>> ! src/share/classes/com/sun/tools/javac/jvm/Gen.java
>> ! src/share/classes/com/sun/tools/javac/jvm/Items.java
>> ! src/share/classes/com/sun/tools/javac/util/Names.java

More information about the valhalla-dev mailing list