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 18 ## CHECK-START: int Smali.testTrueBranch(int, int) dead_code_elimination$after_inlining (before) 19 ## CHECK-DAG: <<ArgX:i\d+>> ParameterValue 20 ## CHECK-DAG: <<ArgY:i\d+>> ParameterValue 21 ## CHECK-DAG: If 22 ## CHECK-DAG: <<Add:i\d+>> Add [<<ArgX>>,<<ArgY>>] 23 ## CHECK-DAG: <<Sub:i\d+>> Sub [<<ArgX>>,<<ArgY>>] 24 ## CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>] 25 ## CHECK-DAG: Return [<<Phi>>] 26 27 ## CHECK-START: int Smali.testTrueBranch(int, int) dead_code_elimination$after_inlining (after) 28 ## CHECK-DAG: <<ArgX:i\d+>> ParameterValue 29 ## CHECK-DAG: <<ArgY:i\d+>> ParameterValue 30 ## CHECK-DAG: <<Add:i\d+>> Add [<<ArgX>>,<<ArgY>>] 31 ## CHECK-DAG: Return [<<Add>>] 32 33 ## CHECK-START: int Smali.testTrueBranch(int, int) dead_code_elimination$after_inlining (after) 34 ## CHECK-NOT: If 35 ## CHECK-NOT: Sub 36 ## CHECK-NOT: Phi 37 .method public static testTrueBranch(II)I 38 # int z; 39 # if (inlineTrue()) { 40 # z = x + y; 41 # } else { 42 # z = x - y; 43 # // Prevent HSelect simplification by having a branch with multiple instructions. 44 # System.nanoTime(); 45 # } 46 #return z; 47 48 .registers 4 49 .param p0, "x" # I 50 .param p1, "y" # I 51 52 invoke-static {}, LMain;->inlineTrue()Z 53 54 move-result v1 55 56 if-eqz v1, :cond_9 57 58 add-int v0, p0, p1 59 60 :goto_8 61 return v0 62 63 :cond_9 64 sub-int v0, p0, p1 65 66 invoke-static {}, Ljava/lang/System;->nanoTime()J 67 68 goto :goto_8 69 .end method 70 71 ## CHECK-START: int Smali.testFalseBranch(int, int) dead_code_elimination$after_inlining (before) 72 ## CHECK-DAG: <<ArgX:i\d+>> ParameterValue 73 ## CHECK-DAG: <<ArgY:i\d+>> ParameterValue 74 ## CHECK-DAG: If 75 ## CHECK-DAG: <<Add:i\d+>> Add [<<ArgX>>,<<ArgY>>] 76 ## CHECK-DAG: <<Sub:i\d+>> Sub [<<ArgX>>,<<ArgY>>] 77 ## CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>] 78 ## CHECK-DAG: Return [<<Phi>>] 79 80 ## CHECK-START: int Smali.testFalseBranch(int, int) dead_code_elimination$after_inlining (after) 81 ## CHECK-DAG: <<ArgX:i\d+>> ParameterValue 82 ## CHECK-DAG: <<ArgY:i\d+>> ParameterValue 83 ## CHECK-DAG: <<Sub:i\d+>> Sub [<<ArgX>>,<<ArgY>>] 84 ## CHECK-DAG: Return [<<Sub>>] 85 86 ## CHECK-START: int Smali.testFalseBranch(int, int) dead_code_elimination$after_inlining (after) 87 ## CHECK-NOT: If 88 ## CHECK-NOT: Add 89 ## CHECK-NOT: Phi 90 .method public static testFalseBranch(II)I 91 # int z; 92 # if (inlineFalse()) { 93 # z = x + y; 94 # } else { 95 # z = x - y; 96 # // Prevent HSelect simplification by having a branch with multiple instructions. 97 # System.nanoTime(); 98 # } 99 # return z; 100 101 .registers 4 102 .param p0, "x" # I 103 .param p1, "y" # I 104 105 invoke-static {}, LMain;->inlineFalse()Z 106 107 move-result v1 108 109 if-eqz v1, :cond_9 110 111 add-int v0, p0, p1 112 113 :goto_8 114 return v0 115 116 :cond_9 117 sub-int v0, p0, p1 118 119 invoke-static {}, Ljava/lang/System;->nanoTime()J 120 121 goto :goto_8 122 .end method 123