diff options
-rw-r--r-- | test/484-checker-register-hints/build | 20 | ||||
-rw-r--r-- | test/484-checker-register-hints/smali/Smali.smali | 143 | ||||
-rw-r--r-- | test/484-checker-register-hints/src/Main.java | 12 |
3 files changed, 143 insertions, 32 deletions
diff --git a/test/484-checker-register-hints/build b/test/484-checker-register-hints/build deleted file mode 100644 index 10ffcc537d..0000000000 --- a/test/484-checker-register-hints/build +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -# -# Copyright 2017 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. - -# See b/65168732 -export USE_D8=false - -./default-build "$@" diff --git a/test/484-checker-register-hints/smali/Smali.smali b/test/484-checker-register-hints/smali/Smali.smali new file mode 100644 index 0000000000..659493611f --- /dev/null +++ b/test/484-checker-register-hints/smali/Smali.smali @@ -0,0 +1,143 @@ +# Copyright (C) 2017 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. +.class public LSmali; +.super Ljava/lang/Object; + +## CHECK-START: void Smali.test3Order1(boolean, int, int, int, int, int) register (after) +## CHECK: name "B0" +## CHECK-NOT: ParallelMove +## CHECK: name "B1" +## CHECK-NOT: end_block +## CHECK: If +## CHECK-NOT: ParallelMove +## CHECK: name "B6" +## CHECK-NOT: end_block +## CHECK: InstanceFieldSet +# We could check here that there is a parallel move, but it's only valid +# for some architectures (for example x86), as other architectures may +# not do move at all. +## CHECK: end_block +## CHECK-NOT: ParallelMove +.method public static test3Order1(ZIIIII)V + .registers 14 + + sget v0, LMain;->live1:I + sget v1, LMain;->live2:I + sget v2, LMain;->live3:I + sget v5, LMain;->live0:I + if-eqz p0, :cond_13 + + sput v0, LMain;->live1:I + + :goto_c + add-int v6, v0, v1 + add-int/2addr v6, v2 + add-int/2addr v6, v5 + sput v6, LMain;->live1:I + + return-void + + :cond_13 + sget-boolean v6, LMain;->y:Z + + if-eqz v6, :cond_1a + sput v0, LMain;->live1:I + goto :goto_c + + :cond_1a + sget v3, LMain;->live4:I + + sget v4, LMain;->live5:I + sget-object v6, LMain;->foo:LMain$Foo; + add-int v7, v0, v4 + add-int/2addr v7, v3 + iput v7, v6, LMain$Foo;->field2:I + sget-object v6, LMain;->foo:LMain$Foo; + add-int v7, v1, v4 + add-int/2addr v7, v3 + iput v7, v6, LMain$Foo;->field3:I + sget-object v6, LMain;->foo:LMain$Foo; + add-int v7, v2, v4 + add-int/2addr v7, v3 + iput v7, v6, LMain$Foo;->field4:I + sget-object v6, LMain;->foo:LMain$Foo; + iput v3, v6, LMain$Foo;->field0:I + sget-object v6, LMain;->foo:LMain$Foo; + add-int v7, v4, v3 + iput v7, v6, LMain$Foo;->field1:I + goto :goto_c +.end method + +## CHECK-START: void Smali.test3Order2(boolean, int, int, int, int, int) register (after) +## CHECK: name "B0" +## CHECK-NOT: ParallelMove +## CHECK: name "B1" +## CHECK-NOT: end_block +## CHECK: If +## CHECK-NOT: ParallelMove +## CHECK: name "B5" +## CHECK-NOT: end_block +## CHECK: InstanceFieldSet +# We could check here that there is a parallel move, but it's only valid +# for some architectures (for example x86), as other architectures may +# not do move at all. +## CHECK: end_block +## CHECK-NOT: ParallelMove +.method public static test3Order2(ZIIIII)V + .registers 14 + + sget v0, LMain;->live1:I + sget v1, LMain;->live2:I + sget v2, LMain;->live3:I + sget v3, LMain;->live0:I + if-eqz p0, :cond_d + + sput v0, LMain;->live1:I + goto :goto_37 + + :cond_d + sget-boolean v4, LMain;->y:Z + if-eqz v4, :cond_14 + + sput v0, LMain;->live1:I + goto :goto_37 + + :cond_14 + sget v4, LMain;->live4:I + sget v5, LMain;->live5:I + sget-object v6, LMain;->foo:LMain$Foo; + add-int v7, v0, v5 + add-int/2addr v7, v4 + iput v7, v6, LMain$Foo;->field2:I + sget-object v6, LMain;->foo:LMain$Foo; + add-int v7, v1, v5 + add-int/2addr v7, v4 + iput v7, v6, LMain$Foo;->field3:I + sget-object v6, LMain;->foo:LMain$Foo; + add-int v7, v2, v5 + add-int/2addr v7, v4 + iput v7, v6, LMain$Foo;->field4:I + sget-object v6, LMain;->foo:LMain$Foo; + iput v4, v6, LMain$Foo;->field0:I + sget-object v6, LMain;->foo:LMain$Foo; + add-int v7, v5, v4 + iput v7, v6, LMain$Foo;->field1:I + :goto_37 + + add-int v4, v0, v1 + add-int/2addr v4, v2 + add-int/2addr v4, v3 + sput v4, LMain;->live1:I + return-void +.end method diff --git a/test/484-checker-register-hints/src/Main.java b/test/484-checker-register-hints/src/Main.java index 6e68f7c91e..7aab6598a1 100644 --- a/test/484-checker-register-hints/src/Main.java +++ b/test/484-checker-register-hints/src/Main.java @@ -98,18 +98,6 @@ public class Main { /// CHECK: name "B0" /// CHECK-NOT: ParallelMove /// CHECK: name "B1" - /// CHECK-NOT: end_block - /// CHECK: If - /// CHECK-NOT: ParallelMove - /// CHECK: name "B6" - /// CHECK-NOT: end_block - /// CHECK: InstanceFieldSet - // We could check here that there is a parallel move, but it's only valid - // for some architectures (for example x86), as other architectures may - // not do move at all. - /// CHECK: end_block - /// CHECK-NOT: ParallelMove - public static void test3(boolean z, int a, int b, int c, int d, int m) { // Same version as test2, but with branches reversed, to ensure // whatever linear order is computed, we will get the same results. |