blob: 659493611f3806b2c2a0bd356dbce5d89bbc8393 [file] [log] [blame]
# 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