Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8264135

UnsafeGetStableArrayElement should account for different JIT implementation details

XMLWordPrintable

    • b16

        The UnsafeGetStableArrayElement jtreg tests fails on GraalVM because it asserts semantics implemented by C1 and C2 that are beyond the spec of @Stable. In particular, it asserts that the JIT will not constant fold an unsafe read of a stable array element if the type of the read does not match the type of the array element. For example:

        @Stable static final byte[] STABLE_BYTE_ARRAY = {Byte.MAX_VALUE, 0, 0, 0};
        @Stable static final int[] STABLE_INT_ARRAY = {Integer.MAX_VALUE, 0, 0, 0};

        unsafe.getInt(STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET);
        unsafe.getByte(STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET);

        The Graal compiler will constant fold these reads where as C1 and C2 will not. Both implementations are permissible. There are no predictability guarantees about constant-folding provided by Stable and it's perfectly fine not to optimize stable fields/arrays at all.

        The test should be modified to take into account the JIT being used when deciding what is to be asserted.

              dnsimon Douglas Simon
              dnsimon Douglas Simon
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved: