1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2007 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 /** 18*795d594fSAndroid Build Coastguard Worker * Test switch() blocks 19*795d594fSAndroid Build Coastguard Worker */ 20*795d594fSAndroid Build Coastguard Worker public class Main { 21*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$packedSwitch(int) builder (after) 22*795d594fSAndroid Build Coastguard Worker /// CHECK: PackedSwitch 23*795d594fSAndroid Build Coastguard Worker // Simple packed-switch. $noinline$packedSwitch(int value)24*795d594fSAndroid Build Coastguard Worker public static void $noinline$packedSwitch(int value) { 25*795d594fSAndroid Build Coastguard Worker switch (value) { 26*795d594fSAndroid Build Coastguard Worker case 0: 27*795d594fSAndroid Build Coastguard Worker System.out.println("0"); break; 28*795d594fSAndroid Build Coastguard Worker case 1: 29*795d594fSAndroid Build Coastguard Worker System.out.println("1"); break; 30*795d594fSAndroid Build Coastguard Worker case 2: 31*795d594fSAndroid Build Coastguard Worker System.out.println("2"); break; 32*795d594fSAndroid Build Coastguard Worker case 3: 33*795d594fSAndroid Build Coastguard Worker System.out.println("3"); break; 34*795d594fSAndroid Build Coastguard Worker case 4: 35*795d594fSAndroid Build Coastguard Worker System.out.println("4"); break; 36*795d594fSAndroid Build Coastguard Worker default: 37*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 38*795d594fSAndroid Build Coastguard Worker } 39*795d594fSAndroid Build Coastguard Worker } 40*795d594fSAndroid Build Coastguard Worker 41*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$packedSwitch2(int) builder (after) 42*795d594fSAndroid Build Coastguard Worker /// CHECK: PackedSwitch 43*795d594fSAndroid Build Coastguard Worker // Simple packed-switch starting at a negative index. $noinline$packedSwitch2(int value)44*795d594fSAndroid Build Coastguard Worker public static void $noinline$packedSwitch2(int value) { 45*795d594fSAndroid Build Coastguard Worker switch (value) { 46*795d594fSAndroid Build Coastguard Worker case -3: 47*795d594fSAndroid Build Coastguard Worker System.out.println("-3"); break; 48*795d594fSAndroid Build Coastguard Worker case -2: 49*795d594fSAndroid Build Coastguard Worker System.out.println("-2"); break; 50*795d594fSAndroid Build Coastguard Worker case -1: 51*795d594fSAndroid Build Coastguard Worker System.out.println("-1"); break; 52*795d594fSAndroid Build Coastguard Worker case 0: 53*795d594fSAndroid Build Coastguard Worker System.out.println("0"); break; 54*795d594fSAndroid Build Coastguard Worker case 1: 55*795d594fSAndroid Build Coastguard Worker System.out.println("1"); break; 56*795d594fSAndroid Build Coastguard Worker case 2: 57*795d594fSAndroid Build Coastguard Worker System.out.println("2"); break; 58*795d594fSAndroid Build Coastguard Worker default: 59*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 60*795d594fSAndroid Build Coastguard Worker } 61*795d594fSAndroid Build Coastguard Worker } 62*795d594fSAndroid Build Coastguard Worker 63*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$packedSwitch3(int) builder (after) 64*795d594fSAndroid Build Coastguard Worker /// CHECK: PackedSwitch 65*795d594fSAndroid Build Coastguard Worker // Simple packed-switch starting above 0. $noinline$packedSwitch3(int value)66*795d594fSAndroid Build Coastguard Worker public static void $noinline$packedSwitch3(int value) { 67*795d594fSAndroid Build Coastguard Worker switch (value) { 68*795d594fSAndroid Build Coastguard Worker case 2: 69*795d594fSAndroid Build Coastguard Worker System.out.println("2"); break; 70*795d594fSAndroid Build Coastguard Worker case 3: 71*795d594fSAndroid Build Coastguard Worker System.out.println("3"); break; 72*795d594fSAndroid Build Coastguard Worker case 4: 73*795d594fSAndroid Build Coastguard Worker System.out.println("4"); break; 74*795d594fSAndroid Build Coastguard Worker case 5: 75*795d594fSAndroid Build Coastguard Worker System.out.println("5"); break; 76*795d594fSAndroid Build Coastguard Worker case 6: 77*795d594fSAndroid Build Coastguard Worker System.out.println("6"); break; 78*795d594fSAndroid Build Coastguard Worker default: 79*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 80*795d594fSAndroid Build Coastguard Worker } 81*795d594fSAndroid Build Coastguard Worker } 82*795d594fSAndroid Build Coastguard Worker 83*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$packedSwitch4(int) builder (after) 84*795d594fSAndroid Build Coastguard Worker /// CHECK: PackedSwitch 85*795d594fSAndroid Build Coastguard Worker // Simple packed-switch going up to max_int. $noinline$packedSwitch4(int value)86*795d594fSAndroid Build Coastguard Worker public static void $noinline$packedSwitch4(int value) { 87*795d594fSAndroid Build Coastguard Worker switch (value) { 88*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE - 3: 89*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE - 3); break; 90*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE - 2: 91*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE - 2); break; 92*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE - 1: 93*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE - 1); break; 94*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE: 95*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE); break; 96*795d594fSAndroid Build Coastguard Worker default: 97*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 98*795d594fSAndroid Build Coastguard Worker } 99*795d594fSAndroid Build Coastguard Worker } 100*795d594fSAndroid Build Coastguard Worker 101*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$packedSwitch5(int) builder (after) 102*795d594fSAndroid Build Coastguard Worker /// CHECK: PackedSwitch 103*795d594fSAndroid Build Coastguard Worker // Simple packed-switch starting at min_int. $noinline$packedSwitch5(int value)104*795d594fSAndroid Build Coastguard Worker public static void $noinline$packedSwitch5(int value) { 105*795d594fSAndroid Build Coastguard Worker switch (value) { 106*795d594fSAndroid Build Coastguard Worker case Integer.MIN_VALUE: 107*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MIN_VALUE); break; 108*795d594fSAndroid Build Coastguard Worker case Integer.MIN_VALUE + 1: 109*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MIN_VALUE + 1); break; 110*795d594fSAndroid Build Coastguard Worker case Integer.MIN_VALUE + 2: 111*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MIN_VALUE + 2); break; 112*795d594fSAndroid Build Coastguard Worker case Integer.MIN_VALUE + 3: 113*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MIN_VALUE + 3); break; 114*795d594fSAndroid Build Coastguard Worker default: 115*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 116*795d594fSAndroid Build Coastguard Worker } 117*795d594fSAndroid Build Coastguard Worker } 118*795d594fSAndroid Build Coastguard Worker 119*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.$noinline$packedSwitch7(int) builder (after) 120*795d594fSAndroid Build Coastguard Worker /// CHECK: PackedSwitch 121*795d594fSAndroid Build Coastguard Worker // Long packed-switch that might lead to not creating chained-ifs. $noinline$packedSwitch7(int value)122*795d594fSAndroid Build Coastguard Worker public static long $noinline$packedSwitch7(int value) { 123*795d594fSAndroid Build Coastguard Worker switch (value) { 124*795d594fSAndroid Build Coastguard Worker case 1: 125*795d594fSAndroid Build Coastguard Worker System.out.println(1); break; 126*795d594fSAndroid Build Coastguard Worker case 2: 127*795d594fSAndroid Build Coastguard Worker System.out.println(2); break; 128*795d594fSAndroid Build Coastguard Worker case 3: 129*795d594fSAndroid Build Coastguard Worker System.out.println(3); break; 130*795d594fSAndroid Build Coastguard Worker case 4: 131*795d594fSAndroid Build Coastguard Worker System.out.println(4); break; 132*795d594fSAndroid Build Coastguard Worker case 5: 133*795d594fSAndroid Build Coastguard Worker System.out.println(5); break; 134*795d594fSAndroid Build Coastguard Worker case 6: 135*795d594fSAndroid Build Coastguard Worker System.out.println(6); break; 136*795d594fSAndroid Build Coastguard Worker case 7: 137*795d594fSAndroid Build Coastguard Worker System.out.println(7); break; 138*795d594fSAndroid Build Coastguard Worker case 8: 139*795d594fSAndroid Build Coastguard Worker System.out.println(8); break; 140*795d594fSAndroid Build Coastguard Worker case 9: 141*795d594fSAndroid Build Coastguard Worker System.out.println(9); break; 142*795d594fSAndroid Build Coastguard Worker case 10: 143*795d594fSAndroid Build Coastguard Worker System.out.println(10); break; 144*795d594fSAndroid Build Coastguard Worker case 11: 145*795d594fSAndroid Build Coastguard Worker System.out.println(11); break; 146*795d594fSAndroid Build Coastguard Worker case 12: 147*795d594fSAndroid Build Coastguard Worker System.out.println(12); break; 148*795d594fSAndroid Build Coastguard Worker case 13: 149*795d594fSAndroid Build Coastguard Worker System.out.println(13); break; 150*795d594fSAndroid Build Coastguard Worker case 14: 151*795d594fSAndroid Build Coastguard Worker System.out.println(14); break; 152*795d594fSAndroid Build Coastguard Worker case 15: 153*795d594fSAndroid Build Coastguard Worker System.out.println(15); break; 154*795d594fSAndroid Build Coastguard Worker default: 155*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 156*795d594fSAndroid Build Coastguard Worker } 157*795d594fSAndroid Build Coastguard Worker 158*795d594fSAndroid Build Coastguard Worker // Jump tables previously were emitted in the end of the method code buffer. The 159*795d594fSAndroid Build Coastguard Worker // following boilerplate code aims to fill the emitted code buffer extensively 160*795d594fSAndroid Build Coastguard Worker // and check that even for big method jump table is correctly emitted, its address 161*795d594fSAndroid Build Coastguard Worker // is within a range of corresponded pc-relative instructions (this applies to 162*795d594fSAndroid Build Coastguard Worker // ARM mainly). 163*795d594fSAndroid Build Coastguard Worker long temp = value; 164*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 165*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 166*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 167*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 168*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 169*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 170*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 171*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 172*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 173*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 174*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 175*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 176*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 177*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 178*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 179*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 180*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 181*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 182*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 183*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 184*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 185*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 186*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 187*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 188*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 189*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 190*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 191*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 192*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 193*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 194*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 195*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 196*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 197*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 198*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 199*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 200*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 201*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 202*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 203*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 204*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 205*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 206*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 207*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 208*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 209*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 210*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 211*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 212*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 213*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 214*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 215*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 216*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 217*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 218*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 219*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 220*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 221*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 222*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 223*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 224*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 225*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 226*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 227*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 228*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 229*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 230*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 231*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 232*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 233*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 234*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 235*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 236*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 237*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 238*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 239*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 240*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 241*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 242*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 243*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 244*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 245*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 246*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 247*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 248*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 249*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 250*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 251*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 252*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 253*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 254*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 255*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 256*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 257*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 258*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 259*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 260*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 261*795d594fSAndroid Build Coastguard Worker temp = Long.rotateLeft(temp, value); 262*795d594fSAndroid Build Coastguard Worker 263*795d594fSAndroid Build Coastguard Worker return temp; 264*795d594fSAndroid Build Coastguard Worker } 265*795d594fSAndroid Build Coastguard Worker 266*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$sparseSwitch(int) builder (after) 267*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: PackedSwitch 268*795d594fSAndroid Build Coastguard Worker // Sparse switch, just leave a large gap. $noinline$sparseSwitch(int value)269*795d594fSAndroid Build Coastguard Worker public static void $noinline$sparseSwitch(int value) { 270*795d594fSAndroid Build Coastguard Worker switch (value) { 271*795d594fSAndroid Build Coastguard Worker case 0: 272*795d594fSAndroid Build Coastguard Worker System.out.println("0"); break; 273*795d594fSAndroid Build Coastguard Worker case 1: 274*795d594fSAndroid Build Coastguard Worker System.out.println("1"); break; 275*795d594fSAndroid Build Coastguard Worker case 2: 276*795d594fSAndroid Build Coastguard Worker System.out.println("2"); break; 277*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE: 278*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE); break; 279*795d594fSAndroid Build Coastguard Worker default: 280*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 281*795d594fSAndroid Build Coastguard Worker } 282*795d594fSAndroid Build Coastguard Worker } 283*795d594fSAndroid Build Coastguard Worker 284*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$sparseSwitch2(int) builder (after) 285*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: PackedSwitch 286*795d594fSAndroid Build Coastguard Worker // Simple sparse-switch starting at a negative index. $noinline$sparseSwitch2(int value)287*795d594fSAndroid Build Coastguard Worker public static void $noinline$sparseSwitch2(int value) { 288*795d594fSAndroid Build Coastguard Worker switch (value) { 289*795d594fSAndroid Build Coastguard Worker case -3: 290*795d594fSAndroid Build Coastguard Worker System.out.println("-3"); break; 291*795d594fSAndroid Build Coastguard Worker case -2: 292*795d594fSAndroid Build Coastguard Worker System.out.println("-2"); break; 293*795d594fSAndroid Build Coastguard Worker case -1: 294*795d594fSAndroid Build Coastguard Worker System.out.println("-1"); break; 295*795d594fSAndroid Build Coastguard Worker case 0: 296*795d594fSAndroid Build Coastguard Worker System.out.println("0"); break; 297*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE: 298*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE); break; 299*795d594fSAndroid Build Coastguard Worker default: 300*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 301*795d594fSAndroid Build Coastguard Worker } 302*795d594fSAndroid Build Coastguard Worker } 303*795d594fSAndroid Build Coastguard Worker 304*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$sparseSwitch3(int) builder (after) 305*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: PackedSwitch 306*795d594fSAndroid Build Coastguard Worker // Simple sparse-switch starting above 0. $noinline$sparseSwitch3(int value)307*795d594fSAndroid Build Coastguard Worker public static void $noinline$sparseSwitch3(int value) { 308*795d594fSAndroid Build Coastguard Worker switch (value) { 309*795d594fSAndroid Build Coastguard Worker case 2: 310*795d594fSAndroid Build Coastguard Worker System.out.println("2"); break; 311*795d594fSAndroid Build Coastguard Worker case 4: 312*795d594fSAndroid Build Coastguard Worker System.out.println("4"); break; 313*795d594fSAndroid Build Coastguard Worker case 5: 314*795d594fSAndroid Build Coastguard Worker System.out.println("5"); break; 315*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE: 316*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE); break; 317*795d594fSAndroid Build Coastguard Worker default: 318*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 319*795d594fSAndroid Build Coastguard Worker } 320*795d594fSAndroid Build Coastguard Worker } 321*795d594fSAndroid Build Coastguard Worker 322*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$sparseSwitch4(int) builder (after) 323*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: PackedSwitch 324*795d594fSAndroid Build Coastguard Worker // Simple sparse-switch going up to max_int. $noinline$sparseSwitch4(int value)325*795d594fSAndroid Build Coastguard Worker public static void $noinline$sparseSwitch4(int value) { 326*795d594fSAndroid Build Coastguard Worker switch (value) { 327*795d594fSAndroid Build Coastguard Worker case Integer.MIN_VALUE: 328*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MIN_VALUE); break; 329*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE - 2: 330*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE - 2); break; 331*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE - 1: 332*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE - 1); break; 333*795d594fSAndroid Build Coastguard Worker case Integer.MAX_VALUE: 334*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MAX_VALUE); break; 335*795d594fSAndroid Build Coastguard Worker default: 336*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 337*795d594fSAndroid Build Coastguard Worker } 338*795d594fSAndroid Build Coastguard Worker } 339*795d594fSAndroid Build Coastguard Worker 340*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$sparseSwitch5(int) builder (after) 341*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: PackedSwitch 342*795d594fSAndroid Build Coastguard Worker // Simple sparse-switch starting at min_int. $noinline$sparseSwitch5(int value)343*795d594fSAndroid Build Coastguard Worker public static void $noinline$sparseSwitch5(int value) { 344*795d594fSAndroid Build Coastguard Worker switch (value) { 345*795d594fSAndroid Build Coastguard Worker case Integer.MIN_VALUE: 346*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MIN_VALUE); break; 347*795d594fSAndroid Build Coastguard Worker case Integer.MIN_VALUE + 2: 348*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MIN_VALUE + 2); break; 349*795d594fSAndroid Build Coastguard Worker default: 350*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 351*795d594fSAndroid Build Coastguard Worker } 352*795d594fSAndroid Build Coastguard Worker } 353*795d594fSAndroid Build Coastguard Worker 354*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$sparseSwitch6(int) builder (after) 355*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: PackedSwitch 356*795d594fSAndroid Build Coastguard Worker // Simple switch with only min_int. It is sparse since it has less than kSmallSwitchThreshold 357*795d594fSAndroid Build Coastguard Worker // values. $noinline$sparseSwitch6(int value)358*795d594fSAndroid Build Coastguard Worker public static void $noinline$sparseSwitch6(int value) { 359*795d594fSAndroid Build Coastguard Worker switch (value) { 360*795d594fSAndroid Build Coastguard Worker case Integer.MIN_VALUE: 361*795d594fSAndroid Build Coastguard Worker System.out.println(Integer.MIN_VALUE); break; 362*795d594fSAndroid Build Coastguard Worker default: 363*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 364*795d594fSAndroid Build Coastguard Worker } 365*795d594fSAndroid Build Coastguard Worker } 366*795d594fSAndroid Build Coastguard Worker 367*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.$noinline$sparseSwitch7(int) builder (after) 368*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: PackedSwitch 369*795d594fSAndroid Build Coastguard Worker // Long sparse-switch that might lead to not creating chained-ifs. $noinline$sparseSwitch7(int value)370*795d594fSAndroid Build Coastguard Worker public static void $noinline$sparseSwitch7(int value) { 371*795d594fSAndroid Build Coastguard Worker switch (value) { 372*795d594fSAndroid Build Coastguard Worker case 1: 373*795d594fSAndroid Build Coastguard Worker System.out.println(1); break; 374*795d594fSAndroid Build Coastguard Worker case 2: 375*795d594fSAndroid Build Coastguard Worker System.out.println(2); break; 376*795d594fSAndroid Build Coastguard Worker case 4: 377*795d594fSAndroid Build Coastguard Worker System.out.println(4); break; 378*795d594fSAndroid Build Coastguard Worker case 5: 379*795d594fSAndroid Build Coastguard Worker System.out.println(5); break; 380*795d594fSAndroid Build Coastguard Worker case 15: 381*795d594fSAndroid Build Coastguard Worker System.out.println(15); break; 382*795d594fSAndroid Build Coastguard Worker default: 383*795d594fSAndroid Build Coastguard Worker System.out.println("default"); break; 384*795d594fSAndroid Build Coastguard Worker } 385*795d594fSAndroid Build Coastguard Worker } 386*795d594fSAndroid Build Coastguard Worker main(String args[])387*795d594fSAndroid Build Coastguard Worker public static void main(String args[]) { 388*795d594fSAndroid Build Coastguard Worker System.out.println("packed"); 389*795d594fSAndroid Build Coastguard Worker for (int i = -2; i < 3; i++) { 390*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch(i); 391*795d594fSAndroid Build Coastguard Worker } 392*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch(Integer.MIN_VALUE); 393*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch(Integer.MAX_VALUE); 394*795d594fSAndroid Build Coastguard Worker 395*795d594fSAndroid Build Coastguard Worker System.out.println("packed2"); 396*795d594fSAndroid Build Coastguard Worker for (int i = -2; i < 3; i++) { 397*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch2(i); 398*795d594fSAndroid Build Coastguard Worker } 399*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch2(Integer.MIN_VALUE); 400*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch2(Integer.MAX_VALUE); 401*795d594fSAndroid Build Coastguard Worker 402*795d594fSAndroid Build Coastguard Worker System.out.println("packed3"); 403*795d594fSAndroid Build Coastguard Worker for (int i = -2; i < 7; i++) { 404*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch3(i); 405*795d594fSAndroid Build Coastguard Worker } 406*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch3(Integer.MIN_VALUE); 407*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch3(Integer.MAX_VALUE); 408*795d594fSAndroid Build Coastguard Worker 409*795d594fSAndroid Build Coastguard Worker System.out.println("packed4"); 410*795d594fSAndroid Build Coastguard Worker for (int i = Integer.MAX_VALUE - 4; i > 0; i++) { 411*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch4(i); 412*795d594fSAndroid Build Coastguard Worker } 413*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch4(Integer.MIN_VALUE); 414*795d594fSAndroid Build Coastguard Worker 415*795d594fSAndroid Build Coastguard Worker System.out.println("packed5"); 416*795d594fSAndroid Build Coastguard Worker for (int i = Integer.MIN_VALUE; i < Integer.MIN_VALUE + 4; i++) { 417*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch5(i); 418*795d594fSAndroid Build Coastguard Worker } 419*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch5(Integer.MAX_VALUE); 420*795d594fSAndroid Build Coastguard Worker 421*795d594fSAndroid Build Coastguard Worker System.out.println("packed7"); 422*795d594fSAndroid Build Coastguard Worker for (int i = -1; i < 17; i++) { 423*795d594fSAndroid Build Coastguard Worker $noinline$packedSwitch7(i); 424*795d594fSAndroid Build Coastguard Worker } 425*795d594fSAndroid Build Coastguard Worker 426*795d594fSAndroid Build Coastguard Worker 427*795d594fSAndroid Build Coastguard Worker System.out.println("sparse"); 428*795d594fSAndroid Build Coastguard Worker for (int i = -2; i < 4; i++) { 429*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch(i); 430*795d594fSAndroid Build Coastguard Worker } 431*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch(Integer.MIN_VALUE); 432*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch(Integer.MAX_VALUE); 433*795d594fSAndroid Build Coastguard Worker 434*795d594fSAndroid Build Coastguard Worker System.out.println("sparse2"); 435*795d594fSAndroid Build Coastguard Worker for (int i = -2; i < 3; i++) { 436*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch2(i); 437*795d594fSAndroid Build Coastguard Worker } 438*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch2(Integer.MIN_VALUE); 439*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch2(Integer.MAX_VALUE); 440*795d594fSAndroid Build Coastguard Worker 441*795d594fSAndroid Build Coastguard Worker System.out.println("sparse3"); 442*795d594fSAndroid Build Coastguard Worker for (int i = -2; i < 7; i++) { 443*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch3(i); 444*795d594fSAndroid Build Coastguard Worker } 445*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch3(Integer.MIN_VALUE); 446*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch3(Integer.MAX_VALUE); 447*795d594fSAndroid Build Coastguard Worker 448*795d594fSAndroid Build Coastguard Worker System.out.println("sparse4"); 449*795d594fSAndroid Build Coastguard Worker for (int i = Integer.MAX_VALUE - 3; i > 0; i++) { 450*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch4(i); 451*795d594fSAndroid Build Coastguard Worker } 452*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch4(Integer.MIN_VALUE); 453*795d594fSAndroid Build Coastguard Worker 454*795d594fSAndroid Build Coastguard Worker System.out.println("sparse5"); 455*795d594fSAndroid Build Coastguard Worker for (int i = Integer.MIN_VALUE; i < Integer.MIN_VALUE + 2; i++) { 456*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch5(i); 457*795d594fSAndroid Build Coastguard Worker } 458*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch5(Integer.MAX_VALUE); 459*795d594fSAndroid Build Coastguard Worker 460*795d594fSAndroid Build Coastguard Worker System.out.println("sparse6"); 461*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch6(Integer.MIN_VALUE); 462*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch6(Integer.MAX_VALUE); 463*795d594fSAndroid Build Coastguard Worker 464*795d594fSAndroid Build Coastguard Worker System.out.println("sparse7"); 465*795d594fSAndroid Build Coastguard Worker for (int i = -1; i < 17; i++) { 466*795d594fSAndroid Build Coastguard Worker $noinline$sparseSwitch7(i); 467*795d594fSAndroid Build Coastguard Worker } 468*795d594fSAndroid Build Coastguard Worker 469*795d594fSAndroid Build Coastguard Worker // Older tests. 470*795d594fSAndroid Build Coastguard Worker 471*795d594fSAndroid Build Coastguard Worker int a = 1; 472*795d594fSAndroid Build Coastguard Worker 473*795d594fSAndroid Build Coastguard Worker switch (a) { 474*795d594fSAndroid Build Coastguard Worker case -1: System.out.print("neg one\n"); break; 475*795d594fSAndroid Build Coastguard Worker case 0: System.out.print("zero\n"); break; 476*795d594fSAndroid Build Coastguard Worker case 1: System.out.print("CORRECT (one)\n"); break; 477*795d594fSAndroid Build Coastguard Worker case 2: System.out.print("two\n"); break; 478*795d594fSAndroid Build Coastguard Worker case 3: System.out.print("three\n"); break; 479*795d594fSAndroid Build Coastguard Worker case 4: System.out.print("four\n"); break; 480*795d594fSAndroid Build Coastguard Worker default: System.out.print("???\n"); break; 481*795d594fSAndroid Build Coastguard Worker } 482*795d594fSAndroid Build Coastguard Worker switch (a) { 483*795d594fSAndroid Build Coastguard Worker case 3: System.out.print("three\n"); break; 484*795d594fSAndroid Build Coastguard Worker case 4: System.out.print("four\n"); break; 485*795d594fSAndroid Build Coastguard Worker default: System.out.print("CORRECT (not found)\n"); break; 486*795d594fSAndroid Build Coastguard Worker } 487*795d594fSAndroid Build Coastguard Worker 488*795d594fSAndroid Build Coastguard Worker a = 0x12345678; 489*795d594fSAndroid Build Coastguard Worker 490*795d594fSAndroid Build Coastguard Worker switch (a) { 491*795d594fSAndroid Build Coastguard Worker case 0x12345678: System.out.print("CORRECT (large)\n"); break; 492*795d594fSAndroid Build Coastguard Worker case 0x12345679: System.out.print("large+1\n"); break; 493*795d594fSAndroid Build Coastguard Worker default: System.out.print("nuts\n"); break; 494*795d594fSAndroid Build Coastguard Worker } 495*795d594fSAndroid Build Coastguard Worker switch (a) { 496*795d594fSAndroid Build Coastguard Worker case 0x12345678: System.out.print("CORRECT (large2)\n"); break; 497*795d594fSAndroid Build Coastguard Worker case 0x12345700: System.out.print("large+many\n"); break; 498*795d594fSAndroid Build Coastguard Worker default: System.out.print("nuts\n"); break; 499*795d594fSAndroid Build Coastguard Worker } 500*795d594fSAndroid Build Coastguard Worker switch (a) { 501*795d594fSAndroid Build Coastguard Worker case 57: System.out.print("fifty-seven!\n"); break; 502*795d594fSAndroid Build Coastguard Worker case -6: System.out.print("neg six!\n"); break; 503*795d594fSAndroid Build Coastguard Worker case 0x12345678: System.out.print("CORRECT (large3)\n"); break; 504*795d594fSAndroid Build Coastguard Worker case 22: System.out.print("twenty-two!\n"); break; 505*795d594fSAndroid Build Coastguard Worker case 3: System.out.print("three!\n"); break; 506*795d594fSAndroid Build Coastguard Worker default: System.out.print("huh?\n"); break; 507*795d594fSAndroid Build Coastguard Worker } 508*795d594fSAndroid Build Coastguard Worker switch (a) { 509*795d594fSAndroid Build Coastguard Worker case -6: System.out.print("neg six!\n"); break; 510*795d594fSAndroid Build Coastguard Worker case 3: System.out.print("three!\n"); break; 511*795d594fSAndroid Build Coastguard Worker default: System.out.print("CORRECT (not found)\n"); break; 512*795d594fSAndroid Build Coastguard Worker } 513*795d594fSAndroid Build Coastguard Worker 514*795d594fSAndroid Build Coastguard Worker a = -5; 515*795d594fSAndroid Build Coastguard Worker switch (a) { 516*795d594fSAndroid Build Coastguard Worker case 12: System.out.print("twelve\n"); break; 517*795d594fSAndroid Build Coastguard Worker case -5: System.out.print("CORRECT (not found)\n"); break; 518*795d594fSAndroid Build Coastguard Worker case 0: System.out.print("zero\n"); break; 519*795d594fSAndroid Build Coastguard Worker default: System.out.print("wah?\n"); break; 520*795d594fSAndroid Build Coastguard Worker } 521*795d594fSAndroid Build Coastguard Worker 522*795d594fSAndroid Build Coastguard Worker switch (a) { 523*795d594fSAndroid Build Coastguard Worker default: System.out.print("CORRECT (default only)\n"); break; 524*795d594fSAndroid Build Coastguard Worker } 525*795d594fSAndroid Build Coastguard Worker 526*795d594fSAndroid Build Coastguard Worker a = -10; 527*795d594fSAndroid Build Coastguard Worker switch (a) { 528*795d594fSAndroid Build Coastguard Worker case -10: System.out.print("CORRECT big sparse / first\n"); break; 529*795d594fSAndroid Build Coastguard Worker case -5: System.out.print("neg five\n"); break; 530*795d594fSAndroid Build Coastguard Worker case 0: System.out.print("zero\n"); break; 531*795d594fSAndroid Build Coastguard Worker case 5: System.out.print("five\n"); break; 532*795d594fSAndroid Build Coastguard Worker case 10: System.out.print("ten\n"); break; 533*795d594fSAndroid Build Coastguard Worker case 15: System.out.print("fifteen\n"); break; 534*795d594fSAndroid Build Coastguard Worker case 20: System.out.print("twenty\n"); break; 535*795d594fSAndroid Build Coastguard Worker case 50: System.out.print("fifty\n"); break; 536*795d594fSAndroid Build Coastguard Worker case 100: System.out.print("hundred\n"); break; 537*795d594fSAndroid Build Coastguard Worker default: System.out.print("blah!\n"); break; 538*795d594fSAndroid Build Coastguard Worker } 539*795d594fSAndroid Build Coastguard Worker 540*795d594fSAndroid Build Coastguard Worker a = 100; 541*795d594fSAndroid Build Coastguard Worker switch (a) { 542*795d594fSAndroid Build Coastguard Worker case -10: System.out.print("neg ten\n"); break; 543*795d594fSAndroid Build Coastguard Worker case -5: System.out.print("neg five\n"); break; 544*795d594fSAndroid Build Coastguard Worker case 0: System.out.print("zero\n"); break; 545*795d594fSAndroid Build Coastguard Worker case 5: System.out.print("five\n"); break; 546*795d594fSAndroid Build Coastguard Worker case 10: System.out.print("ten\n"); break; 547*795d594fSAndroid Build Coastguard Worker case 15: System.out.print("fifteen\n"); break; 548*795d594fSAndroid Build Coastguard Worker case 20: System.out.print("twenty\n"); break; 549*795d594fSAndroid Build Coastguard Worker case 50: System.out.print("fifty\n"); break; 550*795d594fSAndroid Build Coastguard Worker case 100: System.out.print("CORRECT big sparse / last\n"); break; 551*795d594fSAndroid Build Coastguard Worker default: System.out.print("blah!\n"); break; 552*795d594fSAndroid Build Coastguard Worker } 553*795d594fSAndroid Build Coastguard Worker 554*795d594fSAndroid Build Coastguard Worker for (a = 253; a <= 258; a++) { 555*795d594fSAndroid Build Coastguard Worker switch (a) { 556*795d594fSAndroid Build Coastguard Worker case 254: System.out.println("254"); break; 557*795d594fSAndroid Build Coastguard Worker case 255: System.out.println("255"); break; 558*795d594fSAndroid Build Coastguard Worker case 256: System.out.println("256"); break; 559*795d594fSAndroid Build Coastguard Worker case 257: System.out.println("257"); break; 560*795d594fSAndroid Build Coastguard Worker default: System.out.println("default"); break; 561*795d594fSAndroid Build Coastguard Worker } 562*795d594fSAndroid Build Coastguard Worker } 563*795d594fSAndroid Build Coastguard Worker } 564*795d594fSAndroid Build Coastguard Worker } 565