xref: /aosp_15_r20/dalvik/dx/tests/086-ssa-edge-split/Blort.java (revision 055d459012065f78d96b68be8421640240ddf631)
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