Home | History | Annotate | Download | only in smali
      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 LStoreLoad;
     16 
     17 .super Ljava/lang/Object;
     18 
     19 ## CHECK-START: int StoreLoad.test(int) load_store_elimination (before)
     20 ## CHECK-DAG:     <<Arg:i\d+>>    ParameterValue
     21 ## CHECK-DAG:                     StaticFieldSet [{{l\d+}},<<Arg>>] field_name:StoreLoad.byteField
     22 ## CHECK-DAG:                     StaticFieldSet [{{l\d+}},<<Arg>>] field_name:StoreLoad.byteField2
     23 ## CHECK-DAG:     <<Val:b\d+>>    StaticFieldGet [{{l\d+}}] field_name:StoreLoad.byteField
     24 ## CHECK-DAG:     <<Val2:b\d+>>   StaticFieldGet [{{l\d+}}] field_name:StoreLoad.byteField2
     25 ## CHECK-DAG:     <<Val3:i\d+>>   Add [<<Val>>,<<Val2>>]
     26 ## CHECK-DAG:                     Return [<<Val3>>]
     27 
     28 ## CHECK-START: int StoreLoad.test(int) load_store_elimination (after)
     29 ## CHECK-NOT:                     StaticFieldGet
     30 
     31 ## CHECK-START: int StoreLoad.test(int) load_store_elimination (after)
     32 ## CHECK-DAG:     <<Arg:i\d+>>    ParameterValue
     33 ## CHECK-DAG:                     StaticFieldSet [{{l\d+}},<<Arg>>] field_name:StoreLoad.byteField
     34 ## CHECK-DAG:                     StaticFieldSet [{{l\d+}},<<Arg>>] field_name:StoreLoad.byteField2
     35 ## CHECK-DAG:     <<Conv:b\d+>>   TypeConversion [<<Arg>>]
     36 ## CHECK-DAG:     <<Val3:i\d+>>   Add [<<Conv>>,<<Conv>>]
     37 ## CHECK-DAG:                     Return [<<Val3>>]
     38 .method public static test(I)I
     39     .registers 2
     40     sput-byte v1, LStoreLoad;->byteField:B
     41     sput-byte v1, LStoreLoad;->byteField2:B
     42     sget-byte v0, LStoreLoad;->byteField:B
     43     sget-byte v1, LStoreLoad;->byteField2:B
     44     add-int/2addr v0, v1
     45     return v0
     46 .end method
     47 
     48 ## CHECK-START: int StoreLoad.test2(int) load_store_elimination (before)
     49 ## CHECK-DAG:     <<Arg:i\d+>>    ParameterValue
     50 ## CHECK-DAG:                     StaticFieldSet [{{l\d+}},<<Arg>>] field_name:StoreLoad.byteField
     51 ## CHECK-DAG:                     Return [<<Arg>>]
     52 
     53 ## CHECK-START: int StoreLoad.test2(int) load_store_elimination (after)
     54 ## CHECK-NOT:                     TypeConversion
     55 .method public static test2(I)I
     56     .registers 1
     57     sput-byte v0, LStoreLoad;->byteField:B
     58     return v0
     59 .end method
     60 
     61 .field public static byteField:B
     62 .field public static byteField2:B
     63