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