diff options
author | 2022-12-05 12:05:43 +0000 | |
---|---|---|
committer | 2022-12-05 17:26:27 +0000 | |
commit | 13c3ce1edf7fa9e8e97fb60625a62cb97a13f9a9 (patch) | |
tree | 2c4188ec7dbd450d158598527371edbaa3cbd3fa /test/590-checker-arr-set-null-regression/src/Main.java | |
parent | 6d2b6bacc6ad5c7e85a8608094469088cd6c8f56 (diff) |
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
Diffstat (limited to 'test/590-checker-arr-set-null-regression/src/Main.java')
-rw-r--r-- | test/590-checker-arr-set-null-regression/src/Main.java | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/test/590-checker-arr-set-null-regression/src/Main.java b/test/590-checker-arr-set-null-regression/src/Main.java index 792ee4ecd6..ad47716c40 100644 --- a/test/590-checker-arr-set-null-regression/src/Main.java +++ b/test/590-checker-arr-set-null-regression/src/Main.java @@ -33,7 +33,7 @@ public class Main { /// CHECK-DAG: <<CheckedArray:l\d+>> NullCheck [<<Array>>] /// CHECK-DAG: <<Length:i\d+>> ArrayLength [<<CheckedArray>>] /// CHECK-DAG: <<CheckedIndex:i\d+>> BoundsCheck [<<Index>>,<<Length>>] - /// CHECK-DAG: <<ArraySet:v\d+>> ArraySet [<<CheckedArray>>,<<CheckedIndex>>,<<CheckedValue>>] needs_type_check:true + /// CHECK-DAG: <<ArraySet:v\d+>> ArraySet [<<CheckedArray>>,<<CheckedIndex>>,<<CheckedValue>>] needs_type_check:true can_trigger_gc:true /// CHECK-START: void Main.testArraySetCheckCastNull(Main$Element[]) instruction_simplifier (after) /// CHECK-NOT: CheckCast @@ -47,7 +47,7 @@ public class Main { /// CHECK-DAG: <<CheckedArray:l\d+>> NullCheck [<<Array>>] /// CHECK-DAG: <<Length:i\d+>> ArrayLength [<<CheckedArray>>] /// CHECK-DAG: <<CheckedIndex:i\d+>> BoundsCheck [<<Index>>,<<Length>>] - /// CHECK-DAG: <<ArraySet:v\d+>> ArraySet [<<CheckedArray>>,<<CheckedIndex>>,<<CheckedValue>>] needs_type_check:true + /// CHECK-DAG: <<ArraySet:v\d+>> ArraySet [<<CheckedArray>>,<<CheckedIndex>>,<<CheckedValue>>] needs_type_check:true can_trigger_gc:true /// CHECK-START: void Main.testArraySetCheckCastNull(Main$Element[]) prepare_for_register_allocation (after) /// CHECK: <<Array:l\d+>> ParameterValue @@ -55,7 +55,7 @@ public class Main { /// CHECK-DAG: <<Null:l\d+>> NullConstant /// CHECK-DAG: <<Class:l\d+>> LoadClass /// CHECK-DAG: <<Length:i\d+>> ArrayLength [<<Array>>] - /// CHECK-DAG: <<ArraySet:v\d+>> ArraySet [<<Array>>,<<Index>>,<<Null>>] needs_type_check:false + /// CHECK-DAG: <<ArraySet:v\d+>> ArraySet [<<Array>>,<<Index>>,<<Null>>] needs_type_check:false can_trigger_gc:false static void testArraySetCheckCastNull(Element[] elements) { Object object = null; |