1#
2# Copyright (C) 2017 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16.class public LSmali;
17.super Ljava/lang/Object;
18
19##  CHECK-START: int Smali.bufferLen2() instruction_simplifier (before)
20##  CHECK-DAG: <<New:l\d+>>     NewInstance
21##  CHECK-DAG: <<String1:l\d+>> LoadString
22##  CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>]   intrinsic:StringBufferAppend
23##  CHECK-DAG: <<String2:l\d+>> LoadString
24##  CHECK-DAG: <<Null1:l\d+>>   NullCheck     [<<Append1>>]
25##  CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<Null1>>,<<String2>>] intrinsic:StringBufferAppend
26##  CHECK-DAG: <<Null2:l\d+>>   NullCheck     [<<Append2>>]
27##  CHECK-DAG:                  InvokeVirtual [<<Null2>>]             intrinsic:StringBufferLength
28
29##  CHECK-START: int Smali.bufferLen2() instruction_simplifier (after)
30##  CHECK-DAG: <<New:l\d+>>     NewInstance
31##  CHECK-DAG: <<String1:l\d+>> LoadString
32##  CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>] intrinsic:StringBufferAppend
33##  CHECK-DAG: <<String2:l\d+>> LoadString
34##  CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<New>>,<<String2>>] intrinsic:StringBufferAppend
35##  CHECK-DAG:                  InvokeVirtual [<<New>>]             intrinsic:StringBufferLength
36.method public static bufferLen2()I
37    .registers 3
38
39    new-instance v0, Ljava/lang/StringBuffer;
40
41    invoke-direct {v0}, Ljava/lang/StringBuffer;-><init>()V
42
43    const-string v1, "x"
44    invoke-virtual {v0, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
45    move-result-object v1
46
47    const-string v2, "x"
48    invoke-virtual {v1, v2}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
49    move-result-object v1
50
51    invoke-virtual {v1}, Ljava/lang/StringBuffer;->length()I
52    move-result v1
53
54    return v1
55.end method
56
57## CHECK-START: int Smali.builderLen2() instruction_simplifier (before)
58## CHECK-DAG: <<New:l\d+>>     NewInstance
59## CHECK-DAG: <<String1:l\d+>> LoadString
60## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>]   intrinsic:StringBuilderAppend
61## CHECK-DAG: <<String2:l\d+>> LoadString
62## CHECK-DAG: <<Null2:l\d+>>   NullCheck     [<<Append1>>]
63## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<Null2>>,<<String2>>] intrinsic:StringBuilderAppend
64## CHECK-DAG: <<Null3:l\d+>>   NullCheck     [<<Append2>>]
65## CHECK-DAG:                  InvokeVirtual [<<Null3>>]             intrinsic:StringBuilderLength
66
67## CHECK-START: int Smali.builderLen2() instruction_simplifier (after)
68## CHECK-DAG: <<New:l\d+>>     NewInstance
69## CHECK-DAG: <<String1:l\d+>> LoadString
70## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>] intrinsic:StringBuilderAppend
71## CHECK-DAG: <<String2:l\d+>> LoadString
72## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<New>>,<<String2>>] intrinsic:StringBuilderAppend
73## CHECK-DAG:                  InvokeVirtual [<<New>>]             intrinsic:StringBuilderLength
74.method public static builderLen2()I
75    .registers 3
76
77    new-instance v0, Ljava/lang/StringBuilder;
78
79    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
80
81    const-string v1, "x"
82    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
83    move-result-object v1
84
85    const-string v2, "x"
86    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
87    move-result-object v1
88
89    invoke-virtual {v1}, Ljava/lang/StringBuilder;->length()I
90    move-result v1
91
92    return v1
93.end method
94
95## CHECK-START: int Smali.bufferLoopAppender() instruction_simplifier (before)
96## CHECK-DAG: <<New:l\d+>>     NewInstance                                                         loop:none
97## CHECK-DAG: <<String1:l\d+>> LoadString                                                          loop:<<Loop:B\d+>>
98## CHECK-DAG: <<Null1:l\d+>>   NullCheck     [<<New>>]                                             loop:<<Loop>>
99## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<Null1>>,<<String1>>] intrinsic:StringBufferAppend  loop:<<Loop>>
100## CHECK-DAG: <<String2:l\d+>> LoadString                                                          loop:<<Loop>>
101## CHECK-DAG: <<Null2:l\d+>>   NullCheck     [<<Append1>>]                                         loop:<<Loop>>
102## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<Null2>>,<<String2>>] intrinsic:StringBufferAppend  loop:<<Loop>>
103## CHECK-DAG: <<String3:l\d+>> LoadString                                                          loop:<<Loop>>
104## CHECK-DAG: <<Null3:l\d+>>   NullCheck     [<<Append2>>]                                         loop:<<Loop>>
105## CHECK-DAG: <<Append3:l\d+>> InvokeVirtual [<<Null3>>,<<String3>>] intrinsic:StringBufferAppend  loop:<<Loop>>
106## CHECK-DAG: <<Null4:l\d+>>   NullCheck     [<<New>>]                                             loop:none
107## CHECK-DAG:                  InvokeVirtual [<<Null4>>]             intrinsic:StringBufferLength  loop:none
108
109## CHECK-START: int Smali.bufferLoopAppender() instruction_simplifier (after)
110## CHECK-DAG: <<New:l\d+>>     NewInstance                                                       loop:none
111## CHECK-DAG: <<String1:l\d+>> LoadString                                                        loop:<<Loop:B\d+>>
112## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>] intrinsic:StringBufferAppend  loop:<<Loop>>
113## CHECK-DAG: <<String2:l\d+>> LoadString                                                        loop:<<Loop>>
114## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<New>>,<<String2>>] intrinsic:StringBufferAppend  loop:<<Loop>>
115## CHECK-DAG: <<String3:l\d+>> LoadString                                                        loop:<<Loop>>
116## CHECK-DAG: <<Append3:l\d+>> InvokeVirtual [<<New>>,<<String3>>] intrinsic:StringBufferAppend  loop:<<Loop>>
117## CHECK-DAG:                  InvokeVirtual [<<New>>]             intrinsic:StringBufferLength  loop:none
118.method public static bufferLoopAppender()I
119    .registers 4
120
121    new-instance v0, Ljava/lang/StringBuffer;
122
123    invoke-direct {v0}, Ljava/lang/StringBuffer;-><init>()V
124
125    const/4 v1, 0x0
126
127    :goto_6
128    const/16 v2, 0xa
129
130    if-ge v1, v2, :cond_1e
131
132    const-string v2, "x"
133    invoke-virtual {v0, v2}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
134    move-result-object v2
135
136    const-string v3, "y"
137    invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
138    move-result-object v2
139
140    const-string v3, "z"
141    invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
142
143    add-int/lit8 v1, v1, 0x1
144    goto :goto_6
145
146    :cond_1e
147    invoke-virtual {v0}, Ljava/lang/StringBuffer;->length()I
148
149    move-result v2
150
151    return v2
152.end method
153
154## CHECK-START: int Smali.builderLoopAppender() instruction_simplifier (before)
155## CHECK-DAG: <<New:l\d+>>     NewInstance                                                         loop:none
156## CHECK-DAG: <<String1:l\d+>> LoadString                                                          loop:<<Loop:B\d+>>
157## CHECK-DAG: <<Null1:l\d+>>   NullCheck     [<<New>>]                                             loop:<<Loop>>
158## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<Null1>>,<<String1>>] intrinsic:StringBuilderAppend loop:<<Loop>>
159## CHECK-DAG: <<String2:l\d+>> LoadString                                                          loop:<<Loop>>
160## CHECK-DAG: <<Null2:l\d+>>   NullCheck     [<<Append1>>]                                         loop:<<Loop>>
161## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<Null2>>,<<String2>>] intrinsic:StringBuilderAppend loop:<<Loop>>
162## CHECK-DAG: <<String3:l\d+>> LoadString                                                          loop:<<Loop>>
163## CHECK-DAG: <<Null3:l\d+>>   NullCheck     [<<Append2>>]                                         loop:<<Loop>>
164## CHECK-DAG: <<Append3:l\d+>> InvokeVirtual [<<Null3>>,<<String3>>] intrinsic:StringBuilderAppend loop:<<Loop>>
165## CHECK-DAG: <<Null4:l\d+>>   NullCheck     [<<New>>]                                             loop:none
166## CHECK-DAG:                  InvokeVirtual [<<Null4>>]             intrinsic:StringBuilderLength loop:none
167
168## CHECK-START: int Smali.builderLoopAppender() instruction_simplifier (after)
169## CHECK-DAG: <<New:l\d+>>     NewInstance                                                       loop:none
170## CHECK-DAG: <<String1:l\d+>> LoadString                                                        loop:<<Loop:B\d+>>
171## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>] intrinsic:StringBuilderAppend loop:<<Loop>>
172## CHECK-DAG: <<String2:l\d+>> LoadString                                                        loop:<<Loop>>
173## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<New>>,<<String2>>] intrinsic:StringBuilderAppend loop:<<Loop>>
174## CHECK-DAG: <<String3:l\d+>> LoadString                                                        loop:<<Loop>>
175## CHECK-DAG: <<Append3:l\d+>> InvokeVirtual [<<New>>,<<String3>>] intrinsic:StringBuilderAppend loop:<<Loop>>
176## CHECK-DAG:                  InvokeVirtual [<<New>>]             intrinsic:StringBuilderLength loop:none
177.method public static builderLoopAppender()I
178    .registers 4
179
180    new-instance v0, Ljava/lang/StringBuilder;
181
182    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
183
184    const/4 v1, 0x0
185
186    :goto_6
187    const/16 v2, 0xa
188
189    if-ge v1, v2, :cond_1e
190
191    const-string v2, "x"
192
193    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
194    move-result-object v2
195    const-string v3, "y"
196
197    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
198    move-result-object v2
199    const-string v3, "z"
200
201    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
202    add-int/lit8 v1, v1, 0x1
203
204    goto :goto_6
205
206    :cond_1e
207    invoke-virtual {v0}, Ljava/lang/StringBuilder;->length()I
208
209    move-result v2
210
211    return v2
212.end method
213