diff options
Diffstat (limited to 'test/2247-checker-write-barrier-elimination/src/Main.java')
-rw-r--r-- | test/2247-checker-write-barrier-elimination/src/Main.java | 136 |
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; |