| # 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; |
| .source "Smali.java" |
| |
| ## CHECK-START: int Smali.InlineWithControlFlow(boolean) inliner (before) |
| ## CHECK-DAG: <<Const1:i\d+>> IntConstant 1 |
| ## CHECK-DAG: <<Const3:i\d+>> IntConstant 3 |
| ## CHECK-DAG: <<Const5:i\d+>> IntConstant 5 |
| ## CHECK-DAG: <<Add:i\d+>> InvokeStaticOrDirect [<<Const1>>,<<Const3>>{{(,[ij]\d+)?}}] |
| ## CHECK-DAG: <<Sub:i\d+>> InvokeStaticOrDirect [<<Const5>>,<<Const3>>{{(,[ij]\d+)?}}] |
| ## CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>] |
| ## CHECK-DAG: Return [<<Phi>>] |
| |
| ## CHECK-START: int Smali.InlineWithControlFlow(boolean) inliner (after) |
| ## CHECK-DAG: <<Const4:i\d+>> IntConstant 4 |
| ## CHECK-DAG: <<Const2:i\d+>> IntConstant 2 |
| ## CHECK-DAG: <<Phi:i\d+>> Phi [<<Const4>>,<<Const2>>] |
| ## CHECK-DAG: Return [<<Phi>>] |
| .method public static InlineWithControlFlow(Z)I |
| |
| # int x, const1, const3, const5; |
| # const1 = 1; |
| # const3 = 3; |
| # const5 = 5; |
| # if (cond) { |
| # x = returnAdd(const1, const3); |
| # } else { |
| # x = returnSub(const5, const3); |
| # } |
| # return x; |
| |
| .registers 5 |
| .param p0, "cond" # Z |
| |
| .prologue |
| const/4 v0, 0x1 |
| |
| .local v0, "const1":I |
| const/4 v1, 0x3 |
| |
| .local v1, "const3":I |
| const/4 v2, 0x5 |
| |
| .local v2, "const5":I |
| if-eqz p0, :cond_a |
| |
| invoke-static {v0, v1}, LSmali;->returnAdd(II)I |
| |
| move-result v3 |
| |
| .local v3, "x":I |
| :goto_9 |
| return v3 |
| |
| .end local v3 # "x":I |
| :cond_a |
| invoke-static {v2, v1}, LSmali;->returnSub(II)I |
| |
| move-result v3 |
| |
| .restart local v3 # "x":I |
| goto :goto_9 |
| .end method |
| |
| .method private static returnAdd(II)I |
| .registers 3 |
| .param p0, "a" # I |
| .param p1, "b" # I |
| |
| add-int v0, p0, p1 |
| |
| return v0 |
| .end method |
| |
| .method private static returnSub(II)I |
| .registers 3 |
| .param p0, "a" # I |
| .param p1, "b" # I |
| |
| sub-int v0, p0, p1 |
| |
| return v0 |
| .end method |