1# Copyright (C) 2017 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15.class public LSmali;
16.super Ljava/lang/Object;
17.source "Smali.java"
18
19##  CHECK-START: int Smali.InlineWithControlFlow(boolean) inliner (before)
20##  CHECK-DAG:     <<Const1:i\d+>> IntConstant 1
21##  CHECK-DAG:     <<Const3:i\d+>> IntConstant 3
22##  CHECK-DAG:     <<Const5:i\d+>> IntConstant 5
23##  CHECK-DAG:     <<Add:i\d+>>    InvokeStaticOrDirect [<<Const1>>,<<Const3>>{{(,[ij]\d+)?}}]
24##  CHECK-DAG:     <<Sub:i\d+>>    InvokeStaticOrDirect [<<Const5>>,<<Const3>>{{(,[ij]\d+)?}}]
25##  CHECK-DAG:     <<Phi:i\d+>>    Phi [<<Add>>,<<Sub>>]
26##  CHECK-DAG:                     Return [<<Phi>>]
27
28##  CHECK-START: int Smali.InlineWithControlFlow(boolean) inliner (after)
29##  CHECK-DAG:     <<Const4:i\d+>> IntConstant 4
30##  CHECK-DAG:     <<Const2:i\d+>> IntConstant 2
31##  CHECK-DAG:     <<Phi:i\d+>>    Phi [<<Const4>>,<<Const2>>]
32##  CHECK-DAG:                     Return [<<Phi>>]
33.method public static InlineWithControlFlow(Z)I
34
35    # int x, const1, const3, const5;
36    # const1 = 1;
37    # const3 = 3;
38    # const5 = 5;
39    # if (cond) {
40    #   x = returnAdd(const1, const3);
41    # } else {
42    #   x = returnSub(const5, const3);
43    # }
44    # return x;
45
46    .registers 5
47    .param p0, "cond"    # Z
48
49    .prologue
50    const/4 v0, 0x1
51
52    .local v0, "const1":I
53    const/4 v1, 0x3
54
55    .local v1, "const3":I
56    const/4 v2, 0x5
57
58    .local v2, "const5":I
59    if-eqz p0, :cond_a
60
61    invoke-static {v0, v1}, LSmali;->returnAdd(II)I
62
63    move-result v3
64
65    .local v3, "x":I
66    :goto_9
67    return v3
68
69    .end local v3    # "x":I
70    :cond_a
71    invoke-static {v2, v1}, LSmali;->returnSub(II)I
72
73    move-result v3
74
75    .restart local v3    # "x":I
76    goto :goto_9
77.end method
78
79.method private static returnAdd(II)I
80    .registers 3
81    .param p0, "a"    # I
82    .param p1, "b"    # I
83
84    add-int v0, p0, p1
85
86    return v0
87.end method
88
89.method private static returnSub(II)I
90    .registers 3
91    .param p0, "a"    # I
92    .param p1, "b"    # I
93
94    sub-int v0, p0, p1
95
96    return v0
97.end method
98