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