From 13c3ce1edf7fa9e8e97fb60625a62cb97a13f9a9 Mon Sep 17 00:00:00 2001 From: Santiago Aboy Solanes Date: Mon, 5 Dec 2022 12:05:43 +0000 Subject: Update CanTriggerGC flag for ArraySet ArraySet instructions can trigger a GC only when perforing a type check. When clearing the needs type check flag, we should also clear the CanTriggerGC flag from the instruction's side effects. Note that once we clear the needs type check flag, we never set it again. Add check in graph checker that the needs type check and the can trigger GC flag are consistent. Add can_trigger_gc property to graph visualizer that reflects whether the ArraySet instruction can trigger a GC. Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b Change-Id: I4c74f902aabf2339bd292e9b24737f55d2737440 --- test/527-checker-array-access-split/src/Main.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'test/527-checker-array-access-split/src/Main.java') diff --git a/test/527-checker-array-access-split/src/Main.java b/test/527-checker-array-access-split/src/Main.java index f39b5e26a0..cc1dc6b8fc 100644 --- a/test/527-checker-array-access-split/src/Main.java +++ b/test/527-checker-array-access-split/src/Main.java @@ -593,12 +593,16 @@ public class Main { /// CHECK: ArrayGet [<>,{{i\d+}}] /// CHECK: <> IntermediateAddress [<>,<>] /// CHECK: ArrayGet [<>,{{i\d+}}] - /// CHECK: ArraySet [<>,{{i\d+}},{{l\d+}}] + /// CHECK: ArraySet [<>,{{i\d+}},{{l\d+}}] needs_type_check:false can_trigger_gc:false /// CHECK: <> IntermediateAddress [<>,<>] /// CHECK: ArrayGet [<>,{{i\d+}}] /// CHECK: ArraySet [<>,{{i\d+}},{{l\d+}}] /// CHECK: ArraySet [<>,{{i\d+}},{{l\d+}}] // + /// CHECK-START-ARM64: int Main.checkObjectArrayGet(int, java.lang.Integer[], java.lang.Integer[]) instruction_simplifier_arm64 (after) + /// CHECK: IntermediateAddress + /// CHECK: IntermediateAddress + /// CHECK: IntermediateAddress /// CHECK-NOT: IntermediateAddress /// CHECK-START-ARM64: int Main.checkObjectArrayGet(int, java.lang.Integer[], java.lang.Integer[]) GVN$after_arch (after) @@ -608,12 +612,13 @@ public class Main { /// CHECK: <> IntermediateAddress [<>,<>] /// CHECK: ArrayGet [<>,{{i\d+}}] /// CHECK: ArrayGet [<>,{{i\d+}}] - /// CHECK: ArraySet [<>,{{i\d+}},{{l\d+}}] - /// CHECK: <> IntermediateAddress [<>,<>] - /// CHECK: ArrayGet [<>,{{i\d+}}] + /// CHECK: ArraySet [<>,{{i\d+}},{{l\d+}}] needs_type_check:false can_trigger_gc:false + /// CHECK: ArrayGet [<>,{{i\d+}}] /// CHECK: ArraySet [<>,{{i\d+}},{{l\d+}}] /// CHECK: ArraySet [<>,{{i\d+}},{{l\d+}}] // + /// CHECK-START-ARM64: int Main.checkObjectArrayGet(int, java.lang.Integer[], java.lang.Integer[]) GVN$after_arch (after) + /// CHECK: IntermediateAddress /// CHECK-NOT: IntermediateAddress public final static int checkObjectArrayGet(int index, Integer[] a, Integer[] b) { Integer five = Integer.valueOf(5); -- cgit v1.2.3-59-g8ed1b