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

Brian Goetz brian.goetz at oracle.com
Thu Jul 24 13:56:06 UTC 2014

I don’t think that polymorphic byte codes (dup, getfield, etc) need to be annotated; this attribute tells us which bytecodes have to be rewritten for specialization.  Since dup is valid on all types, everything should just come out in the wash.  

On Jul 24, 2014, at 9:21 AM, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:

> 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 Gen.visitReturn.
> 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.
> Maurizio
> 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