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