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