xref: /aosp_15_r20/art/test/485-checker-dce-switch/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2015 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker public class Main {
18*795d594fSAndroid Build Coastguard Worker 
$inline$method()19*795d594fSAndroid Build Coastguard Worker   public static int $inline$method() {
20*795d594fSAndroid Build Coastguard Worker     return 5;
21*795d594fSAndroid Build Coastguard Worker   }
22*795d594fSAndroid Build Coastguard Worker 
23*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.wholeSwitchDead(int) dead_code_elimination$after_inlining (before)
24*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:                      PackedSwitch
25*795d594fSAndroid Build Coastguard Worker 
26*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.wholeSwitchDead(int) dead_code_elimination$after_inlining (after)
27*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:    <<Const100:i\d+>> IntConstant 100
28*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:                      Return [<<Const100>>]
29*795d594fSAndroid Build Coastguard Worker 
30*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.wholeSwitchDead(int) dead_code_elimination$after_inlining (after)
31*795d594fSAndroid Build Coastguard Worker   /// CHECK-NOT:                      PackedSwitch
32*795d594fSAndroid Build Coastguard Worker 
wholeSwitchDead(int j)33*795d594fSAndroid Build Coastguard Worker   public static int wholeSwitchDead(int j) {
34*795d594fSAndroid Build Coastguard Worker     int i = $inline$method();
35*795d594fSAndroid Build Coastguard Worker     int l = 100;
36*795d594fSAndroid Build Coastguard Worker     if (i > 100) {
37*795d594fSAndroid Build Coastguard Worker       switch(j) {
38*795d594fSAndroid Build Coastguard Worker         case 1:
39*795d594fSAndroid Build Coastguard Worker           i++;
40*795d594fSAndroid Build Coastguard Worker           break;
41*795d594fSAndroid Build Coastguard Worker         case 2:
42*795d594fSAndroid Build Coastguard Worker           i = 99;
43*795d594fSAndroid Build Coastguard Worker           break;
44*795d594fSAndroid Build Coastguard Worker         case 3:
45*795d594fSAndroid Build Coastguard Worker           i = 100;
46*795d594fSAndroid Build Coastguard Worker           break;
47*795d594fSAndroid Build Coastguard Worker         case 4:
48*795d594fSAndroid Build Coastguard Worker           i = -100;
49*795d594fSAndroid Build Coastguard Worker           break;
50*795d594fSAndroid Build Coastguard Worker         case 5:
51*795d594fSAndroid Build Coastguard Worker           i = 7;
52*795d594fSAndroid Build Coastguard Worker           break;
53*795d594fSAndroid Build Coastguard Worker         case 6:
54*795d594fSAndroid Build Coastguard Worker           i = -9;
55*795d594fSAndroid Build Coastguard Worker           break;
56*795d594fSAndroid Build Coastguard Worker       }
57*795d594fSAndroid Build Coastguard Worker       l += i;
58*795d594fSAndroid Build Coastguard Worker     }
59*795d594fSAndroid Build Coastguard Worker 
60*795d594fSAndroid Build Coastguard Worker     return l;
61*795d594fSAndroid Build Coastguard Worker   }
62*795d594fSAndroid Build Coastguard Worker 
63*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.constantSwitch_InRange() dead_code_elimination$after_inlining (before)
64*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:                      PackedSwitch
65*795d594fSAndroid Build Coastguard Worker 
66*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.constantSwitch_InRange() dead_code_elimination$after_inlining (after)
67*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:     <<Const7:i\d+>>  IntConstant 7
68*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:                      Return [<<Const7>>]
69*795d594fSAndroid Build Coastguard Worker 
70*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.constantSwitch_InRange() dead_code_elimination$after_inlining (after)
71*795d594fSAndroid Build Coastguard Worker   /// CHECK-NOT:                      PackedSwitch
72*795d594fSAndroid Build Coastguard Worker 
constantSwitch_InRange()73*795d594fSAndroid Build Coastguard Worker   public static int constantSwitch_InRange() {
74*795d594fSAndroid Build Coastguard Worker     int i = $inline$method();
75*795d594fSAndroid Build Coastguard Worker     switch(i) {
76*795d594fSAndroid Build Coastguard Worker       case 1:
77*795d594fSAndroid Build Coastguard Worker         i++;
78*795d594fSAndroid Build Coastguard Worker         break;
79*795d594fSAndroid Build Coastguard Worker       case 2:
80*795d594fSAndroid Build Coastguard Worker         i = 99;
81*795d594fSAndroid Build Coastguard Worker         break;
82*795d594fSAndroid Build Coastguard Worker       case 3:
83*795d594fSAndroid Build Coastguard Worker         i = 100;
84*795d594fSAndroid Build Coastguard Worker         break;
85*795d594fSAndroid Build Coastguard Worker       case 4:
86*795d594fSAndroid Build Coastguard Worker         i = -100;
87*795d594fSAndroid Build Coastguard Worker         break;
88*795d594fSAndroid Build Coastguard Worker       case 5:
89*795d594fSAndroid Build Coastguard Worker         i = 7;
90*795d594fSAndroid Build Coastguard Worker         break;
91*795d594fSAndroid Build Coastguard Worker       case 6:
92*795d594fSAndroid Build Coastguard Worker         i = -9;
93*795d594fSAndroid Build Coastguard Worker         break;
94*795d594fSAndroid Build Coastguard Worker     }
95*795d594fSAndroid Build Coastguard Worker 
96*795d594fSAndroid Build Coastguard Worker     return i;
97*795d594fSAndroid Build Coastguard Worker   }
98*795d594fSAndroid Build Coastguard Worker 
99*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.constantSwitch_AboveRange() dead_code_elimination$after_inlining (before)
100*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:                      PackedSwitch
101*795d594fSAndroid Build Coastguard Worker 
102*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.constantSwitch_AboveRange() dead_code_elimination$after_inlining (after)
103*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:     <<Const15:i\d+>> IntConstant 15
104*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:                      Return [<<Const15>>]
105*795d594fSAndroid Build Coastguard Worker 
106*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.constantSwitch_AboveRange() dead_code_elimination$after_inlining (after)
107*795d594fSAndroid Build Coastguard Worker   /// CHECK-NOT:                      PackedSwitch
108*795d594fSAndroid Build Coastguard Worker 
constantSwitch_AboveRange()109*795d594fSAndroid Build Coastguard Worker   public static int constantSwitch_AboveRange() {
110*795d594fSAndroid Build Coastguard Worker     int i = $inline$method() + 10;
111*795d594fSAndroid Build Coastguard Worker     switch(i) {
112*795d594fSAndroid Build Coastguard Worker       case 1:
113*795d594fSAndroid Build Coastguard Worker         i++;
114*795d594fSAndroid Build Coastguard Worker         break;
115*795d594fSAndroid Build Coastguard Worker       case 2:
116*795d594fSAndroid Build Coastguard Worker         i = 99;
117*795d594fSAndroid Build Coastguard Worker         break;
118*795d594fSAndroid Build Coastguard Worker       case 3:
119*795d594fSAndroid Build Coastguard Worker         i = 100;
120*795d594fSAndroid Build Coastguard Worker         break;
121*795d594fSAndroid Build Coastguard Worker       case 4:
122*795d594fSAndroid Build Coastguard Worker         i = -100;
123*795d594fSAndroid Build Coastguard Worker         break;
124*795d594fSAndroid Build Coastguard Worker       case 5:
125*795d594fSAndroid Build Coastguard Worker         i = 7;
126*795d594fSAndroid Build Coastguard Worker         break;
127*795d594fSAndroid Build Coastguard Worker       case 6:
128*795d594fSAndroid Build Coastguard Worker         i = -9;
129*795d594fSAndroid Build Coastguard Worker         break;
130*795d594fSAndroid Build Coastguard Worker     }
131*795d594fSAndroid Build Coastguard Worker 
132*795d594fSAndroid Build Coastguard Worker     return i;
133*795d594fSAndroid Build Coastguard Worker   }
134*795d594fSAndroid Build Coastguard Worker 
135*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.constantSwitch_BelowRange() dead_code_elimination$after_inlining (before)
136*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:                      PackedSwitch
137*795d594fSAndroid Build Coastguard Worker 
138*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.constantSwitch_BelowRange() dead_code_elimination$after_inlining (after)
139*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:     <<ConstM5:i\d+>> IntConstant -5
140*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:                      Return [<<ConstM5>>]
141*795d594fSAndroid Build Coastguard Worker 
142*795d594fSAndroid Build Coastguard Worker   /// CHECK-START: int Main.constantSwitch_BelowRange() dead_code_elimination$after_inlining (after)
143*795d594fSAndroid Build Coastguard Worker   /// CHECK-NOT:                      PackedSwitch
144*795d594fSAndroid Build Coastguard Worker 
constantSwitch_BelowRange()145*795d594fSAndroid Build Coastguard Worker   public static int constantSwitch_BelowRange() {
146*795d594fSAndroid Build Coastguard Worker     int i = $inline$method() - 10;
147*795d594fSAndroid Build Coastguard Worker     switch(i) {
148*795d594fSAndroid Build Coastguard Worker       case 1:
149*795d594fSAndroid Build Coastguard Worker         i++;
150*795d594fSAndroid Build Coastguard Worker         break;
151*795d594fSAndroid Build Coastguard Worker       case 2:
152*795d594fSAndroid Build Coastguard Worker         i = 99;
153*795d594fSAndroid Build Coastguard Worker         break;
154*795d594fSAndroid Build Coastguard Worker       case 3:
155*795d594fSAndroid Build Coastguard Worker         i = 100;
156*795d594fSAndroid Build Coastguard Worker         break;
157*795d594fSAndroid Build Coastguard Worker       case 4:
158*795d594fSAndroid Build Coastguard Worker         i = -100;
159*795d594fSAndroid Build Coastguard Worker         break;
160*795d594fSAndroid Build Coastguard Worker       case 5:
161*795d594fSAndroid Build Coastguard Worker         i = 7;
162*795d594fSAndroid Build Coastguard Worker         break;
163*795d594fSAndroid Build Coastguard Worker       case 6:
164*795d594fSAndroid Build Coastguard Worker         i = -9;
165*795d594fSAndroid Build Coastguard Worker         break;
166*795d594fSAndroid Build Coastguard Worker     }
167*795d594fSAndroid Build Coastguard Worker 
168*795d594fSAndroid Build Coastguard Worker     return i;
169*795d594fSAndroid Build Coastguard Worker   }
170*795d594fSAndroid Build Coastguard Worker 
main(String[] args)171*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) throws Exception {
172*795d594fSAndroid Build Coastguard Worker     int ret_val = wholeSwitchDead(10);
173*795d594fSAndroid Build Coastguard Worker     if (ret_val != 100) {
174*795d594fSAndroid Build Coastguard Worker       throw new Error("Incorrect return value from wholeSwitchDead:" + ret_val);
175*795d594fSAndroid Build Coastguard Worker     }
176*795d594fSAndroid Build Coastguard Worker 
177*795d594fSAndroid Build Coastguard Worker     ret_val = constantSwitch_InRange();
178*795d594fSAndroid Build Coastguard Worker     if (ret_val != 7) {
179*795d594fSAndroid Build Coastguard Worker       throw new Error("Incorrect return value from constantSwitch_InRange:" + ret_val);
180*795d594fSAndroid Build Coastguard Worker     }
181*795d594fSAndroid Build Coastguard Worker 
182*795d594fSAndroid Build Coastguard Worker     ret_val = constantSwitch_AboveRange();
183*795d594fSAndroid Build Coastguard Worker     if (ret_val != 15) {
184*795d594fSAndroid Build Coastguard Worker       throw new Error("Incorrect return value from constantSwitch_AboveRange:" + ret_val);
185*795d594fSAndroid Build Coastguard Worker     }
186*795d594fSAndroid Build Coastguard Worker 
187*795d594fSAndroid Build Coastguard Worker     ret_val = constantSwitch_BelowRange();
188*795d594fSAndroid Build Coastguard Worker     if (ret_val != -5) {
189*795d594fSAndroid Build Coastguard Worker       throw new Error("Incorrect return value from constantSwitch_BelowRange:" + ret_val);
190*795d594fSAndroid Build Coastguard Worker     }
191*795d594fSAndroid Build Coastguard Worker   }
192*795d594fSAndroid Build Coastguard Worker }
193