summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/2247-checker-write-barrier-elimination/src/Main.java136
-rw-r--r--test/2272-checker-codegen-honor-write-barrier-kind/expected-stderr.txt0
-rw-r--r--test/2272-checker-codegen-honor-write-barrier-kind/expected-stdout.txt0
-rw-r--r--test/2272-checker-codegen-honor-write-barrier-kind/info.txt3
-rw-r--r--test/2272-checker-codegen-honor-write-barrier-kind/run.py19
-rw-r--r--test/2272-checker-codegen-honor-write-barrier-kind/src/Main.java109
-rw-r--r--test/knownfailures.json5
7 files changed, 97 insertions, 175 deletions
diff --git a/test/2247-checker-write-barrier-elimination/src/Main.java b/test/2247-checker-write-barrier-elimination/src/Main.java
index edf5bc2eab..c03ada30b5 100644
--- a/test/2247-checker-write-barrier-elimination/src/Main.java
+++ b/test/2247-checker-write-barrier-elimination/src/Main.java
@@ -55,10 +55,13 @@ public class Main {
}
/// CHECK-START: Main Main.$noinline$testInstanceFieldSets(Main, java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
- /// CHECK: InstanceFieldSet field_name:Main.inner field_type:Reference write_barrier_kind:EmitBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: InstanceFieldSet field_name:Main.inner field_type:Reference write_barrier_kind:EmitNoNullCheck
/// CHECK: InstanceFieldSet field_name:Main.inner2 field_type:Reference write_barrier_kind:DontEmit
/// CHECK: InstanceFieldSet field_name:Main.inner3 field_type:Reference write_barrier_kind:DontEmit
+
+ /// CHECK-START: Main Main.$noinline$testInstanceFieldSets(Main, java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static Main $noinline$testInstanceFieldSets(Main m, Object o, Object o2, Object o3) {
m.inner = o;
m.inner2 = o2;
@@ -67,10 +70,13 @@ public class Main {
}
/// CHECK-START: void Main.$noinline$testStaticFieldSets(java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
- /// CHECK: StaticFieldSet field_name:Main.inner_static field_type:Reference write_barrier_kind:EmitBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: StaticFieldSet field_name:Main.inner_static field_type:Reference write_barrier_kind:EmitNoNullCheck
/// CHECK: StaticFieldSet field_name:Main.inner_static2 field_type:Reference write_barrier_kind:DontEmit
/// CHECK: StaticFieldSet field_name:Main.inner_static3 field_type:Reference write_barrier_kind:DontEmit
+
+ /// CHECK-START: void Main.$noinline$testStaticFieldSets(java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static void $noinline$testStaticFieldSets(Object o, Object o2, Object o3) {
inner_static = o;
inner_static2 = o2;
@@ -78,12 +84,15 @@ public class Main {
}
/// CHECK-START: java.lang.Object[] Main.$noinline$testArraySets(java.lang.Object[], java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
- /// CHECK: ArraySet needs_type_check:true can_trigger_gc:true write_barrier_kind:EmitNotBeingReliedOn
+ /// CHECK: ArraySet needs_type_check:true can_trigger_gc:true write_barrier_kind:EmitNoNullCheck
+ /// CHECK: ArraySet needs_type_check:true can_trigger_gc:true write_barrier_kind:EmitNoNullCheck
+ /// CHECK: ArraySet needs_type_check:true can_trigger_gc:true write_barrier_kind:EmitNoNullCheck
+
+ /// CHECK-START: java.lang.Object[] Main.$noinline$testArraySets(java.lang.Object[], java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
/// CHECK: ; card_table
- /// CHECK: ArraySet needs_type_check:true can_trigger_gc:true write_barrier_kind:EmitNotBeingReliedOn
/// CHECK: ; card_table
- /// CHECK: ArraySet needs_type_check:true can_trigger_gc:true write_barrier_kind:EmitNotBeingReliedOn
/// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static java.lang.Object[] $noinline$testArraySets(
Object[] arr, Object o, Object o2, Object o3) {
arr[0] = o;
@@ -93,10 +102,13 @@ public class Main {
}
/// CHECK-START: java.lang.Object[] Main.$noinline$testSwapArray(java.lang.Object[]) disassembly (after)
- /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNoNullCheck
/// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
/// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
+
+ /// CHECK-START: java.lang.Object[] Main.$noinline$testSwapArray(java.lang.Object[]) disassembly (after)
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static java.lang.Object[] $noinline$testSwapArray(Object[] arr) {
arr[0] = arr[1];
arr[1] = arr[2];
@@ -105,10 +117,13 @@ public class Main {
}
/// CHECK-START: java.lang.Object[] Main.$noinline$testArraySetsSameRTI() disassembly (after)
- /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNoNullCheck
/// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
/// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
+
+ /// CHECK-START: java.lang.Object[] Main.$noinline$testArraySetsSameRTI() disassembly (after)
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static java.lang.Object[] $noinline$testArraySetsSameRTI() {
Object[] arr = new Object[3];
arr[0] = inner_static;
@@ -119,9 +134,12 @@ public class Main {
/// CHECK-START: Main Main.$noinline$testNullInstanceFieldSets(Main, java.lang.Object) disassembly (after)
/// CHECK: InstanceFieldSet field_name:Main.inner field_type:Reference write_barrier_kind:DontEmit
- /// CHECK: InstanceFieldSet field_name:Main.inner2 field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: InstanceFieldSet field_name:Main.inner2 field_type:Reference write_barrier_kind:EmitWithNullCheck
/// CHECK: InstanceFieldSet field_name:Main.inner3 field_type:Reference write_barrier_kind:DontEmit
+
+ /// CHECK-START: Main Main.$noinline$testNullInstanceFieldSets(Main, java.lang.Object) disassembly (after)
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static Main $noinline$testNullInstanceFieldSets(Main m, Object o) {
m.inner = null;
m.inner2 = o;
@@ -131,9 +149,12 @@ public class Main {
/// CHECK-START: void Main.$noinline$testNullStaticFieldSets(java.lang.Object) disassembly (after)
/// CHECK: StaticFieldSet field_name:Main.inner_static field_type:Reference write_barrier_kind:DontEmit
- /// CHECK: StaticFieldSet field_name:Main.inner_static2 field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: StaticFieldSet field_name:Main.inner_static2 field_type:Reference write_barrier_kind:EmitWithNullCheck
/// CHECK: StaticFieldSet field_name:Main.inner_static3 field_type:Reference write_barrier_kind:DontEmit
+
+ /// CHECK-START: void Main.$noinline$testNullStaticFieldSets(java.lang.Object) disassembly (after)
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static void $noinline$testNullStaticFieldSets(Object o) {
inner_static = null;
inner_static2 = o;
@@ -142,9 +163,12 @@ public class Main {
/// CHECK-START: java.lang.Object[] Main.$noinline$testNullArraySets(java.lang.Object[], java.lang.Object) disassembly (after)
/// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
- /// CHECK: ArraySet needs_type_check:true can_trigger_gc:true write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: ArraySet needs_type_check:true can_trigger_gc:true write_barrier_kind:EmitNoNullCheck
/// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
+
+ /// CHECK-START: java.lang.Object[] Main.$noinline$testNullArraySets(java.lang.Object[], java.lang.Object) disassembly (after)
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static Object[] $noinline$testNullArraySets(Object[] arr, Object o) {
arr[0] = null;
arr[1] = o;
@@ -153,11 +177,18 @@ public class Main {
}
/// CHECK-START: Main Main.$noinline$testInstanceFieldSetsMultipleReceivers(Main, java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
- /// CHECK: InstanceFieldSet field_name:MultipleObject.inner field_type:Reference write_barrier_kind:EmitBeingReliedOn
+ // There are two extra card_tables for the initialization of the MultipleObject.
+ /// CHECK: InstanceFieldSet field_name:MultipleObject.inner field_type:Reference write_barrier_kind:EmitNoNullCheck
+ /// CHECK: InstanceFieldSet field_name:MultipleObject.inner field_type:Reference write_barrier_kind:EmitWithNullCheck
+ /// CHECK: InstanceFieldSet field_name:MultipleObject.inner2 field_type:Reference write_barrier_kind:DontEmit
+
+ // Each one of the two NewInstance instructions have their own `card_table` reference.
+ /// CHECK-START: Main Main.$noinline$testInstanceFieldSetsMultipleReceivers(Main, java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
/// CHECK: ; card_table
- /// CHECK: InstanceFieldSet field_name:MultipleObject.inner field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
/// CHECK: ; card_table
- /// CHECK: InstanceFieldSet field_name:MultipleObject.inner2 field_type:Reference write_barrier_kind:DontEmit
+ /// CHECK: ; card_table
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static Main $noinline$testInstanceFieldSetsMultipleReceivers(
Main m, Object o, Object o2, Object o3) throws Error {
m.mo = new MultipleObject();
@@ -173,11 +204,14 @@ public class Main {
}
/// CHECK-START: void Main.$noinline$testStaticFieldSetsMultipleReceivers(java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
- /// CHECK: StaticFieldSet field_name:MultipleObject.inner_static field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
+ /// CHECK: StaticFieldSet field_name:MultipleObject.inner_static field_type:Reference write_barrier_kind:EmitWithNullCheck
+ /// CHECK: StaticFieldSet field_name:Main.inner_static2 field_type:Reference write_barrier_kind:EmitNoNullCheck
+ /// CHECK: StaticFieldSet field_name:Main.inner_static3 field_type:Reference write_barrier_kind:DontEmit
+
+ /// CHECK-START: void Main.$noinline$testStaticFieldSetsMultipleReceivers(java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
/// CHECK: ; card_table
- /// CHECK: StaticFieldSet field_name:Main.inner_static2 field_type:Reference write_barrier_kind:EmitBeingReliedOn
/// CHECK: ; card_table
- /// CHECK: StaticFieldSet field_name:Main.inner_static3 field_type:Reference write_barrier_kind:DontEmit
+ /// CHECK-NOT: ; card_table
private static void $noinline$testStaticFieldSetsMultipleReceivers(
Object o, Object o2, Object o3) {
MultipleObject.inner_static = o;
@@ -187,15 +221,20 @@ public class Main {
/// CHECK-START: java.lang.Object[][] Main.$noinline$testArraySetsMultipleReceiversSameRTI() disassembly (after)
// Initializing the values
- /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitBeingReliedOn
- /// CHECK: ; card_table
- /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNoNullCheck
+ /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNoNullCheck
/// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
// Setting the `array_of_arrays`.
- /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNoNullCheck
/// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
+
+ /// CHECK-START: java.lang.Object[][] Main.$noinline$testArraySetsMultipleReceiversSameRTI() disassembly (after)
+ // Two array sets can't eliminate the write barrier
+ /// CHECK: ; card_table
+ /// CHECK: ; card_table
+ // One write barrier for the array of arrays' sets
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static java.lang.Object[][] $noinline$testArraySetsMultipleReceiversSameRTI() {
Object[] arr = new Object[3];
Object[] other_arr = new Object[3];
@@ -212,14 +251,17 @@ public class Main {
private static void $noinline$emptyMethod() {}
/// CHECK-START: Main Main.$noinline$testInstanceFieldSetsBlocked(Main, java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
- /// CHECK: InstanceFieldSet field_name:Main.inner field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: InstanceFieldSet field_name:Main.inner field_type:Reference write_barrier_kind:EmitWithNullCheck
/// CHECK: InvokeStaticOrDirect method_name:Main.$noinline$emptyMethod
- /// CHECK: InstanceFieldSet field_name:Main.inner2 field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: InstanceFieldSet field_name:Main.inner2 field_type:Reference write_barrier_kind:EmitWithNullCheck
/// CHECK: MonitorOperation kind:enter
- /// CHECK: InstanceFieldSet field_name:Main.inner3 field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
+ /// CHECK: InstanceFieldSet field_name:Main.inner3 field_type:Reference write_barrier_kind:EmitWithNullCheck
+
+ /// CHECK-START: Main Main.$noinline$testInstanceFieldSetsBlocked(Main, java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
+ /// CHECK: ; card_table
+ /// CHECK: ; card_table
/// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static Main $noinline$testInstanceFieldSetsBlocked(
Main m, Object o, Object o2, Object o3) {
m.inner = o;
@@ -232,14 +274,17 @@ public class Main {
}
/// CHECK-START: void Main.$noinline$testStaticFieldSetsBlocked(Main, java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
- /// CHECK: StaticFieldSet field_name:Main.inner_static field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: StaticFieldSet field_name:Main.inner_static field_type:Reference write_barrier_kind:EmitWithNullCheck
/// CHECK: InvokeStaticOrDirect method_name:Main.$noinline$emptyMethod
- /// CHECK: StaticFieldSet field_name:Main.inner_static2 field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: StaticFieldSet field_name:Main.inner_static2 field_type:Reference write_barrier_kind:EmitWithNullCheck
/// CHECK: MonitorOperation kind:enter
- /// CHECK: StaticFieldSet field_name:Main.inner_static3 field_type:Reference write_barrier_kind:EmitNotBeingReliedOn
+ /// CHECK: StaticFieldSet field_name:Main.inner_static3 field_type:Reference write_barrier_kind:EmitWithNullCheck
+
+ /// CHECK-START: void Main.$noinline$testStaticFieldSetsBlocked(Main, java.lang.Object, java.lang.Object, java.lang.Object) disassembly (after)
/// CHECK: ; card_table
+ /// CHECK: ; card_table
+ /// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static void $noinline$testStaticFieldSetsBlocked(
Main m, Object o, Object o2, Object o3) {
inner_static = o;
@@ -251,14 +296,17 @@ public class Main {
}
/// CHECK-START: java.lang.Object[] Main.$noinline$testArraySetsSameRTIBlocked(Main) disassembly (after)
- /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNoNullCheck
/// CHECK: InvokeStaticOrDirect method_name:Main.$noinline$emptyMethod
- /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNotBeingReliedOn
- /// CHECK: ; card_table
+ /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNoNullCheck
/// CHECK: MonitorOperation kind:enter
- /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNotBeingReliedOn
+ /// CHECK: ArraySet needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitNoNullCheck
+
+ /// CHECK-START: java.lang.Object[] Main.$noinline$testArraySetsSameRTIBlocked(Main) disassembly (after)
+ /// CHECK: ; card_table
+ /// CHECK: ; card_table
/// CHECK: ; card_table
+ /// CHECK-NOT: ; card_table
private static java.lang.Object[] $noinline$testArraySetsSameRTIBlocked(Main m) {
Object[] arr = new Object[3];
arr[0] = inner_static;
diff --git a/test/2272-checker-codegen-honor-write-barrier-kind/expected-stderr.txt b/test/2272-checker-codegen-honor-write-barrier-kind/expected-stderr.txt
deleted file mode 100644
index e69de29bb2..0000000000
--- a/test/2272-checker-codegen-honor-write-barrier-kind/expected-stderr.txt
+++ /dev/null
diff --git a/test/2272-checker-codegen-honor-write-barrier-kind/expected-stdout.txt b/test/2272-checker-codegen-honor-write-barrier-kind/expected-stdout.txt
deleted file mode 100644
index e69de29bb2..0000000000
--- a/test/2272-checker-codegen-honor-write-barrier-kind/expected-stdout.txt
+++ /dev/null
diff --git a/test/2272-checker-codegen-honor-write-barrier-kind/info.txt b/test/2272-checker-codegen-honor-write-barrier-kind/info.txt
deleted file mode 100644
index 455bb77de3..0000000000
--- a/test/2272-checker-codegen-honor-write-barrier-kind/info.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Two regression tests:
-1) Regression test to honor the write barrier kind and set the dirty bit.
-2) Regression test for skipping a needed write barrier at runtime.
diff --git a/test/2272-checker-codegen-honor-write-barrier-kind/run.py b/test/2272-checker-codegen-honor-write-barrier-kind/run.py
deleted file mode 100644
index ebdb9b5896..0000000000
--- a/test/2272-checker-codegen-honor-write-barrier-kind/run.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#! /bin/bash
-#
-# Copyright (C) 2023 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-def run(ctx, args):
- # Limit the managed heap to 16 MiB to force more garbage collections.
- ctx.default_run(args, runtime_option=["-Xmx16m"])
diff --git a/test/2272-checker-codegen-honor-write-barrier-kind/src/Main.java b/test/2272-checker-codegen-honor-write-barrier-kind/src/Main.java
deleted file mode 100644
index f07286b5b9..0000000000
--- a/test/2272-checker-codegen-honor-write-barrier-kind/src/Main.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-public class Main {
- public static void main(String[] args) {
- $noinline$testHonorWriteBarrier();
- $noinline$testDontSkipWriteBarrier();
- }
-
- public static void $noinline$testHonorWriteBarrier() {
- String[] arr = {"Hello", "World"};
- // We first run the gc to make sure the card is clean.
- Runtime.getRuntime().gc();
- // Continually call $noinline$testArraySetsHonorWriteBarrier while allocating over 64 MiB of
- // memory (with heap size limited to 16 MiB), in order to increase memory pressure and
- // eventually trigger a concurrent garbage collection, which will start by putting the GC in
- // marking mode to trigger the bug.
- for (int i = 0; i != 64 * 1024; ++i) {
- $noinline$allocateAtLeast1KiB();
- $noinline$testArraySetsHonorWriteBarrier(arr, "Universe");
- }
- }
-
- // When the bug was present, $noinline$testArraySetsHonorWriteBarrier would never set the card
- // as dirty (which is incorrect). arr[1]'s' write barrier depends on arr[0]'s write barrier. The
- // disappeared BoundType in prepare_for_register_allocation shouldn't skip marking the card
- // dirty.
-
- /// CHECK-START: java.lang.String[] Main.$noinline$testArraySetsHonorWriteBarrier(java.lang.String[], java.lang.String) prepare_for_register_allocation (before)
- /// CHECK: <<Null:l\d+>> NullConstant
- /// CHECK: <<BT:l\d+>> BoundType [<<Null>>]
- /// CHECK: ArraySet [<<arr:l\d+>>,<<index:i\d+>>,<<BT>>] value_can_be_null:true needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitBeingReliedOn
- /// CHECK: ArraySet value_can_be_null:true needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
-
- /// CHECK-START: java.lang.String[] Main.$noinline$testArraySetsHonorWriteBarrier(java.lang.String[], java.lang.String) prepare_for_register_allocation (after)
- /// CHECK: <<Null:l\d+>> NullConstant
- /// CHECK: ArraySet [<<arr:l\d+>>,<<index:i\d+>>,<<Null>>] value_can_be_null:true needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitBeingReliedOn
- /// CHECK: ArraySet value_can_be_null:true needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
-
- /// CHECK-START: java.lang.String[] Main.$noinline$testArraySetsHonorWriteBarrier(java.lang.String[], java.lang.String) prepare_for_register_allocation (after)
- /// CHECK-NOT: BoundType
-
- /// CHECK-START: java.lang.String[] Main.$noinline$testArraySetsHonorWriteBarrier(java.lang.String[], java.lang.String) disassembly (after)
- /// CHECK: ArraySet value_can_be_null:true needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitBeingReliedOn
- // / CHECK: ; card_table
- /// CHECK: ArraySet value_can_be_null:true needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
- private static java.lang.String[] $noinline$testArraySetsHonorWriteBarrier(
- String[] arr, String o2) {
- Object o = null;
- arr[0] = (String) o;
- arr[1] = o2;
- return arr;
- }
-
- public static void $noinline$testDontSkipWriteBarrier() {
- String[] arr = {"Hello", "World"};
- // We first run the gc to make sure the card is clean.
- Runtime.getRuntime().gc();
- // Continually call $noinline$testArraySets while allocating over 64 MiB of memory (with
- // heap size limited to 16 MiB), in order to increase memory pressure and eventually trigger
- // a concurrent garbage collection, which will start by putting the GC in marking mode to
- // trigger the bug.
- for (int i = 0; i != 64 * 1024; ++i) {
- $noinline$allocateAtLeast1KiB();
- $noinline$testArraySetsDontSkipWriteBarrier(arr, null, "Universe");
- }
- }
-
- // When the bug was present, $noinline$testArraySetsDontSkipWriteBarrier would never set the
- // card as dirty (which is incorrect). arr[1]'s write barrier depends on arr[0]'s write barrier.
- // The code path should mark the card dirty without a null check on `o` in `arr[0] = o`.
-
- /// CHECK-START: java.lang.String[] Main.$noinline$testArraySetsDontSkipWriteBarrier(java.lang.String[], java.lang.String, java.lang.String) disassembly (after)
- /// CHECK: ArraySet value_can_be_null:true needs_type_check:false can_trigger_gc:false write_barrier_kind:EmitBeingReliedOn
- /// CHECK: ArraySet value_can_be_null:true needs_type_check:false can_trigger_gc:false write_barrier_kind:DontEmit
- private static java.lang.String[] $noinline$testArraySetsDontSkipWriteBarrier(
- String[] arr, String o, String o2) {
- arr[0] = o;
- arr[1] = o2;
- return arr;
- }
-
- // Allocate at least 1 KiB of memory on the managed heap.
- // Retain some allocated memory and release old allocations so that the
- // garbage collector has something to do.
- public static void $noinline$allocateAtLeast1KiB() {
- memory[allocationIndex] = new Object[1024 / 4];
- ++allocationIndex;
- if (allocationIndex == memory.length) {
- allocationIndex = 0;
- }
- }
-
- public static Object[] memory = new Object[1024];
- public static int allocationIndex = 0;
-}
diff --git a/test/knownfailures.json b/test/knownfailures.json
index a0b7dcd760..269b68d014 100644
--- a/test/knownfailures.json
+++ b/test/knownfailures.json
@@ -1,5 +1,10 @@
[
{
+ "tests": "2247-checker-write-barrier-elimination",
+ "description": ["Disable 2247- until we fix the WBE issue."],
+ "bug": "http://b/310755375"
+ },
+ {
"tests": "153-reference-stress",
"description": ["Disable 153-reference-stress temporarily until a fix",
"arrives."],