RFR: 8361582: AArch64: Some ConH values cannot be replicated with SVE [v7]

Jatin Bhateja jbhateja at openjdk.org
Thu Aug 21 08:57:54 UTC 2025


On Thu, 21 Aug 2025 08:11:59 GMT, Bhavana Kilambi <bkilambi at openjdk.org> wrote:

>> test/hotspot/jtreg/compiler/c2/aarch64/TestFloat16Replicate.java line 66:
>> 
>>> 64:             input[i] = (short) i;
>>> 65:         }
>>> 66:     }
>> 
>> How about using Generators for initialization?
>
> That's what I had in my first patch but changed it to a `for` loop after this comment - https://github.com/openjdk/jdk/pull/26589#discussion_r2260403263.
> I think it doesn't matter in this case. What's more important is the constant value being passed. Otherwise, the `TestFloat16VectorOperations.java` JTREG test does use generators and test this shape for all values of Float16.

Ok, in general its advisable to use Generators for any initialization,  another suggestion, you can also generate constant dynamically through @Stable arrays, here is an example 



mport jdk.internal.vm.annotation.Stable;
import java.util.concurrent.ThreadLocalRandom;

public class random_constants {
    public static final int idx = ThreadLocalRandom.current().nextInt(1034);

    @Stable
    public static int [] arr;

    public static void init() {
        arr = new int[1024];
        for (int i = 0; i < 1024; i++) {
            arr[i] = ThreadLocalRandom.current().nextInt();
        }
    }

    public static int yeild_number() {
        return arr[idx] + 10;
    }

    public static void main(String [] args) {
        int res = 0;
        init();
        for (int i = 0; i < 100000; i++) {
            res += yeild_number();
        }
        System.out.println("[res] " + res);
    }
}

PROMPT>java --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED -Xbatch -XX:-TieredCompilation -Xbootclasspath/a:. -XX:CompileCommand=PrintIdealPhase,random_constants::yeild_number,BEFORE_MATCHING -cp .  random_constants
CompileCommand: PrintIdealPhase random_constants.yeild_number const char* PrintIdealPhase = 'BEFORE_MATCHING'
AFTER: BEFORE_MATCHING
  0  Root  === 0 32  [[ 0 1 3 31 ]] inner
  3  Start  === 3 0  [[ 3 5 6 7 8 9 ]]  #{0:control, 1:abIO, 2:memory, 3:rawptr:BotPTR, 4:return_address}
  5  Parm  === 3  [[ 32 ]] Control !jvms: random_constants::yeild_number @ bci:-1 (line 19)
  6  Parm  === 3  [[ 32 ]] I_O !jvms: random_constants::yeild_number @ bci:-1 (line 19)
  7  Parm  === 3  [[ 32 ]] Memory  Memory: @BotPTR *+bot, idx=Bot; !jvms: random_constants::yeild_number @ bci:-1 (line 19)
  8  Parm  === 3  [[ 32 ]] FramePtr !jvms: random_constants::yeild_number @ bci:-1 (line 19)
  9  Parm  === 3  [[ 32 ]] ReturnAdr !jvms: random_constants::yeild_number @ bci:-1 (line 19)
 31  ConI  === 0  [[ 32 ]]  #int:-753356878
 32  Return  === 5 6 7 8 9 returns 31  [[ 0 ]]
[res] -1961428160

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26589#discussion_r2290383925


More information about the hotspot-compiler-dev mailing list