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 LIrreducibleLoop; 16 17.super Ljava/lang/Object; 18 19.method public static simpleLoop(I)I 20 .registers 3 21 const/16 v0, 42 22 if-eqz p0, :loop_entry 23 goto :other_loop_pre_entry 24 25 # The then part: beginning of the irreducible loop. 26 :loop_entry 27 if-nez p0, :exit 28 invoke-static {v0},LIrreducibleLoop;->foo(I)V 29 :other_loop_entry 30 goto :loop_entry 31 32 # The else part. 33 :other_loop_pre_entry 34 if-eqz p0, :other_loop_entry 35 invoke-static {v0},LIrreducibleLoop;->foo(I)V 36 goto :other_loop_entry 37 38 :exit 39 return v0 40.end method 41 42.method public static foo(I)V 43 .registers 3 44 const/16 v0, 0 45 sget-boolean v1,LIrreducibleLoop;->doThrow:Z 46 if-eqz v1, :exit 47 # Inlining a method that throws requires re-computing loop information 48 # which is unsupported when the caller has an irreducible loop. 49 throw v0 50 :exit 51 return-void 52.end method 53 54.field public static doThrow:Z 55