Home | History | Annotate | Download | only in smali
      1 # Copyright (C) 2016 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 LIrreducibleLoop;
     16 
     17 .super Ljava/lang/Object;
     18 
     19 ## CHECK-START-X86: int IrreducibleLoop.simpleLoop1(int) dead_code_elimination (before)
     20 ## CHECK-DAG: <<Method:(i|j)\d+>> CurrentMethod
     21 ## CHECK-DAG: <<Constant:i\d+>>   IntConstant 42
     22 ## CHECK-DAG:                     Goto irreducible:true
     23 ## CHECK-DAG:                     InvokeStaticOrDirect [<<Constant>>,<<Method>>] loop:none
     24 ## CHECK-DAG:                     InvokeStaticOrDirect [{{i\d+}},<<Method>>] loop:none
     25 .method public static simpleLoop1(I)I
     26    .registers 3
     27    const/16 v0, 42
     28    invoke-static {v0}, LIrreducibleLoop;->$noinline$m(I)V
     29    if-eqz p0, :b22
     30    goto :b34
     31 
     32    :b34
     33    goto :b20
     34 
     35    :b20
     36    if-nez p0, :b45
     37    goto :b46
     38 
     39    :b46
     40    goto :b21
     41 
     42    :b21
     43    goto :b34
     44 
     45    :b22
     46    :try_start
     47    div-int v0, v0, v0
     48    :try_end
     49    .catchall {:try_start .. :try_end} :b34
     50    goto :b20
     51 
     52    :b45
     53    invoke-static {v0}, LIrreducibleLoop;->$noinline$m(I)V
     54    goto :b26
     55 
     56    :b26
     57    return v0
     58 .end method
     59 
     60 ## CHECK-START-X86: int IrreducibleLoop.simpleLoop2(int) dead_code_elimination (before)
     61 ## CHECK-DAG: <<Method:(i|j)\d+>> CurrentMethod
     62 ## CHECK-DAG: <<Constant:i\d+>>   IntConstant 42
     63 ## CHECK-DAG:                     Goto irreducible:true
     64 ## CHECK-DAG:                     InvokeStaticOrDirect [<<Constant>>,<<Method>>] loop:none
     65 ## CHECK-DAG:                     InvokeStaticOrDirect [{{i\d+}},<<Method>>] loop:none
     66 .method public static simpleLoop2(I)I
     67    .registers 3
     68    const/16 v0, 42
     69 
     70    :try_start1
     71    invoke-static {v0}, LIrreducibleLoop;->$noinline$m(I)V
     72    div-int v0, v0, v0
     73    :try_end1
     74    .catchall {:try_start1 .. :try_end1} :b14
     75 
     76    :try_start2
     77    invoke-static {v0}, LIrreducibleLoop;->$noinline$m(I)V
     78    div-int v0, v0, v0
     79    :try_end2
     80    .catchall {:try_start2 .. :try_end2} :b45
     81    goto :b49
     82 
     83    :b14
     84    goto :b15
     85 
     86    :b45
     87    goto :b15
     88 
     89    :b15
     90    goto :b16
     91 
     92    :b16
     93    goto :b49
     94 
     95    :b49
     96    invoke-static {v0}, LIrreducibleLoop;->$noinline$m(I)V
     97    div-int v0, v0, v0
     98    :try_end3
     99    .catchall {:b49 .. :try_end3} :b49
    100    if-eqz p0, :b16
    101    goto :b26
    102 
    103    :b26
    104    return v0
    105 .end method
    106 
    107 .method public static $noinline$m(I)V
    108    .registers 3
    109    const/16 v0, 0
    110    sget-boolean v1,LIrreducibleLoop;->doThrow:Z
    111    if-eqz v1, :exit
    112    # Prevent inlining.
    113    throw v0
    114    :exit
    115    return-void
    116 .end method
    117 
    118 .field public static doThrow:Z
    119