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