| # 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 |