RFR: 8315771: [JVMCI] Resolution of bootstrap methods with int[] static arguments [v7]

Doug Simon dnsimon at openjdk.org
Wed Sep 13 13:12:45 UTC 2023


On Wed, 13 Sep 2023 09:33:11 GMT, Sacha Coppey <duke at openjdk.org> wrote:

>> Currently, `jdk.vm.ci.meta.ConstantPool.lookupBootstrapMethodInvocation` does not support static arguments of type `int[]`.
>> 
>> Supporting those static arguments allows to correctly lookup the `BootstrapMethodInvocation` of some `InvokeDynamic` and `DynamicConstant`.
>> 
>> To lookup the constant at the index in the static arguments index list, a new class is introduced, allowing to lazily resolve the constant or obtain the constant pool index of the arguments:
>> 
>> 
>>     static class CachedBSMArgs extends AbstractList<JavaConstant> {
>>         private final JavaConstant[] cache;
>>         private final HotSpotConstantPool cp;
>>         private final int bssIndex;
>> 
>>         CachedBSMArgs(HotSpotConstantPool cp, int bssIndex, int size) {
>>             this.cp = cp;
>>             this.bssIndex = bssIndex;
>>             this.cache = new JavaConstant[size];
>>         }
>> 
>>         @Override
>>         public JavaConstant get(int index) {
>>             JavaConstant res = cache[index];
>>             if (res == null) {
>>                 int argCpi = compilerToVM().bootstrapArgumentIndexAt(cp, bssIndex, index);
>>                 res = compilerToVM().lookupConstantInPool(cp, argCpi, false);
>>                 if (res == null) {
>>                     res = JavaConstant.forInt(argCpi);
>>                 }
>>                 cache[index] = res;
>>             }
>>             return res;
>>         }
>> 
>>         @Override
>>         public int size() {
>>             return cache.length;
>>         }
>>     }
>
> Sacha Coppey has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Use lookupConstant instead of lookupConstantInPool in CachedBSMArgs.get

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotConstantPool.java line 558:

> 556:          * @param index index of the element to return
> 557:          * @return A {@link PrimitiveConstant} representing an unresolved constant pool entry
> 558:          * or a {@link JavaConstant} representing the static argument requested

`or a {@link JavaConstant}`
a PrimitiveConstant is a JavaConstant isn't it?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/15588#discussion_r1324490771


More information about the hotspot-compiler-dev mailing list