1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2016 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 static class ExpectedError extends Error {} 19*795d594fSAndroid Build Coastguard Worker localStaticNopAndThrow()20*795d594fSAndroid Build Coastguard Worker public static void localStaticNopAndThrow() { 21*795d594fSAndroid Build Coastguard Worker // Pattern matching replaces the invoke even in a block that ends with a `throw`. 22*795d594fSAndroid Build Coastguard Worker $inline$localStaticNop(); 23*795d594fSAndroid Build Coastguard Worker throw new ExpectedError(); 24*795d594fSAndroid Build Coastguard Worker } 25*795d594fSAndroid Build Coastguard Worker $inline$localStaticNop()26*795d594fSAndroid Build Coastguard Worker public static void $inline$localStaticNop() {} 27*795d594fSAndroid Build Coastguard Worker 28*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.staticNopNeverInline() inliner (before) 29*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect 30*795d594fSAndroid Build Coastguard Worker 31*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.staticNopNeverInline() inliner (after) 32*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect 33*795d594fSAndroid Build Coastguard Worker staticNopNeverInline()34*795d594fSAndroid Build Coastguard Worker public static void staticNopNeverInline() { 35*795d594fSAndroid Build Coastguard Worker Second.staticNopNeverInline(11); 36*795d594fSAndroid Build Coastguard Worker } 37*795d594fSAndroid Build Coastguard Worker 38*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.staticNop() inliner (before) 39*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect 40*795d594fSAndroid Build Coastguard Worker 41*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.staticNop() inliner (after) 42*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 43*795d594fSAndroid Build Coastguard Worker staticNop()44*795d594fSAndroid Build Coastguard Worker public static void staticNop() { 45*795d594fSAndroid Build Coastguard Worker Second.staticNop(11); 46*795d594fSAndroid Build Coastguard Worker } 47*795d594fSAndroid Build Coastguard Worker 48*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.nop(Second) inliner (before) 49*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeVirtual 50*795d594fSAndroid Build Coastguard Worker 51*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.nop(Second) inliner (after) 52*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 53*795d594fSAndroid Build Coastguard Worker nop(Second s)54*795d594fSAndroid Build Coastguard Worker public static void nop(Second s) { 55*795d594fSAndroid Build Coastguard Worker s.nop(); 56*795d594fSAndroid Build Coastguard Worker } 57*795d594fSAndroid Build Coastguard Worker 58*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.staticReturnArg2(java.lang.String) inliner (before) 59*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:l\d+>> ParameterValue 60*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Ignored:i\d+>> IntConstant 77 61*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ClinitCk:l\d+>> ClinitCheck 62*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 63*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Invoke:l\d+>> InvokeStaticOrDirect [<<Ignored>>,<<Value>>{{(,[ij]\d+)?}},<<ClinitCk>>] 64*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Invoke>>] 65*795d594fSAndroid Build Coastguard Worker 66*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.staticReturnArg2(java.lang.String) inliner (after) 67*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:l\d+>> ParameterValue 68*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Value>>] 69*795d594fSAndroid Build Coastguard Worker 70*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.staticReturnArg2(java.lang.String) inliner (after) 71*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 72*795d594fSAndroid Build Coastguard Worker staticReturnArg2(String value)73*795d594fSAndroid Build Coastguard Worker public static Object staticReturnArg2(String value) { 74*795d594fSAndroid Build Coastguard Worker return Second.staticReturnArg2(77, value); 75*795d594fSAndroid Build Coastguard Worker } 76*795d594fSAndroid Build Coastguard Worker 77*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.returnArg1(Second, long) inliner (before) 78*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Second:l\d+>> ParameterValue 79*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:j\d+>> ParameterValue 80*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<NullCk:l\d+>> NullCheck [<<Second>>] 81*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Invoke:j\d+>> InvokeVirtual [<<NullCk>>,<<Value>>] 82*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Invoke>>] 83*795d594fSAndroid Build Coastguard Worker 84*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.returnArg1(Second, long) inliner (after) 85*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:j\d+>> ParameterValue 86*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Value>>] 87*795d594fSAndroid Build Coastguard Worker 88*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.returnArg1(Second, long) inliner (after) 89*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 90*795d594fSAndroid Build Coastguard Worker returnArg1(Second s, long value)91*795d594fSAndroid Build Coastguard Worker public static long returnArg1(Second s, long value) { 92*795d594fSAndroid Build Coastguard Worker return s.returnArg1(value); 93*795d594fSAndroid Build Coastguard Worker } 94*795d594fSAndroid Build Coastguard Worker 95*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.staticReturn9() inliner (before) 96*795d594fSAndroid Build Coastguard Worker /// CHECK: {{i\d+}} InvokeStaticOrDirect 97*795d594fSAndroid Build Coastguard Worker 98*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.staticReturn9() inliner (before) 99*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: IntConstant 9 100*795d594fSAndroid Build Coastguard Worker 101*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.staticReturn9() inliner (after) 102*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const9:i\d+>> IntConstant 9 103*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Const9>>] 104*795d594fSAndroid Build Coastguard Worker 105*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.staticReturn9() inliner (after) 106*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 107*795d594fSAndroid Build Coastguard Worker staticReturn9()108*795d594fSAndroid Build Coastguard Worker public static int staticReturn9() { 109*795d594fSAndroid Build Coastguard Worker return Second.staticReturn9(); 110*795d594fSAndroid Build Coastguard Worker } 111*795d594fSAndroid Build Coastguard Worker 112*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.return7(Second) inliner (before) 113*795d594fSAndroid Build Coastguard Worker /// CHECK: {{i\d+}} InvokeVirtual 114*795d594fSAndroid Build Coastguard Worker 115*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.return7(Second) inliner (before) 116*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: IntConstant 7 117*795d594fSAndroid Build Coastguard Worker 118*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.return7(Second) inliner (after) 119*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const7:i\d+>> IntConstant 7 120*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Const7>>] 121*795d594fSAndroid Build Coastguard Worker 122*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.return7(Second) inliner (after) 123*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 124*795d594fSAndroid Build Coastguard Worker return7(Second s)125*795d594fSAndroid Build Coastguard Worker public static int return7(Second s) { 126*795d594fSAndroid Build Coastguard Worker return s.return7(null); 127*795d594fSAndroid Build Coastguard Worker } 128*795d594fSAndroid Build Coastguard Worker 129*795d594fSAndroid Build Coastguard Worker /// CHECK-START: float Main.return42f(Second) inliner (before) 130*795d594fSAndroid Build Coastguard Worker /// CHECK: {{f\d+}} InvokeVirtual 131*795d594fSAndroid Build Coastguard Worker 132*795d594fSAndroid Build Coastguard Worker /// CHECK-START: float Main.return42f(Second) inliner (before) 133*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: FloatConstant 42 134*795d594fSAndroid Build Coastguard Worker 135*795d594fSAndroid Build Coastguard Worker /// CHECK-START: float Main.return42f(Second) inliner (after) 136*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const42f:f\d+>> FloatConstant 42 137*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Const42f>>] 138*795d594fSAndroid Build Coastguard Worker 139*795d594fSAndroid Build Coastguard Worker /// CHECK-START: float Main.return42f(Second) inliner (after) 140*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 141*795d594fSAndroid Build Coastguard Worker return42f(Second s)142*795d594fSAndroid Build Coastguard Worker public static float return42f(Second s) { 143*795d594fSAndroid Build Coastguard Worker return s.return42f(); 144*795d594fSAndroid Build Coastguard Worker } 145*795d594fSAndroid Build Coastguard Worker 146*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.staticReturnNull() inliner (before) 147*795d594fSAndroid Build Coastguard Worker /// CHECK: {{l\d+}} InvokeStaticOrDirect 148*795d594fSAndroid Build Coastguard Worker 149*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.staticReturnNull() inliner (before) 150*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: NullConstant 151*795d594fSAndroid Build Coastguard Worker 152*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.staticReturnNull() inliner (after) 153*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Null:l\d+>> NullConstant 154*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Null>>] 155*795d594fSAndroid Build Coastguard Worker 156*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.staticReturnNull() inliner (after) 157*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 158*795d594fSAndroid Build Coastguard Worker staticReturnNull()159*795d594fSAndroid Build Coastguard Worker public static String staticReturnNull() { 160*795d594fSAndroid Build Coastguard Worker return Second.staticReturnNull(); 161*795d594fSAndroid Build Coastguard Worker } 162*795d594fSAndroid Build Coastguard Worker 163*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.returnNull(Second) inliner (before) 164*795d594fSAndroid Build Coastguard Worker /// CHECK: {{l\d+}} InvokeVirtual 165*795d594fSAndroid Build Coastguard Worker 166*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.returnNull(Second) inliner (before) 167*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: NullConstant 168*795d594fSAndroid Build Coastguard Worker 169*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.returnNull(Second) inliner (after) 170*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Null:l\d+>> NullConstant 171*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Null>>] 172*795d594fSAndroid Build Coastguard Worker 173*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.returnNull(Second) inliner (after) 174*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 175*795d594fSAndroid Build Coastguard Worker returnNull(Second s)176*795d594fSAndroid Build Coastguard Worker public static Object returnNull(Second s) { 177*795d594fSAndroid Build Coastguard Worker return s.returnNull(); 178*795d594fSAndroid Build Coastguard Worker } 179*795d594fSAndroid Build Coastguard Worker 180*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.getInt(Second) inliner (before) 181*795d594fSAndroid Build Coastguard Worker /// CHECK: {{i\d+}} InvokeVirtual 182*795d594fSAndroid Build Coastguard Worker 183*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.getInt(Second) inliner (after) 184*795d594fSAndroid Build Coastguard Worker /// CHECK: {{i\d+}} InstanceFieldGet 185*795d594fSAndroid Build Coastguard Worker 186*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.getInt(Second) inliner (after) 187*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 188*795d594fSAndroid Build Coastguard Worker getInt(Second s)189*795d594fSAndroid Build Coastguard Worker public static int getInt(Second s) { 190*795d594fSAndroid Build Coastguard Worker return s.getInstanceIntField(); 191*795d594fSAndroid Build Coastguard Worker } 192*795d594fSAndroid Build Coastguard Worker 193*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.getDouble(Second) inliner (before) 194*795d594fSAndroid Build Coastguard Worker /// CHECK: {{d\d+}} InvokeVirtual 195*795d594fSAndroid Build Coastguard Worker 196*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.getDouble(Second) inliner (after) 197*795d594fSAndroid Build Coastguard Worker /// CHECK: {{d\d+}} InstanceFieldGet 198*795d594fSAndroid Build Coastguard Worker 199*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.getDouble(Second) inliner (after) 200*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 201*795d594fSAndroid Build Coastguard Worker getDouble(Second s)202*795d594fSAndroid Build Coastguard Worker public static double getDouble(Second s) { 203*795d594fSAndroid Build Coastguard Worker return s.getInstanceDoubleField(22); 204*795d594fSAndroid Build Coastguard Worker } 205*795d594fSAndroid Build Coastguard Worker 206*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.getObject(Second) inliner (before) 207*795d594fSAndroid Build Coastguard Worker /// CHECK: {{l\d+}} InvokeVirtual 208*795d594fSAndroid Build Coastguard Worker 209*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.getObject(Second) inliner (after) 210*795d594fSAndroid Build Coastguard Worker /// CHECK: {{l\d+}} InstanceFieldGet 211*795d594fSAndroid Build Coastguard Worker 212*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.getObject(Second) inliner (after) 213*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 214*795d594fSAndroid Build Coastguard Worker getObject(Second s)215*795d594fSAndroid Build Coastguard Worker public static Object getObject(Second s) { 216*795d594fSAndroid Build Coastguard Worker return s.getInstanceObjectField(-1L); 217*795d594fSAndroid Build Coastguard Worker } 218*795d594fSAndroid Build Coastguard Worker 219*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.getString(Second) inliner (before) 220*795d594fSAndroid Build Coastguard Worker /// CHECK: {{l\d+}} InvokeVirtual 221*795d594fSAndroid Build Coastguard Worker 222*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.getString(Second) inliner (after) 223*795d594fSAndroid Build Coastguard Worker /// CHECK: {{l\d+}} InstanceFieldGet 224*795d594fSAndroid Build Coastguard Worker 225*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.getString(Second) inliner (after) 226*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 227*795d594fSAndroid Build Coastguard Worker getString(Second s)228*795d594fSAndroid Build Coastguard Worker public static String getString(Second s) { 229*795d594fSAndroid Build Coastguard Worker return s.getInstanceStringField(null, "whatever", 1234L); 230*795d594fSAndroid Build Coastguard Worker } 231*795d594fSAndroid Build Coastguard Worker 232*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.staticGetInt(Second) inliner (before) 233*795d594fSAndroid Build Coastguard Worker /// CHECK: {{i\d+}} InvokeStaticOrDirect 234*795d594fSAndroid Build Coastguard Worker 235*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.staticGetInt(Second) inliner (after) 236*795d594fSAndroid Build Coastguard Worker /// CHECK: {{i\d+}} InvokeStaticOrDirect 237*795d594fSAndroid Build Coastguard Worker 238*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.staticGetInt(Second) inliner (after) 239*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldGet 240*795d594fSAndroid Build Coastguard Worker staticGetInt(Second s)241*795d594fSAndroid Build Coastguard Worker public static int staticGetInt(Second s) { 242*795d594fSAndroid Build Coastguard Worker return Second.staticGetInstanceIntField(s); 243*795d594fSAndroid Build Coastguard Worker } 244*795d594fSAndroid Build Coastguard Worker 245*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.getDoubleFromParam(Second) inliner (before) 246*795d594fSAndroid Build Coastguard Worker /// CHECK: {{d\d+}} InvokeVirtual 247*795d594fSAndroid Build Coastguard Worker 248*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.getDoubleFromParam(Second) inliner (after) 249*795d594fSAndroid Build Coastguard Worker /// CHECK: {{d\d+}} InvokeStaticOrDirect 250*795d594fSAndroid Build Coastguard Worker 251*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.getDoubleFromParam(Second) inliner (after) 252*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldGet 253*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 254*795d594fSAndroid Build Coastguard Worker getDoubleFromParam(Second s)255*795d594fSAndroid Build Coastguard Worker public static double getDoubleFromParam(Second s) { 256*795d594fSAndroid Build Coastguard Worker return s.getInstanceDoubleFieldFromParam(s); 257*795d594fSAndroid Build Coastguard Worker } 258*795d594fSAndroid Build Coastguard Worker 259*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.getStaticInt(Second) inliner (before) 260*795d594fSAndroid Build Coastguard Worker /// CHECK: {{i\d+}} InvokeVirtual 261*795d594fSAndroid Build Coastguard Worker 262*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.getStaticInt(Second) inliner (after) 263*795d594fSAndroid Build Coastguard Worker /// CHECK: {{i\d+}} InvokeStaticOrDirect 264*795d594fSAndroid Build Coastguard Worker 265*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.getStaticInt(Second) inliner (after) 266*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldGet 267*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: StaticFieldGet 268*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 269*795d594fSAndroid Build Coastguard Worker getStaticInt(Second s)270*795d594fSAndroid Build Coastguard Worker public static int getStaticInt(Second s) { 271*795d594fSAndroid Build Coastguard Worker return s.getStaticIntField(); 272*795d594fSAndroid Build Coastguard Worker } 273*795d594fSAndroid Build Coastguard Worker 274*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.setLong(Second, long) inliner (before) 275*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeVirtual 276*795d594fSAndroid Build Coastguard Worker 277*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.setLong(Second, long) inliner (after) 278*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 279*795d594fSAndroid Build Coastguard Worker 280*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.setLong(Second, long) inliner (after) 281*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 282*795d594fSAndroid Build Coastguard Worker setLong(Second s, long value)283*795d594fSAndroid Build Coastguard Worker public static long setLong(Second s, long value) { 284*795d594fSAndroid Build Coastguard Worker s.setInstanceLongField(-1, value); 285*795d594fSAndroid Build Coastguard Worker return s.instanceLongField; 286*795d594fSAndroid Build Coastguard Worker } 287*795d594fSAndroid Build Coastguard Worker 288*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.setLongReturnArg2(Second, long, int) inliner (before) 289*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeVirtual 290*795d594fSAndroid Build Coastguard Worker 291*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.setLongReturnArg2(Second, long, int) inliner (after) 292*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Second:l\d+>> ParameterValue 293*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:j\d+>> ParameterValue 294*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Arg2:i\d+>> ParameterValue 295*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<NullCk:l\d+>> NullCheck [<<Second>>] 296*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<NullCk>>,<<Value>>] 297*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<NullCk2:l\d+>> NullCheck [<<Second>>] 298*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IGet:j\d+>> InstanceFieldGet [<<NullCk2>>] 299*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Conv:j\d+>> TypeConversion [<<Arg2>>] 300*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Add:j\d+>> Add [<<IGet>>,<<Conv>>] 301*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Return [<<Add>>] 302*795d594fSAndroid Build Coastguard Worker 303*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.setLongReturnArg2(Second, long, int) inliner (after) 304*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 305*795d594fSAndroid Build Coastguard Worker setLongReturnArg2(Second s, long value, int arg2)306*795d594fSAndroid Build Coastguard Worker public static long setLongReturnArg2(Second s, long value, int arg2) { 307*795d594fSAndroid Build Coastguard Worker int result = s.setInstanceLongFieldReturnArg2(value, arg2); 308*795d594fSAndroid Build Coastguard Worker return s.instanceLongField + result; 309*795d594fSAndroid Build Coastguard Worker } 310*795d594fSAndroid Build Coastguard Worker 311*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.staticSetLong(Second, long) inliner (before) 312*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect 313*795d594fSAndroid Build Coastguard Worker 314*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.staticSetLong(Second, long) inliner (after) 315*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect 316*795d594fSAndroid Build Coastguard Worker 317*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.staticSetLong(Second, long) inliner (after) 318*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 319*795d594fSAndroid Build Coastguard Worker staticSetLong(Second s, long value)320*795d594fSAndroid Build Coastguard Worker public static long staticSetLong(Second s, long value) { 321*795d594fSAndroid Build Coastguard Worker Second.staticSetInstanceLongField(s, value); 322*795d594fSAndroid Build Coastguard Worker return s.instanceLongField; 323*795d594fSAndroid Build Coastguard Worker } 324*795d594fSAndroid Build Coastguard Worker 325*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.setLongThroughParam(Second, long) inliner (before) 326*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeVirtual 327*795d594fSAndroid Build Coastguard Worker 328*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.setLongThroughParam(Second, long) inliner (after) 329*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect 330*795d594fSAndroid Build Coastguard Worker 331*795d594fSAndroid Build Coastguard Worker /// CHECK-START: long Main.setLongThroughParam(Second, long) inliner (after) 332*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 333*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 334*795d594fSAndroid Build Coastguard Worker setLongThroughParam(Second s, long value)335*795d594fSAndroid Build Coastguard Worker public static long setLongThroughParam(Second s, long value) { 336*795d594fSAndroid Build Coastguard Worker s.setInstanceLongFieldThroughParam(s, value); 337*795d594fSAndroid Build Coastguard Worker return s.instanceLongField; 338*795d594fSAndroid Build Coastguard Worker } 339*795d594fSAndroid Build Coastguard Worker 340*795d594fSAndroid Build Coastguard Worker /// CHECK-START: float Main.setStaticFloat(Second, float) inliner (before) 341*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeVirtual 342*795d594fSAndroid Build Coastguard Worker 343*795d594fSAndroid Build Coastguard Worker /// CHECK-START: float Main.setStaticFloat(Second, float) inliner (after) 344*795d594fSAndroid Build Coastguard Worker /// CHECK: InvokeStaticOrDirect 345*795d594fSAndroid Build Coastguard Worker 346*795d594fSAndroid Build Coastguard Worker /// CHECK-START: float Main.setStaticFloat(Second, float) inliner (after) 347*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 348*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: StaticFieldSet 349*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeVirtual 350*795d594fSAndroid Build Coastguard Worker setStaticFloat(Second s, float value)351*795d594fSAndroid Build Coastguard Worker public static float setStaticFloat(Second s, float value) { 352*795d594fSAndroid Build Coastguard Worker s.setStaticFloatField(value); 353*795d594fSAndroid Build Coastguard Worker return s.staticFloatField; 354*795d594fSAndroid Build Coastguard Worker } 355*795d594fSAndroid Build Coastguard Worker 356*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.newObject() inliner (before) 357*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 358*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 359*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>{{(,[ij]\d+)?}}] method_name:java.lang.Object.<init> 360*795d594fSAndroid Build Coastguard Worker 361*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.Object Main.newObject() inliner (after) 362*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 363*795d594fSAndroid Build Coastguard Worker newObject()364*795d594fSAndroid Build Coastguard Worker public static Object newObject() { 365*795d594fSAndroid Build Coastguard Worker return new Object(); 366*795d594fSAndroid Build Coastguard Worker } 367*795d594fSAndroid Build Coastguard Worker 368*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase() inliner (before) 369*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 370*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 371*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>{{(,[ij]\d+)?}}] method_name:Base.<init> 372*795d594fSAndroid Build Coastguard Worker 373*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase() inliner (after) 374*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 375*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 376*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 377*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 378*795d594fSAndroid Build Coastguard Worker constructBase()379*795d594fSAndroid Build Coastguard Worker public static double constructBase() { 380*795d594fSAndroid Build Coastguard Worker Base b = new Base(); 381*795d594fSAndroid Build Coastguard Worker return b.intField + b.doubleField; 382*795d594fSAndroid Build Coastguard Worker } 383*795d594fSAndroid Build Coastguard Worker 384*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int) inliner (before) 385*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 386*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 387*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 388*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Base.<init> 389*795d594fSAndroid Build Coastguard Worker 390*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int) inliner (after) 391*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 392*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 393*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 394*795d594fSAndroid Build Coastguard Worker 395*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int) inliner (after) 396*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 397*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 398*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 399*795d594fSAndroid Build Coastguard Worker 400*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int) inliner (after) 401*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 402*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 403*795d594fSAndroid Build Coastguard Worker constructBase(int intValue)404*795d594fSAndroid Build Coastguard Worker public static double constructBase(int intValue) { 405*795d594fSAndroid Build Coastguard Worker Base b = new Base(intValue); 406*795d594fSAndroid Build Coastguard Worker return b.intField + b.doubleField; 407*795d594fSAndroid Build Coastguard Worker } 408*795d594fSAndroid Build Coastguard Worker 409*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBaseWith0() inliner (before) 410*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> IntConstant 0 411*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 412*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 413*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Base.<init> 414*795d594fSAndroid Build Coastguard Worker 415*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBaseWith0() inliner (after) 416*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 417*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 418*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 419*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 420*795d594fSAndroid Build Coastguard Worker constructBaseWith0()421*795d594fSAndroid Build Coastguard Worker public static double constructBaseWith0() { 422*795d594fSAndroid Build Coastguard Worker Base b = new Base(0); 423*795d594fSAndroid Build Coastguard Worker return b.intField + b.doubleField; 424*795d594fSAndroid Build Coastguard Worker } 425*795d594fSAndroid Build Coastguard Worker 426*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructBase(java.lang.String) inliner (before) 427*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:l\d+>> ParameterValue 428*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 429*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 430*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Base.<init> 431*795d594fSAndroid Build Coastguard Worker 432*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructBase(java.lang.String) inliner (after) 433*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 434*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 435*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 436*795d594fSAndroid Build Coastguard Worker 437*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructBase(java.lang.String) inliner (after) 438*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:l\d+>> ParameterValue 439*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 440*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 441*795d594fSAndroid Build Coastguard Worker 442*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructBase(java.lang.String) inliner (after) 443*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 444*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 445*795d594fSAndroid Build Coastguard Worker constructBase(String stringValue)446*795d594fSAndroid Build Coastguard Worker public static String constructBase(String stringValue) { 447*795d594fSAndroid Build Coastguard Worker Base b = new Base(stringValue); 448*795d594fSAndroid Build Coastguard Worker return b.stringField; 449*795d594fSAndroid Build Coastguard Worker } 450*795d594fSAndroid Build Coastguard Worker 451*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructBaseWithNullString() inliner (before) 452*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Null:l\d+>> NullConstant 453*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 454*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 455*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Null>>{{(,[ij]\d+)?}}] method_name:Base.<init> 456*795d594fSAndroid Build Coastguard Worker 457*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructBaseWithNullString() inliner (after) 458*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 459*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 460*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 461*795d594fSAndroid Build Coastguard Worker 462*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructBaseWithNullString() inliner (after) 463*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 464*795d594fSAndroid Build Coastguard Worker constructBaseWithNullString()465*795d594fSAndroid Build Coastguard Worker public static String constructBaseWithNullString() { 466*795d594fSAndroid Build Coastguard Worker String stringValue = null; 467*795d594fSAndroid Build Coastguard Worker Base b = new Base(stringValue); 468*795d594fSAndroid Build Coastguard Worker return b.stringField; 469*795d594fSAndroid Build Coastguard Worker } 470*795d594fSAndroid Build Coastguard Worker 471*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(double, java.lang.Object) inliner (before) 472*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 473*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<OValue:l\d+>> ParameterValue 474*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 475*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 476*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<DValue>>,<<OValue>>{{(,[ij]\d+)?}}] method_name:Base.<init> 477*795d594fSAndroid Build Coastguard Worker 478*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(double, java.lang.Object) inliner (after) 479*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 480*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 481*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 482*795d594fSAndroid Build Coastguard Worker 483*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(double, java.lang.Object) inliner (after) 484*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 485*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<OValue:l\d+>> ParameterValue 486*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 487*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<DValue>>] 488*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<OValue>>] 489*795d594fSAndroid Build Coastguard Worker 490*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(double, java.lang.Object) inliner (after) 491*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 492*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 493*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 494*795d594fSAndroid Build Coastguard Worker constructBase(double doubleValue, Object objectValue)495*795d594fSAndroid Build Coastguard Worker public static double constructBase(double doubleValue, Object objectValue) { 496*795d594fSAndroid Build Coastguard Worker Base b = new Base(doubleValue, objectValue); 497*795d594fSAndroid Build Coastguard Worker return (b.objectField != null) ? b.doubleField : -b.doubleField; 498*795d594fSAndroid Build Coastguard Worker } 499*795d594fSAndroid Build Coastguard Worker 500*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, double, java.lang.Object) inliner (before) 501*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 502*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 503*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<OValue:l\d+>> ParameterValue 504*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 505*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 506*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>,<<OValue>>{{(,[ij]\d+)?}}] method_name:Base.<init> 507*795d594fSAndroid Build Coastguard Worker 508*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, double, java.lang.Object) inliner (after) 509*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 510*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 511*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 512*795d594fSAndroid Build Coastguard Worker 513*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, double, java.lang.Object) inliner (after) 514*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 515*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 516*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<OValue:l\d+>> ParameterValue 517*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 518*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<IValue>>] 519*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<DValue>>] 520*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<OValue>>] 521*795d594fSAndroid Build Coastguard Worker 522*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, double, java.lang.Object) inliner (after) 523*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 524*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 525*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 526*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 527*795d594fSAndroid Build Coastguard Worker constructBase(int intValue, double doubleValue, Object objectValue)528*795d594fSAndroid Build Coastguard Worker public static double constructBase(int intValue, double doubleValue, Object objectValue) { 529*795d594fSAndroid Build Coastguard Worker Base b = new Base(intValue, doubleValue, objectValue); 530*795d594fSAndroid Build Coastguard Worker double tmp = b.intField + b.doubleField; 531*795d594fSAndroid Build Coastguard Worker return (b.objectField != null) ? tmp : -tmp; 532*795d594fSAndroid Build Coastguard Worker } 533*795d594fSAndroid Build Coastguard Worker 534*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBaseWith0DoubleNull(double) inliner (before) 535*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> IntConstant 0 536*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 537*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<OValue:l\d+>> NullConstant 538*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 539*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 540*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>,<<OValue>>{{(,[ij]\d+)?}}] method_name:Base.<init> 541*795d594fSAndroid Build Coastguard Worker 542*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBaseWith0DoubleNull(double) inliner (after) 543*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 544*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 545*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 546*795d594fSAndroid Build Coastguard Worker 547*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBaseWith0DoubleNull(double) inliner (after) 548*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 549*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 550*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<DValue>>] 551*795d594fSAndroid Build Coastguard Worker 552*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBaseWith0DoubleNull(double) inliner (after) 553*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 554*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 555*795d594fSAndroid Build Coastguard Worker constructBaseWith0DoubleNull(double doubleValue)556*795d594fSAndroid Build Coastguard Worker public static double constructBaseWith0DoubleNull(double doubleValue) { 557*795d594fSAndroid Build Coastguard Worker Base b = new Base(0, doubleValue, null); 558*795d594fSAndroid Build Coastguard Worker double tmp = b.intField + b.doubleField; 559*795d594fSAndroid Build Coastguard Worker return (b.objectField != null) ? tmp : -tmp; 560*795d594fSAndroid Build Coastguard Worker } 561*795d594fSAndroid Build Coastguard Worker 562*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, double, java.lang.Object, java.lang.String) inliner (before) 563*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 564*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 565*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 566*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 567*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>,{{l\d+}},{{l\d+}}{{(,[ij]\d+)?}}] method_name:Base.<init> 568*795d594fSAndroid Build Coastguard Worker 569*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, double, java.lang.Object, java.lang.String) inliner (after) 570*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 571*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 572*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 573*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 574*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>,{{l\d+}},{{l\d+}}{{(,[ij]\d+)?}}] method_name:Base.<init> 575*795d594fSAndroid Build Coastguard Worker 576*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, double, java.lang.Object, java.lang.String) inliner (after) 577*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 578*795d594fSAndroid Build Coastguard Worker constructBase( int intValue, double doubleValue, Object objectValue, String stringValue)579*795d594fSAndroid Build Coastguard Worker public static double constructBase( 580*795d594fSAndroid Build Coastguard Worker int intValue, double doubleValue, Object objectValue, String stringValue) { 581*795d594fSAndroid Build Coastguard Worker Base b = new Base(intValue, doubleValue, objectValue, stringValue); 582*795d594fSAndroid Build Coastguard Worker double tmp = b.intField + b.doubleField; 583*795d594fSAndroid Build Coastguard Worker tmp = (b.objectField != null) ? tmp : -tmp; 584*795d594fSAndroid Build Coastguard Worker return (b.stringField != null) ? 2.0 * tmp : 0.5 * tmp; 585*795d594fSAndroid Build Coastguard Worker } 586*795d594fSAndroid Build Coastguard Worker 587*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(double) inliner (before) 588*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> ParameterValue 589*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 590*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 591*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Base.<init> 592*795d594fSAndroid Build Coastguard Worker 593*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(double) inliner (after) 594*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 595*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 596*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 597*795d594fSAndroid Build Coastguard Worker 598*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(double) inliner (after) 599*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> ParameterValue 600*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 601*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 602*795d594fSAndroid Build Coastguard Worker 603*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(double) inliner (after) 604*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 605*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 606*795d594fSAndroid Build Coastguard Worker constructBase(double doubleValue)607*795d594fSAndroid Build Coastguard Worker public static double constructBase(double doubleValue) { 608*795d594fSAndroid Build Coastguard Worker Base b = new Base(doubleValue); 609*795d594fSAndroid Build Coastguard Worker return b.intField + b.doubleField; 610*795d594fSAndroid Build Coastguard Worker } 611*795d594fSAndroid Build Coastguard Worker 612*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBaseWith0d() inliner (before) 613*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> DoubleConstant 614*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 615*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 616*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Base.<init> 617*795d594fSAndroid Build Coastguard Worker 618*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBaseWith0d() inliner (after) 619*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 620*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 621*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 622*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 623*795d594fSAndroid Build Coastguard Worker constructBaseWith0d()624*795d594fSAndroid Build Coastguard Worker public static double constructBaseWith0d() { 625*795d594fSAndroid Build Coastguard Worker Base b = new Base(0.0); 626*795d594fSAndroid Build Coastguard Worker return b.intField + b.doubleField; 627*795d594fSAndroid Build Coastguard Worker } 628*795d594fSAndroid Build Coastguard Worker 629*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(java.lang.Object) inliner (before) 630*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<OValue:l\d+>> ParameterValue 631*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 632*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 633*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<OValue>>{{(,[ij]\d+)?}}] method_name:Base.<init> 634*795d594fSAndroid Build Coastguard Worker 635*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(java.lang.Object) inliner (after) 636*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<OValue:l\d+>> ParameterValue 637*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 638*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 639*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<OValue>>{{(,[ij]\d+)?}}] method_name:Base.<init> 640*795d594fSAndroid Build Coastguard Worker 641*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(java.lang.Object) inliner (after) 642*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 643*795d594fSAndroid Build Coastguard Worker constructBase(Object objectValue)644*795d594fSAndroid Build Coastguard Worker public static double constructBase(Object objectValue) { 645*795d594fSAndroid Build Coastguard Worker Base b = new Base(objectValue); 646*795d594fSAndroid Build Coastguard Worker double tmp = b.intField + b.doubleField; 647*795d594fSAndroid Build Coastguard Worker return (b.objectField != null) ? tmp + 1.0 : tmp - 1.0; 648*795d594fSAndroid Build Coastguard Worker } 649*795d594fSAndroid Build Coastguard Worker 650*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, long) inliner (before) 651*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 652*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<JValue:j\d+>> ParameterValue 653*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 654*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 655*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<JValue>>{{(,[ij]\d+)?}}] method_name:Base.<init> 656*795d594fSAndroid Build Coastguard Worker 657*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, long) inliner (after) 658*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 659*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 660*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 661*795d594fSAndroid Build Coastguard Worker 662*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, long) inliner (after) 663*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 664*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 665*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<IValue>>] 666*795d594fSAndroid Build Coastguard Worker 667*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructBase(int, long) inliner (after) 668*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 669*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 670*795d594fSAndroid Build Coastguard Worker constructBase(int intValue, long placeholder)671*795d594fSAndroid Build Coastguard Worker public static double constructBase(int intValue, long placeholder) { 672*795d594fSAndroid Build Coastguard Worker Base b = new Base(intValue, placeholder); 673*795d594fSAndroid Build Coastguard Worker return b.intField + b.doubleField; 674*795d594fSAndroid Build Coastguard Worker } 675*795d594fSAndroid Build Coastguard Worker 676*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived() inliner (before) 677*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 678*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 679*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>{{(,[ij]\d+)?}}] method_name:Derived.<init> 680*795d594fSAndroid Build Coastguard Worker 681*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived() inliner (after) 682*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 683*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 684*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 685*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 686*795d594fSAndroid Build Coastguard Worker constructDerived()687*795d594fSAndroid Build Coastguard Worker public static double constructDerived() { 688*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(); 689*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 690*795d594fSAndroid Build Coastguard Worker } 691*795d594fSAndroid Build Coastguard Worker 692*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int) inliner (before) 693*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 694*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 695*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 696*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Derived.<init> 697*795d594fSAndroid Build Coastguard Worker 698*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int) inliner (after) 699*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 700*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 701*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 702*795d594fSAndroid Build Coastguard Worker 703*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int) inliner (after) 704*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 705*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 706*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 707*795d594fSAndroid Build Coastguard Worker 708*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int) inliner (after) 709*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 710*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 711*795d594fSAndroid Build Coastguard Worker constructDerived(int intValue)712*795d594fSAndroid Build Coastguard Worker public static double constructDerived(int intValue) { 713*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(intValue); 714*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 715*795d594fSAndroid Build Coastguard Worker } 716*795d594fSAndroid Build Coastguard Worker 717*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWith0() inliner (before) 718*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> IntConstant 0 719*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 720*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 721*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Derived.<init> 722*795d594fSAndroid Build Coastguard Worker 723*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWith0() inliner (after) 724*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 725*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 726*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 727*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 728*795d594fSAndroid Build Coastguard Worker constructDerivedWith0()729*795d594fSAndroid Build Coastguard Worker public static double constructDerivedWith0() { 730*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(0); 731*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 732*795d594fSAndroid Build Coastguard Worker } 733*795d594fSAndroid Build Coastguard Worker 734*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructDerived(java.lang.String) inliner (before) 735*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:l\d+>> ParameterValue 736*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 737*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 738*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Derived.<init> 739*795d594fSAndroid Build Coastguard Worker 740*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructDerived(java.lang.String) inliner (after) 741*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 742*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 743*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 744*795d594fSAndroid Build Coastguard Worker 745*795d594fSAndroid Build Coastguard Worker /// CHECK-START: java.lang.String Main.constructDerived(java.lang.String) inliner (after) 746*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 747*795d594fSAndroid Build Coastguard Worker constructDerived(String stringValue)748*795d594fSAndroid Build Coastguard Worker public static String constructDerived(String stringValue) { 749*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(stringValue); 750*795d594fSAndroid Build Coastguard Worker return d.stringField; 751*795d594fSAndroid Build Coastguard Worker } 752*795d594fSAndroid Build Coastguard Worker 753*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(double) inliner (before) 754*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> ParameterValue 755*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 756*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 757*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Derived.<init> 758*795d594fSAndroid Build Coastguard Worker 759*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(double) inliner (after) 760*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 761*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 762*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 763*795d594fSAndroid Build Coastguard Worker 764*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(double) inliner (after) 765*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> ParameterValue 766*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 767*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 768*795d594fSAndroid Build Coastguard Worker 769*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(double) inliner (after) 770*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 771*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 772*795d594fSAndroid Build Coastguard Worker constructDerived(double doubleValue)773*795d594fSAndroid Build Coastguard Worker public static double constructDerived(double doubleValue) { 774*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(doubleValue); 775*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 776*795d594fSAndroid Build Coastguard Worker } 777*795d594fSAndroid Build Coastguard Worker 778*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWith0d() inliner (before) 779*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> DoubleConstant 780*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 781*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 782*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Derived.<init> 783*795d594fSAndroid Build Coastguard Worker 784*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWith0d() inliner (after) 785*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 786*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 787*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 788*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 789*795d594fSAndroid Build Coastguard Worker constructDerivedWith0d()790*795d594fSAndroid Build Coastguard Worker public static double constructDerivedWith0d() { 791*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(0.0); 792*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 793*795d594fSAndroid Build Coastguard Worker } 794*795d594fSAndroid Build Coastguard Worker 795*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object) inliner (before) 796*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 797*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 798*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<OValue:l\d+>> ParameterValue 799*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 800*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 801*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>,<<OValue>>{{(,[ij]\d+)?}}] method_name:Derived.<init> 802*795d594fSAndroid Build Coastguard Worker 803*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object) inliner (after) 804*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 805*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 806*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 807*795d594fSAndroid Build Coastguard Worker 808*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object) inliner (after) 809*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 810*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 811*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<DValue>>] 812*795d594fSAndroid Build Coastguard Worker 813*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object) inliner (after) 814*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 815*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 816*795d594fSAndroid Build Coastguard Worker constructDerived(int intValue, double doubleValue, Object objectValue)817*795d594fSAndroid Build Coastguard Worker public static double constructDerived(int intValue, double doubleValue, Object objectValue) { 818*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(intValue, doubleValue, objectValue); 819*795d594fSAndroid Build Coastguard Worker double tmp = d.intField + d.doubleField; 820*795d594fSAndroid Build Coastguard Worker return (d.objectField != null) ? tmp : -tmp; 821*795d594fSAndroid Build Coastguard Worker } 822*795d594fSAndroid Build Coastguard Worker 823*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object, java.lang.String) inliner (before) 824*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 825*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 826*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 827*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 828*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>,{{l\d+}},{{l\d+}}{{(,[ij]\d+)?}}] method_name:Derived.<init> 829*795d594fSAndroid Build Coastguard Worker 830*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object, java.lang.String) inliner (after) 831*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 832*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 833*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 834*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 835*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>,{{l\d+}},{{l\d+}}{{(,[ij]\d+)?}}] method_name:Derived.<init> 836*795d594fSAndroid Build Coastguard Worker 837*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object, java.lang.String) inliner (after) 838*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 839*795d594fSAndroid Build Coastguard Worker constructDerived( int intValue, double doubleValue, Object objectValue, String stringValue)840*795d594fSAndroid Build Coastguard Worker public static double constructDerived( 841*795d594fSAndroid Build Coastguard Worker int intValue, double doubleValue, Object objectValue, String stringValue) { 842*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(intValue, doubleValue, objectValue, stringValue); 843*795d594fSAndroid Build Coastguard Worker double tmp = d.intField + d.doubleField; 844*795d594fSAndroid Build Coastguard Worker tmp = (d.objectField != null) ? tmp : -tmp; 845*795d594fSAndroid Build Coastguard Worker return (d.stringField != null) ? 2.0 * tmp : 0.5 * tmp; 846*795d594fSAndroid Build Coastguard Worker } 847*795d594fSAndroid Build Coastguard Worker 848*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(float) inliner (before) 849*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:f\d+>> ParameterValue 850*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 851*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 852*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:Derived.<init> 853*795d594fSAndroid Build Coastguard Worker 854*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(float) inliner (after) 855*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 856*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 857*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 858*795d594fSAndroid Build Coastguard Worker 859*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(float) inliner (after) 860*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:f\d+>> ParameterValue 861*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 862*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 863*795d594fSAndroid Build Coastguard Worker 864*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(float) inliner (after) 865*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 866*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 867*795d594fSAndroid Build Coastguard Worker constructDerived(float floatValue)868*795d594fSAndroid Build Coastguard Worker public static double constructDerived(float floatValue) { 869*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(floatValue); 870*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField + d.floatField; 871*795d594fSAndroid Build Coastguard Worker } 872*795d594fSAndroid Build Coastguard Worker 873*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object, float) inliner (before) 874*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 875*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 876*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<OValue:l\d+>> ParameterValue 877*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<FValue:f\d+>> ParameterValue 878*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 879*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 880*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>,<<OValue>>,<<FValue>>{{(,[ij]\d+)?}}] method_name:Derived.<init> 881*795d594fSAndroid Build Coastguard Worker 882*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object, float) inliner (after) 883*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 884*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 885*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 886*795d594fSAndroid Build Coastguard Worker 887*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object, float) inliner (after) 888*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 889*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 890*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<FValue:f\d+>> ParameterValue 891*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 892*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<IValue>>] 893*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<DValue>>] 894*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<FValue>>] 895*795d594fSAndroid Build Coastguard Worker 896*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerived(int, double, java.lang.Object, float) inliner (after) 897*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 898*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 899*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 900*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 901*795d594fSAndroid Build Coastguard Worker constructDerived( int intValue, double doubleValue, Object objectValue, float floatValue)902*795d594fSAndroid Build Coastguard Worker public static double constructDerived( 903*795d594fSAndroid Build Coastguard Worker int intValue, double doubleValue, Object objectValue, float floatValue) { 904*795d594fSAndroid Build Coastguard Worker Derived d = new Derived(intValue, doubleValue, objectValue, floatValue); 905*795d594fSAndroid Build Coastguard Worker double tmp = d.intField + d.doubleField + d.floatField; 906*795d594fSAndroid Build Coastguard Worker return (d.objectField != null) ? tmp : -tmp; 907*795d594fSAndroid Build Coastguard Worker } 908*795d594fSAndroid Build Coastguard Worker 909*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructBaseWithFinalField() inliner (before) 910*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 911*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 912*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>{{(,[ij]\d+)?}}] method_name:BaseWithFinalField.<init> 913*795d594fSAndroid Build Coastguard Worker 914*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructBaseWithFinalField() inliner (after) 915*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 916*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 917*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 918*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 919*795d594fSAndroid Build Coastguard Worker constructBaseWithFinalField()920*795d594fSAndroid Build Coastguard Worker public static int constructBaseWithFinalField() { 921*795d594fSAndroid Build Coastguard Worker BaseWithFinalField b = new BaseWithFinalField(); 922*795d594fSAndroid Build Coastguard Worker return b.intField; 923*795d594fSAndroid Build Coastguard Worker } 924*795d594fSAndroid Build Coastguard Worker 925*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructBaseWithFinalField(int) inliner (before) 926*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 927*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 928*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 929*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:BaseWithFinalField.<init> 930*795d594fSAndroid Build Coastguard Worker 931*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructBaseWithFinalField(int) inliner (after) 932*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 933*795d594fSAndroid Build Coastguard Worker 934*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructBaseWithFinalField(int) inliner (after) 935*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 936*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 937*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 938*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 939*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 940*795d594fSAndroid Build Coastguard Worker 941*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructBaseWithFinalField(int) inliner (after) 942*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 943*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 944*795d594fSAndroid Build Coastguard Worker constructBaseWithFinalField(int intValue)945*795d594fSAndroid Build Coastguard Worker public static int constructBaseWithFinalField(int intValue) { 946*795d594fSAndroid Build Coastguard Worker BaseWithFinalField b = new BaseWithFinalField(intValue); 947*795d594fSAndroid Build Coastguard Worker return b.intField; 948*795d594fSAndroid Build Coastguard Worker } 949*795d594fSAndroid Build Coastguard Worker 950*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructBaseWithFinalFieldWith0() inliner (before) 951*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> IntConstant 0 952*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 953*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 954*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:BaseWithFinalField.<init> 955*795d594fSAndroid Build Coastguard Worker 956*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructBaseWithFinalFieldWith0() inliner (after) 957*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 958*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 959*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 960*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 961*795d594fSAndroid Build Coastguard Worker constructBaseWithFinalFieldWith0()962*795d594fSAndroid Build Coastguard Worker public static int constructBaseWithFinalFieldWith0() { 963*795d594fSAndroid Build Coastguard Worker BaseWithFinalField b = new BaseWithFinalField(0); 964*795d594fSAndroid Build Coastguard Worker return b.intField; 965*795d594fSAndroid Build Coastguard Worker } 966*795d594fSAndroid Build Coastguard Worker 967*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField() inliner (before) 968*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 969*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 970*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>{{(,[ij]\d+)?}}] method_name:DerivedWithFinalField.<init> 971*795d594fSAndroid Build Coastguard Worker 972*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField() inliner (after) 973*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 974*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 975*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 976*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 977*795d594fSAndroid Build Coastguard Worker constructDerivedWithFinalField()978*795d594fSAndroid Build Coastguard Worker public static double constructDerivedWithFinalField() { 979*795d594fSAndroid Build Coastguard Worker DerivedWithFinalField d = new DerivedWithFinalField(); 980*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 981*795d594fSAndroid Build Coastguard Worker } 982*795d594fSAndroid Build Coastguard Worker 983*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(int) inliner (before) 984*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 985*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 986*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 987*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:DerivedWithFinalField.<init> 988*795d594fSAndroid Build Coastguard Worker 989*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(int) inliner (after) 990*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 991*795d594fSAndroid Build Coastguard Worker 992*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(int) inliner (after) 993*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 994*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 995*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 996*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 997*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 998*795d594fSAndroid Build Coastguard Worker 999*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(int) inliner (after) 1000*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 1001*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1002*795d594fSAndroid Build Coastguard Worker constructDerivedWithFinalField(int intValue)1003*795d594fSAndroid Build Coastguard Worker public static double constructDerivedWithFinalField(int intValue) { 1004*795d594fSAndroid Build Coastguard Worker DerivedWithFinalField d = new DerivedWithFinalField(intValue); 1005*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 1006*795d594fSAndroid Build Coastguard Worker } 1007*795d594fSAndroid Build Coastguard Worker 1008*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalFieldWith0() inliner (before) 1009*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> IntConstant 0 1010*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1011*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1012*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:DerivedWithFinalField.<init> 1013*795d594fSAndroid Build Coastguard Worker 1014*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalFieldWith0() inliner (after) 1015*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 1016*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 1017*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 1018*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1019*795d594fSAndroid Build Coastguard Worker constructDerivedWithFinalFieldWith0()1020*795d594fSAndroid Build Coastguard Worker public static double constructDerivedWithFinalFieldWith0() { 1021*795d594fSAndroid Build Coastguard Worker DerivedWithFinalField d = new DerivedWithFinalField(0); 1022*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 1023*795d594fSAndroid Build Coastguard Worker } 1024*795d594fSAndroid Build Coastguard Worker 1025*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(double) inliner (before) 1026*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> ParameterValue 1027*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1028*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1029*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:DerivedWithFinalField.<init> 1030*795d594fSAndroid Build Coastguard Worker 1031*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(double) inliner (after) 1032*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 1033*795d594fSAndroid Build Coastguard Worker 1034*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(double) inliner (after) 1035*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> ParameterValue 1036*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1037*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 1038*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 1039*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 1040*795d594fSAndroid Build Coastguard Worker 1041*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(double) inliner (after) 1042*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 1043*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1044*795d594fSAndroid Build Coastguard Worker constructDerivedWithFinalField(double doubleValue)1045*795d594fSAndroid Build Coastguard Worker public static double constructDerivedWithFinalField(double doubleValue) { 1046*795d594fSAndroid Build Coastguard Worker DerivedWithFinalField d = new DerivedWithFinalField(doubleValue); 1047*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 1048*795d594fSAndroid Build Coastguard Worker } 1049*795d594fSAndroid Build Coastguard Worker 1050*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalFieldWith0d() inliner (before) 1051*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> DoubleConstant 1052*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1053*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1054*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:DerivedWithFinalField.<init> 1055*795d594fSAndroid Build Coastguard Worker 1056*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalFieldWith0d() inliner (after) 1057*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 1058*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 1059*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 1060*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1061*795d594fSAndroid Build Coastguard Worker constructDerivedWithFinalFieldWith0d()1062*795d594fSAndroid Build Coastguard Worker public static double constructDerivedWithFinalFieldWith0d() { 1063*795d594fSAndroid Build Coastguard Worker DerivedWithFinalField d = new DerivedWithFinalField(0.0); 1064*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 1065*795d594fSAndroid Build Coastguard Worker } 1066*795d594fSAndroid Build Coastguard Worker 1067*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(int, double) inliner (before) 1068*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> ParameterValue 1069*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> ParameterValue 1070*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1071*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1072*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>{{(,[ij]\d+)?}}] method_name:DerivedWithFinalField.<init> 1073*795d594fSAndroid Build Coastguard Worker 1074*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(int, double) inliner (after) 1075*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 1076*795d594fSAndroid Build Coastguard Worker 1077*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(int, double) inliner (after) 1078*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:d\d+>> ParameterValue 1079*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1080*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 1081*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet [<<Obj>>,<<Value>>] 1082*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 1083*795d594fSAndroid Build Coastguard Worker 1084*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(int, double) inliner (after) 1085*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 1086*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InstanceFieldSet 1087*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1088*795d594fSAndroid Build Coastguard Worker 1089*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalField(int, double) inliner (after) 1090*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 1091*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ConstructorFence 1092*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 1093*795d594fSAndroid Build Coastguard Worker constructDerivedWithFinalField(int intValue, double doubleValue)1094*795d594fSAndroid Build Coastguard Worker public static double constructDerivedWithFinalField(int intValue, double doubleValue) { 1095*795d594fSAndroid Build Coastguard Worker DerivedWithFinalField d = new DerivedWithFinalField(intValue, doubleValue); 1096*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 1097*795d594fSAndroid Build Coastguard Worker } 1098*795d594fSAndroid Build Coastguard Worker 1099*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalFieldWith0And0d() inliner (before) 1100*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<IValue:i\d+>> IntConstant 0 1101*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<DValue:d\d+>> DoubleConstant 1102*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1103*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1104*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<IValue>>,<<DValue>>{{(,[ij]\d+)?}}] method_name:DerivedWithFinalField.<init> 1105*795d594fSAndroid Build Coastguard Worker 1106*795d594fSAndroid Build Coastguard Worker /// CHECK-START: double Main.constructDerivedWithFinalFieldWith0And0d() inliner (after) 1107*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 1108*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 1109*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 1110*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1111*795d594fSAndroid Build Coastguard Worker constructDerivedWithFinalFieldWith0And0d()1112*795d594fSAndroid Build Coastguard Worker public static double constructDerivedWithFinalFieldWith0And0d() { 1113*795d594fSAndroid Build Coastguard Worker DerivedWithFinalField d = new DerivedWithFinalField(0, 0.0); 1114*795d594fSAndroid Build Coastguard Worker return d.intField + d.doubleField; 1115*795d594fSAndroid Build Coastguard Worker } 1116*795d594fSAndroid Build Coastguard Worker 1117*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDex() inliner (before) 1118*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1119*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1120*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>{{(,[ij]\d+)?}}] method_name:DerivedInSecondDex.<init> 1121*795d594fSAndroid Build Coastguard Worker 1122*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDex() inliner (after) 1123*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 1124*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 1125*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 1126*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1127*795d594fSAndroid Build Coastguard Worker constructDerivedInSecondDex()1128*795d594fSAndroid Build Coastguard Worker public static int constructDerivedInSecondDex() { 1129*795d594fSAndroid Build Coastguard Worker DerivedInSecondDex d = new DerivedInSecondDex(); 1130*795d594fSAndroid Build Coastguard Worker return d.intField; 1131*795d594fSAndroid Build Coastguard Worker } 1132*795d594fSAndroid Build Coastguard Worker 1133*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDex(int) inliner (before) 1134*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 1135*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1136*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1137*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:DerivedInSecondDex.<init> 1138*795d594fSAndroid Build Coastguard Worker 1139*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDex(int) inliner (after) 1140*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> ParameterValue 1141*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1142*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1143*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:DerivedInSecondDex.<init> 1144*795d594fSAndroid Build Coastguard Worker 1145*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDex(int) inliner (after) 1146*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 1147*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 1148*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1149*795d594fSAndroid Build Coastguard Worker constructDerivedInSecondDex(int intValue)1150*795d594fSAndroid Build Coastguard Worker public static int constructDerivedInSecondDex(int intValue) { 1151*795d594fSAndroid Build Coastguard Worker DerivedInSecondDex d = new DerivedInSecondDex(intValue); 1152*795d594fSAndroid Build Coastguard Worker return d.intField; 1153*795d594fSAndroid Build Coastguard Worker } 1154*795d594fSAndroid Build Coastguard Worker 1155*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDexWith0() inliner (before) 1156*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> IntConstant 0 1157*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1158*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1159*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:DerivedInSecondDex.<init> 1160*795d594fSAndroid Build Coastguard Worker 1161*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDexWith0() inliner (after) 1162*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:i\d+>> IntConstant 0 1163*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1164*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1165*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:DerivedInSecondDex.<init> 1166*795d594fSAndroid Build Coastguard Worker 1167*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDexWith0() inliner (after) 1168*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 1169*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 1170*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1171*795d594fSAndroid Build Coastguard Worker constructDerivedInSecondDexWith0()1172*795d594fSAndroid Build Coastguard Worker public static int constructDerivedInSecondDexWith0() { 1173*795d594fSAndroid Build Coastguard Worker DerivedInSecondDex d = new DerivedInSecondDex(0); 1174*795d594fSAndroid Build Coastguard Worker return d.intField; 1175*795d594fSAndroid Build Coastguard Worker } 1176*795d594fSAndroid Build Coastguard Worker 1177*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDex(long) inliner (before) 1178*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Value:j\d+>> ParameterValue 1179*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Obj:l\d+>> NewInstance 1180*795d594fSAndroid Build Coastguard Worker // Note: The ArtMethod* (typed as int or long) is optional after sharpening. 1181*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: InvokeStaticOrDirect [<<Obj>>,<<Value>>{{(,[ij]\d+)?}}] method_name:DerivedInSecondDex.<init> 1182*795d594fSAndroid Build Coastguard Worker 1183*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.constructDerivedInSecondDex(long) inliner (after) 1184*795d594fSAndroid Build Coastguard Worker /// CHECK: ConstructorFence 1185*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InvokeStaticOrDirect 1186*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ConstructorFence 1187*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: InstanceFieldSet 1188*795d594fSAndroid Build Coastguard Worker constructDerivedInSecondDex(long placeholder)1189*795d594fSAndroid Build Coastguard Worker public static int constructDerivedInSecondDex(long placeholder) { 1190*795d594fSAndroid Build Coastguard Worker DerivedInSecondDex d = new DerivedInSecondDex(placeholder); 1191*795d594fSAndroid Build Coastguard Worker return d.intField; 1192*795d594fSAndroid Build Coastguard Worker } 1193*795d594fSAndroid Build Coastguard Worker main(String[] args)1194*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) throws Exception { 1195*795d594fSAndroid Build Coastguard Worker Second s = new Second(); 1196*795d594fSAndroid Build Coastguard Worker 1197*795d594fSAndroid Build Coastguard Worker // Replaced NOP pattern. 1198*795d594fSAndroid Build Coastguard Worker staticNop(); 1199*795d594fSAndroid Build Coastguard Worker nop(s); 1200*795d594fSAndroid Build Coastguard Worker // Not replaced NOP pattern. 1201*795d594fSAndroid Build Coastguard Worker staticNopNeverInline(); 1202*795d594fSAndroid Build Coastguard Worker // Replaced "return arg" pattern. 1203*795d594fSAndroid Build Coastguard Worker assertEquals("arbitrary string", staticReturnArg2("arbitrary string")); 1204*795d594fSAndroid Build Coastguard Worker assertEquals(4321L, returnArg1(s, 4321L)); 1205*795d594fSAndroid Build Coastguard Worker // Replaced "return const" pattern. 1206*795d594fSAndroid Build Coastguard Worker assertEquals(9, staticReturn9()); 1207*795d594fSAndroid Build Coastguard Worker assertEquals(7, return7(s)); 1208*795d594fSAndroid Build Coastguard Worker assertEquals(42.0f, return42f(s)); 1209*795d594fSAndroid Build Coastguard Worker assertEquals(null, staticReturnNull()); 1210*795d594fSAndroid Build Coastguard Worker assertEquals(null, returnNull(s)); 1211*795d594fSAndroid Build Coastguard Worker // Replaced IGET pattern. 1212*795d594fSAndroid Build Coastguard Worker assertEquals(42, getInt(s)); 1213*795d594fSAndroid Build Coastguard Worker assertEquals(-42.0, getDouble(s)); 1214*795d594fSAndroid Build Coastguard Worker assertEquals(null, getObject(s)); 1215*795d594fSAndroid Build Coastguard Worker assertEquals("placeholder", getString(s)); 1216*795d594fSAndroid Build Coastguard Worker // Not replaced IGET pattern. 1217*795d594fSAndroid Build Coastguard Worker assertEquals(42, staticGetInt(s)); 1218*795d594fSAndroid Build Coastguard Worker assertEquals(-42.0, getDoubleFromParam(s)); 1219*795d594fSAndroid Build Coastguard Worker // SGET. 1220*795d594fSAndroid Build Coastguard Worker assertEquals(4242, getStaticInt(s)); 1221*795d594fSAndroid Build Coastguard Worker // Replaced IPUT pattern. 1222*795d594fSAndroid Build Coastguard Worker assertEquals(111L, setLong(s, 111L)); 1223*795d594fSAndroid Build Coastguard Worker assertEquals(345L, setLongReturnArg2(s, 222L, 123)); 1224*795d594fSAndroid Build Coastguard Worker // Not replaced IPUT pattern. 1225*795d594fSAndroid Build Coastguard Worker assertEquals(222L, staticSetLong(s, 222L)); 1226*795d594fSAndroid Build Coastguard Worker assertEquals(333L, setLongThroughParam(s, 333L)); 1227*795d594fSAndroid Build Coastguard Worker // SPUT. 1228*795d594fSAndroid Build Coastguard Worker assertEquals(-11.5f, setStaticFloat(s, -11.5f)); 1229*795d594fSAndroid Build Coastguard Worker 1230*795d594fSAndroid Build Coastguard Worker if (newObject() == null) { 1231*795d594fSAndroid Build Coastguard Worker throw new AssertionError("new Object() cannot be null."); 1232*795d594fSAndroid Build Coastguard Worker } 1233*795d594fSAndroid Build Coastguard Worker 1234*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructBase()); 1235*795d594fSAndroid Build Coastguard Worker assertEquals(42.0, constructBase(42)); 1236*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructBaseWith0()); 1237*795d594fSAndroid Build Coastguard Worker assertEquals("something", constructBase("something")); 1238*795d594fSAndroid Build Coastguard Worker assertEquals(null, constructBaseWithNullString()); 1239*795d594fSAndroid Build Coastguard Worker assertEquals(11.0, constructBase(11.0, new Object())); 1240*795d594fSAndroid Build Coastguard Worker assertEquals(-12.0, constructBase(12.0, null)); 1241*795d594fSAndroid Build Coastguard Worker assertEquals(30.0, constructBase(17, 13.0, new Object())); 1242*795d594fSAndroid Build Coastguard Worker assertEquals(-34.0, constructBase(19, 15.0, null)); 1243*795d594fSAndroid Build Coastguard Worker assertEquals(-22.5, constructBaseWith0DoubleNull(22.5)); 1244*795d594fSAndroid Build Coastguard Worker assertEquals(-8.0, constructBase(2, 14.0, null, null)); 1245*795d594fSAndroid Build Coastguard Worker assertEquals(-64.0, constructBase(4, 28.0, null, "placeholder")); 1246*795d594fSAndroid Build Coastguard Worker assertEquals(13.0, constructBase(24, 2.0, new Object(), null)); 1247*795d594fSAndroid Build Coastguard Worker assertEquals(30.0, constructBase(11, 4.0, new Object(), "placeholder")); 1248*795d594fSAndroid Build Coastguard Worker assertEquals(43.0, constructBase(43.0)); 1249*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructBaseWith0d()); 1250*795d594fSAndroid Build Coastguard Worker assertEquals(1.0, constructBase(new Object())); 1251*795d594fSAndroid Build Coastguard Worker assertEquals(-1.0, constructBase((Object) null)); 1252*795d594fSAndroid Build Coastguard Worker assertEquals(123.0, constructBase(123, 65L)); 1253*795d594fSAndroid Build Coastguard Worker 1254*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerived()); 1255*795d594fSAndroid Build Coastguard Worker assertEquals(73.0, constructDerived(73)); 1256*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerivedWith0()); 1257*795d594fSAndroid Build Coastguard Worker assertEquals(null, constructDerived("something else")); 1258*795d594fSAndroid Build Coastguard Worker assertEquals(18.0, constructDerived(18.0)); 1259*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerivedWith0d()); 1260*795d594fSAndroid Build Coastguard Worker assertEquals(-7.0, constructDerived(5, 7.0, new Object())); 1261*795d594fSAndroid Build Coastguard Worker assertEquals(-4.0, constructDerived(9, 4.0, null)); 1262*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerived(1, 9.0, null, null)); 1263*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerived(2, 8.0, null, "placeholder")); 1264*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerived(3, 7.0, new Object(), null)); 1265*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerived(4, 6.0, new Object(), "placeholder")); 1266*795d594fSAndroid Build Coastguard Worker assertEquals(17.0, constructDerived(17.0f)); 1267*795d594fSAndroid Build Coastguard Worker assertEquals(-5.5, constructDerived(6, -7.0, new Object(), 6.5f)); 1268*795d594fSAndroid Build Coastguard Worker 1269*795d594fSAndroid Build Coastguard Worker assertEquals(0, constructBaseWithFinalField()); 1270*795d594fSAndroid Build Coastguard Worker assertEquals(77, constructBaseWithFinalField(77)); 1271*795d594fSAndroid Build Coastguard Worker assertEquals(0, constructBaseWithFinalFieldWith0()); 1272*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerivedWithFinalField()); 1273*795d594fSAndroid Build Coastguard Worker assertEquals(-33.0, constructDerivedWithFinalField(-33)); 1274*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerivedWithFinalFieldWith0()); 1275*795d594fSAndroid Build Coastguard Worker assertEquals(-44.0, constructDerivedWithFinalField(-44.0)); 1276*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerivedWithFinalFieldWith0d()); 1277*795d594fSAndroid Build Coastguard Worker assertEquals(88, constructDerivedWithFinalField(22, 66.0)); 1278*795d594fSAndroid Build Coastguard Worker assertEquals(0.0, constructDerivedWithFinalFieldWith0And0d()); 1279*795d594fSAndroid Build Coastguard Worker 1280*795d594fSAndroid Build Coastguard Worker assertEquals(0, constructDerivedInSecondDex()); 1281*795d594fSAndroid Build Coastguard Worker assertEquals(123, constructDerivedInSecondDex(123)); 1282*795d594fSAndroid Build Coastguard Worker assertEquals(0, constructDerivedInSecondDexWith0()); 1283*795d594fSAndroid Build Coastguard Worker assertEquals(0, constructDerivedInSecondDex(7L)); 1284*795d594fSAndroid Build Coastguard Worker 1285*795d594fSAndroid Build Coastguard Worker try { 1286*795d594fSAndroid Build Coastguard Worker localStaticNopAndThrow(); 1287*795d594fSAndroid Build Coastguard Worker throw new Error("Unreachable"); 1288*795d594fSAndroid Build Coastguard Worker } catch (ExpectedError expected) {} 1289*795d594fSAndroid Build Coastguard Worker } 1290*795d594fSAndroid Build Coastguard Worker assertEquals(int expected, int actual)1291*795d594fSAndroid Build Coastguard Worker private static void assertEquals(int expected, int actual) { 1292*795d594fSAndroid Build Coastguard Worker if (expected != actual) { 1293*795d594fSAndroid Build Coastguard Worker throw new AssertionError("Wrong result: " + expected + " != " + actual); 1294*795d594fSAndroid Build Coastguard Worker } 1295*795d594fSAndroid Build Coastguard Worker } 1296*795d594fSAndroid Build Coastguard Worker assertEquals(float expected, float actual)1297*795d594fSAndroid Build Coastguard Worker private static void assertEquals(float expected, float actual) { 1298*795d594fSAndroid Build Coastguard Worker if (expected != actual) { 1299*795d594fSAndroid Build Coastguard Worker throw new AssertionError("Wrong result: " + expected + " != " + actual); 1300*795d594fSAndroid Build Coastguard Worker } 1301*795d594fSAndroid Build Coastguard Worker } 1302*795d594fSAndroid Build Coastguard Worker assertEquals(double expected, double actual)1303*795d594fSAndroid Build Coastguard Worker private static void assertEquals(double expected, double actual) { 1304*795d594fSAndroid Build Coastguard Worker if (expected != actual) { 1305*795d594fSAndroid Build Coastguard Worker throw new AssertionError("Wrong result: " + expected + " != " + actual); 1306*795d594fSAndroid Build Coastguard Worker } 1307*795d594fSAndroid Build Coastguard Worker } 1308*795d594fSAndroid Build Coastguard Worker assertEquals(Object expected, Object actual)1309*795d594fSAndroid Build Coastguard Worker private static void assertEquals(Object expected, Object actual) { 1310*795d594fSAndroid Build Coastguard Worker if (expected != actual && (expected == null || !expected.equals(actual))) { 1311*795d594fSAndroid Build Coastguard Worker throw new AssertionError("Wrong result: " + expected + " != " + actual); 1312*795d594fSAndroid Build Coastguard Worker } 1313*795d594fSAndroid Build Coastguard Worker } 1314*795d594fSAndroid Build Coastguard Worker } 1315