1*055d4590SKeyi Gui /* 2*055d4590SKeyi Gui * Copyright (C) 2007 The Android Open Source Project 3*055d4590SKeyi Gui * 4*055d4590SKeyi Gui * Licensed under the Apache License, Version 2.0 (the "License"); 5*055d4590SKeyi Gui * you may not use this file except in compliance with the License. 6*055d4590SKeyi Gui * You may obtain a copy of the License at 7*055d4590SKeyi Gui * 8*055d4590SKeyi Gui * http://www.apache.org/licenses/LICENSE-2.0 9*055d4590SKeyi Gui * 10*055d4590SKeyi Gui * Unless required by applicable law or agreed to in writing, software 11*055d4590SKeyi Gui * distributed under the License is distributed on an "AS IS" BASIS, 12*055d4590SKeyi Gui * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*055d4590SKeyi Gui * See the License for the specific language governing permissions and 14*055d4590SKeyi Gui * limitations under the License. 15*055d4590SKeyi Gui */ 16*055d4590SKeyi Gui 17*055d4590SKeyi Gui public class Blort 18*055d4590SKeyi Gui { 19*055d4590SKeyi Gui /** 20*055d4590SKeyi Gui * This method requires the edge-splitter to add a node 21*055d4590SKeyi Gui * to get to the finally block, since there are 22*055d4590SKeyi Gui * two exception sources. 23*055d4590SKeyi Gui * 24*055d4590SKeyi Gui */ edgeSplitPredTest(int x)25*055d4590SKeyi Gui public int edgeSplitPredTest(int x) { 26*055d4590SKeyi Gui int y = 1; 27*055d4590SKeyi Gui 28*055d4590SKeyi Gui try { 29*055d4590SKeyi Gui Integer.toString(x); 30*055d4590SKeyi Gui Integer.toString(x); 31*055d4590SKeyi Gui y++; 32*055d4590SKeyi Gui } finally { 33*055d4590SKeyi Gui return y; 34*055d4590SKeyi Gui } 35*055d4590SKeyi Gui } 36*055d4590SKeyi Gui 37*055d4590SKeyi Gui /** 38*055d4590SKeyi Gui * just because this should do nothing 39*055d4590SKeyi Gui */ voidFunction()40*055d4590SKeyi Gui void voidFunction() { 41*055d4590SKeyi Gui } 42*055d4590SKeyi Gui 43*055d4590SKeyi Gui /** 44*055d4590SKeyi Gui * Current SSA form requires each move-exception block to have 45*055d4590SKeyi Gui * a unique predecessor 46*055d4590SKeyi Gui */ edgeSplitMoveException()47*055d4590SKeyi Gui void edgeSplitMoveException() { 48*055d4590SKeyi Gui try { 49*055d4590SKeyi Gui hashCode(); 50*055d4590SKeyi Gui hashCode(); 51*055d4590SKeyi Gui } catch (Throwable tr) { 52*055d4590SKeyi Gui } 53*055d4590SKeyi Gui } 54*055d4590SKeyi Gui 55*055d4590SKeyi Gui /** 56*055d4590SKeyi Gui * Presently, any basic block ending in an instruction with 57*055d4590SKeyi Gui * a result needs to have a unique successor. This appies 58*055d4590SKeyi Gui * only to the block between the switch instruction and the return 59*055d4590SKeyi Gui * in this case. 60*055d4590SKeyi Gui */ edgeSplitSuccessor(int x)61*055d4590SKeyi Gui int edgeSplitSuccessor(int x) { 62*055d4590SKeyi Gui int y = 0; 63*055d4590SKeyi Gui 64*055d4590SKeyi Gui switch(x) { 65*055d4590SKeyi Gui case 1: y++; 66*055d4590SKeyi Gui break; 67*055d4590SKeyi Gui case 2: y++; 68*055d4590SKeyi Gui break; 69*055d4590SKeyi Gui case 3: y++; 70*055d4590SKeyi Gui break; 71*055d4590SKeyi Gui } 72*055d4590SKeyi Gui return y; 73*055d4590SKeyi Gui } 74*055d4590SKeyi Gui } 75