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 LSmali;
     16 .super Ljava/lang/Object;
     17 
     18 ## CHECK-START: void Smali.stencilSubInt(int[], int[], int) loop_optimization (before)
     19 ## CHECK-DAG: <<PAR3:i\d+>>  ParameterValue                       loop:none
     20 ## CHECK-DAG: <<CP1:i\d+>>   IntConstant 1                        loop:none
     21 ## CHECK-DAG: <<Sub1:i\d+>>  Sub [<<PAR3>>,<<CP1>>]               loop:none
     22 ## CHECK-DAG: <<Phi:i\d+>>   Phi                                  loop:<<Loop:B\d+>> outer_loop:none
     23 ## CHECK-DAG: <<Sub2:i\d+>>  Sub [<<Phi>>,<<CP1>>]                loop:<<Loop>>      outer_loop:none
     24 ## CHECK-DAG: <<Get1:i\d+>>  ArrayGet [{{l\d+}},<<Sub2>>]         loop:<<Loop>>      outer_loop:none
     25 ## CHECK-DAG: <<Get2:i\d+>>  ArrayGet [{{l\d+}},<<Phi>>]          loop:<<Loop>>      outer_loop:none
     26 ## CHECK-DAG: <<Add1:i\d+>>  Add [<<Get1>>,<<Get2>>]              loop:<<Loop>>      outer_loop:none
     27 ## CHECK-DAG: <<Add2:i\d+>>  Add [<<Phi>>,<<CP1>>]                loop:<<Loop>>      outer_loop:none
     28 ## CHECK-DAG: <<Get3:i\d+>>  ArrayGet [{{l\d+}},<<Add2>>]         loop:<<Loop>>      outer_loop:none
     29 ## CHECK-DAG: <<Add3:i\d+>>  Add [<<Add1>>,<<Get3>>]              loop:<<Loop>>      outer_loop:none
     30 ## CHECK-DAG:                ArraySet [{{l\d+}},<<Phi>>,<<Add3>>] loop:<<Loop>>      outer_loop:none
     31 
     32 ## CHECK-START-ARM64: void Smali.stencilSubInt(int[], int[], int) loop_optimization (after)
     33 ## CHECK-DAG: <<CP1:i\d+>>   IntConstant 1                         loop:none
     34 ## CHECK-DAG: <<CP2:i\d+>>   IntConstant 2                         loop:none
     35 ## CHECK-DAG: <<Phi:i\d+>>   Phi                                   loop:<<Loop:B\d+>> outer_loop:none
     36 ## CHECK-DAG: <<Add1:i\d+>>  Add [<<Phi>>,<<CP1>>]                 loop:<<Loop>>      outer_loop:none
     37 ## CHECK-DAG: <<Get1:d\d+>>  VecLoad [{{l\d+}},<<Phi>>]            loop:<<Loop>>      outer_loop:none
     38 ## CHECK-DAG: <<Get2:d\d+>>  VecLoad [{{l\d+}},<<Add1>>]           loop:<<Loop>>      outer_loop:none
     39 ## CHECK-DAG: <<Add2:d\d+>>  VecAdd [<<Get1>>,<<Get2>>]            loop:<<Loop>>      outer_loop:none
     40 ## CHECK-DAG: <<Add3:i\d+>>  Add [<<Phi>>,<<CP2>>]                 loop:<<Loop>>      outer_loop:none
     41 ## CHECK-DAG: <<Get3:d\d+>>  VecLoad [{{l\d+}},<<Add3>>]           loop:<<Loop>>      outer_loop:none
     42 ## CHECK-DAG: <<Add4:d\d+>>  VecAdd [<<Add2>>,<<Get3>>]            loop:<<Loop>>      outer_loop:none
     43 ## CHECK-DAG:                VecStore [{{l\d+}},<<Add1>>,<<Add4>>] loop:<<Loop>>      outer_loop:none
     44 .method public static stencilSubInt([I[II)V
     45     .registers 7
     46 
     47     const/4 v0, 0x1
     48 
     49     move v1, v0
     50 
     51     :goto_2
     52     sub-int v2, p2, v0
     53 
     54     if-ge v1, v2, :cond_17
     55 
     56     sub-int v2, v1, v0
     57     aget v2, p1, v2
     58     aget v3, p1, v1
     59     add-int/2addr v2, v3
     60     add-int v3, v1, v0
     61     aget v3, p1, v3
     62     add-int/2addr v2, v3
     63     aput v2, p0, v1
     64     add-int/lit8 v1, v1, 0x1
     65 
     66     goto :goto_2
     67 
     68     :cond_17
     69     return-void
     70 .end method
     71 
     72 ## CHECK-START: void Smali.stencilAddInt(int[], int[], int) loop_optimization (before)
     73 ## CHECK-DAG: <<CP1:i\d+>>   IntConstant 1                        loop:none
     74 ## CHECK-DAG: <<CM1:i\d+>>   IntConstant -1                       loop:none
     75 ## CHECK-DAG: <<Phi:i\d+>>   Phi                                  loop:<<Loop:B\d+>> outer_loop:none
     76 ## CHECK-DAG: <<Add1:i\d+>>  Add [<<Phi>>,<<CM1>>]                loop:<<Loop>>      outer_loop:none
     77 ## CHECK-DAG: <<Get1:i\d+>>  ArrayGet [{{l\d+}},<<Add1>>]         loop:<<Loop>>      outer_loop:none
     78 ## CHECK-DAG: <<Get2:i\d+>>  ArrayGet [{{l\d+}},<<Phi>>]          loop:<<Loop>>      outer_loop:none
     79 ## CHECK-DAG: <<Add2:i\d+>>  Add [<<Get1>>,<<Get2>>]              loop:<<Loop>>      outer_loop:none
     80 ## CHECK-DAG: <<Add3:i\d+>>  Add [<<Phi>>,<<CP1>>]                loop:<<Loop>>      outer_loop:none
     81 ## CHECK-DAG: <<Get3:i\d+>>  ArrayGet [{{l\d+}},<<Add3>>]         loop:<<Loop>>      outer_loop:none
     82 ## CHECK-DAG: <<Add4:i\d+>>  Add [<<Add2>>,<<Get3>>]              loop:<<Loop>>      outer_loop:none
     83 ## CHECK-DAG:                ArraySet [{{l\d+}},<<Phi>>,<<Add4>>] loop:<<Loop>>      outer_loop:none
     84 
     85 ## CHECK-START-ARM64: void Smali.stencilAddInt(int[], int[], int) loop_optimization (after)
     86 ## CHECK-DAG: <<CP1:i\d+>>   IntConstant 1                         loop:none
     87 ## CHECK-DAG: <<CP2:i\d+>>   IntConstant 2                         loop:none
     88 ## CHECK-DAG: <<Phi:i\d+>>   Phi                                   loop:<<Loop:B\d+>> outer_loop:none
     89 ## CHECK-DAG: <<Add1:i\d+>>  Add [<<Phi>>,<<CP1>>]                 loop:<<Loop>>      outer_loop:none
     90 ## CHECK-DAG: <<Get1:d\d+>>  VecLoad [{{l\d+}},<<Phi>>]            loop:<<Loop>>      outer_loop:none
     91 ## CHECK-DAG: <<Get2:d\d+>>  VecLoad [{{l\d+}},<<Add1>>]           loop:<<Loop>>      outer_loop:none
     92 ## CHECK-DAG: <<Add2:d\d+>>  VecAdd [<<Get1>>,<<Get2>>]            loop:<<Loop>>      outer_loop:none
     93 ## CHECK-DAG: <<Add3:i\d+>>  Add [<<Phi>>,<<CP2>>]                 loop:<<Loop>>      outer_loop:none
     94 ## CHECK-DAG: <<Get3:d\d+>>  VecLoad [{{l\d+}},<<Add3>>]           loop:<<Loop>>      outer_loop:none
     95 ## CHECK-DAG: <<Add4:d\d+>>  VecAdd [<<Add2>>,<<Get3>>]            loop:<<Loop>>      outer_loop:none
     96 ## CHECK-DAG:                VecStore [{{l\d+}},<<Add1>>,<<Add4>>] loop:<<Loop>>      outer_loop:none
     97 .method public static stencilAddInt([I[II)V
     98     .registers 6
     99 
    100     const/4 v0, 0x1
    101 
    102     :goto_1
    103     add-int/lit8 v1, p2, -0x1
    104 
    105     if-ge v0, v1, :cond_16
    106 
    107     add-int/lit8 v1, v0, -0x1
    108     aget v1, p1, v1
    109     aget v2, p1, v0
    110     add-int/2addr v1, v2
    111     add-int/lit8 v2, v0, 0x1
    112     aget v2, p1, v2
    113     add-int/2addr v1, v2
    114     aput v1, p0, v0
    115     add-int/lit8 v0, v0, 0x1
    116 
    117     goto :goto_1
    118 
    119     :cond_16
    120     return-void
    121 .end method
    122