summaryrefslogtreecommitdiff
path: root/test/2247-checker-write-barrier-elimination/src/Main.java
diff options
context:
space:
mode:
author Santiago Aboy Solanes <solanes@google.com> 2024-01-22 15:03:42 +0000
committer Santiago Aboy Solanes <solanes@google.com> 2024-01-22 16:20:41 +0000
commit31b949bc4a76e5c6d00a8e18c346f123b5321a1c (patch)
treeb60da081b30899a7447c63ccad60cc4519de9d00 /test/2247-checker-write-barrier-elimination/src/Main.java
parent689cca840843eeced3206da16e475856de953360 (diff)
Revert^4 "Disable write-barrier elimination pass"
This reverts commit b5b98b9bb31acb2deffb692c50d0fbc71476663b. Reason for revert: Breaks tests in arm64 + heap poison configurations Bug: 310755375 Bug: 260843353 Change-Id: I682c74987a365497e0dbe47eba26a9ccf0513561
Diffstat (limited to 'test/2247-checker-write-barrier-elimination/src/Main.java')
-rw-r--r--test/2247-checker-write-barrier-elimination/src/Main.java136
1 files changed, 92 insertions, 44 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;