1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2023 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 { main(String[] args)18*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) { 19*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualBool(true)); 20*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualBool(true)); 21*795d594fSAndroid Build Coastguard Worker // Other comparisons e.g. `<` don't exists for boolean values. 22*795d594fSAndroid Build Coastguard Worker 23*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualInt(0)); 24*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualInt(0)); 25*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanInt(0)); 26*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testGreaterThanOrEqualInt(0)); 27*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanInt(0)); 28*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testLessThanOrEqualInt(0)); 29*795d594fSAndroid Build Coastguard Worker 30*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualLong(0L)); 31*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualLong(0L)); 32*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanLong(0L)); 33*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testGreaterThanOrEqualLong(0L)); 34*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanLong(0L)); 35*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testLessThanOrEqualLong(0L)); 36*795d594fSAndroid Build Coastguard Worker 37*795d594fSAndroid Build Coastguard Worker // We cannot perform the optimization on unknown float/doubles since equality for NaN 38*795d594fSAndroid Build Coastguard Worker // returns the opposite as for normal numbers. 39*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualFloat(0f)); 40*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testEqualFloat(Float.NaN)); 41*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualFloat(Float.NEGATIVE_INFINITY)); 42*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualFloat(Float.POSITIVE_INFINITY)); 43*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualFloat(0f)); 44*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testNotEqualFloat(Float.NaN)); 45*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualFloat(Float.NEGATIVE_INFINITY)); 46*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualFloat(Float.POSITIVE_INFINITY)); 47*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanFloat(0f)); 48*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanFloat(Float.NaN)); 49*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanFloat(Float.NEGATIVE_INFINITY)); 50*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanFloat(Float.POSITIVE_INFINITY)); 51*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testGreaterThanOrEqualFloat(0f)); 52*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanOrEqualFloat(Float.NaN)); 53*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testGreaterThanOrEqualFloat(Float.NEGATIVE_INFINITY)); 54*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testGreaterThanOrEqualFloat(Float.POSITIVE_INFINITY)); 55*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanFloat(0f)); 56*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanFloat(Float.NaN)); 57*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanFloat(Float.NEGATIVE_INFINITY)); 58*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanFloat(Float.POSITIVE_INFINITY)); 59*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testLessThanOrEqualFloat(0f)); 60*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanOrEqualFloat(Float.NaN)); 61*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testLessThanOrEqualFloat(Float.NEGATIVE_INFINITY)); 62*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testLessThanOrEqualFloat(Float.POSITIVE_INFINITY)); 63*795d594fSAndroid Build Coastguard Worker 64*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualDouble(0d)); 65*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testEqualDouble(Double.NaN)); 66*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualDouble(Double.NEGATIVE_INFINITY)); 67*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualDouble(Double.POSITIVE_INFINITY)); 68*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualDouble(0d)); 69*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testNotEqualDouble(Double.NaN)); 70*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualDouble(Double.NEGATIVE_INFINITY)); 71*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualDouble(Double.POSITIVE_INFINITY)); 72*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanDouble(0d)); 73*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanDouble(Double.NaN)); 74*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanDouble(Double.NEGATIVE_INFINITY)); 75*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanDouble(Double.POSITIVE_INFINITY)); 76*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testGreaterThanOrEqualDouble(0d)); 77*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testGreaterThanOrEqualDouble(Double.NaN)); 78*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testGreaterThanOrEqualDouble(Double.NEGATIVE_INFINITY)); 79*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testGreaterThanOrEqualDouble(Double.POSITIVE_INFINITY)); 80*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanDouble(0d)); 81*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanDouble(Double.NaN)); 82*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanDouble(Double.NEGATIVE_INFINITY)); 83*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanDouble(Double.POSITIVE_INFINITY)); 84*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testLessThanOrEqualDouble(0d)); 85*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testLessThanOrEqualDouble(Double.NaN)); 86*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testLessThanOrEqualDouble(Double.NEGATIVE_INFINITY)); 87*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testLessThanOrEqualDouble(Double.POSITIVE_INFINITY)); 88*795d594fSAndroid Build Coastguard Worker 89*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualObject(null)); 90*795d594fSAndroid Build Coastguard Worker assertEquals(1, $noinline$testEqualObject(new Object())); 91*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualObject(null)); 92*795d594fSAndroid Build Coastguard Worker assertEquals(0, $noinline$testNotEqualObject(new Object())); 93*795d594fSAndroid Build Coastguard Worker // Other comparisons e.g. `<` don't exists for references. 94*795d594fSAndroid Build Coastguard Worker } 95*795d594fSAndroid Build Coastguard Worker 96*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testEqualBool(boolean) register (after) 97*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const1:i\d+>> IntConstant 1 98*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const1>>] $noinline$testEqualBool(boolean a)99*795d594fSAndroid Build Coastguard Worker private static int $noinline$testEqualBool(boolean a) { 100*795d594fSAndroid Build Coastguard Worker if (a == $inline$returnValueBool(a)) { 101*795d594fSAndroid Build Coastguard Worker return 1; 102*795d594fSAndroid Build Coastguard Worker } else { 103*795d594fSAndroid Build Coastguard Worker return 0; 104*795d594fSAndroid Build Coastguard Worker } 105*795d594fSAndroid Build Coastguard Worker } 106*795d594fSAndroid Build Coastguard Worker 107*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testNotEqualBool(boolean) register (after) 108*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 109*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testNotEqualBool(boolean a)110*795d594fSAndroid Build Coastguard Worker private static int $noinline$testNotEqualBool(boolean a) { 111*795d594fSAndroid Build Coastguard Worker if (a != $inline$returnValueBool(a)) { 112*795d594fSAndroid Build Coastguard Worker return 1; 113*795d594fSAndroid Build Coastguard Worker } else { 114*795d594fSAndroid Build Coastguard Worker return 0; 115*795d594fSAndroid Build Coastguard Worker } 116*795d594fSAndroid Build Coastguard Worker } 117*795d594fSAndroid Build Coastguard Worker $inline$returnValueBool(boolean a)118*795d594fSAndroid Build Coastguard Worker private static boolean $inline$returnValueBool(boolean a) { 119*795d594fSAndroid Build Coastguard Worker return a; 120*795d594fSAndroid Build Coastguard Worker } 121*795d594fSAndroid Build Coastguard Worker 122*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testEqualInt(int) register (after) 123*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const1:i\d+>> IntConstant 1 124*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const1>>] $noinline$testEqualInt(int a)125*795d594fSAndroid Build Coastguard Worker private static int $noinline$testEqualInt(int a) { 126*795d594fSAndroid Build Coastguard Worker if (a == $inline$returnValueInt(a)) { 127*795d594fSAndroid Build Coastguard Worker return 1; 128*795d594fSAndroid Build Coastguard Worker } else { 129*795d594fSAndroid Build Coastguard Worker return 0; 130*795d594fSAndroid Build Coastguard Worker } 131*795d594fSAndroid Build Coastguard Worker } 132*795d594fSAndroid Build Coastguard Worker 133*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testNotEqualInt(int) register (after) 134*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 135*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testNotEqualInt(int a)136*795d594fSAndroid Build Coastguard Worker private static int $noinline$testNotEqualInt(int a) { 137*795d594fSAndroid Build Coastguard Worker if (a != $inline$returnValueInt(a)) { 138*795d594fSAndroid Build Coastguard Worker return 1; 139*795d594fSAndroid Build Coastguard Worker } else { 140*795d594fSAndroid Build Coastguard Worker return 0; 141*795d594fSAndroid Build Coastguard Worker } 142*795d594fSAndroid Build Coastguard Worker } 143*795d594fSAndroid Build Coastguard Worker 144*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testGreaterThanInt(int) register (after) 145*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 146*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testGreaterThanInt(int a)147*795d594fSAndroid Build Coastguard Worker private static int $noinline$testGreaterThanInt(int a) { 148*795d594fSAndroid Build Coastguard Worker if (a > $inline$returnValueInt(a)) { 149*795d594fSAndroid Build Coastguard Worker return 1; 150*795d594fSAndroid Build Coastguard Worker } else { 151*795d594fSAndroid Build Coastguard Worker return 0; 152*795d594fSAndroid Build Coastguard Worker } 153*795d594fSAndroid Build Coastguard Worker } 154*795d594fSAndroid Build Coastguard Worker 155*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testGreaterThanOrEqualInt(int) register (after) 156*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const1:i\d+>> IntConstant 1 157*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const1>>] $noinline$testGreaterThanOrEqualInt(int a)158*795d594fSAndroid Build Coastguard Worker private static int $noinline$testGreaterThanOrEqualInt(int a) { 159*795d594fSAndroid Build Coastguard Worker if (a >= $inline$returnValueInt(a)) { 160*795d594fSAndroid Build Coastguard Worker return 1; 161*795d594fSAndroid Build Coastguard Worker } else { 162*795d594fSAndroid Build Coastguard Worker return 0; 163*795d594fSAndroid Build Coastguard Worker } 164*795d594fSAndroid Build Coastguard Worker } 165*795d594fSAndroid Build Coastguard Worker 166*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testLessThanInt(int) register (after) 167*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 168*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testLessThanInt(int a)169*795d594fSAndroid Build Coastguard Worker private static int $noinline$testLessThanInt(int a) { 170*795d594fSAndroid Build Coastguard Worker if (a < $inline$returnValueInt(a)) { 171*795d594fSAndroid Build Coastguard Worker return 1; 172*795d594fSAndroid Build Coastguard Worker } else { 173*795d594fSAndroid Build Coastguard Worker return 0; 174*795d594fSAndroid Build Coastguard Worker } 175*795d594fSAndroid Build Coastguard Worker } 176*795d594fSAndroid Build Coastguard Worker 177*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testLessThanOrEqualInt(int) register (after) 178*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const1:i\d+>> IntConstant 1 179*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const1>>] $noinline$testLessThanOrEqualInt(int a)180*795d594fSAndroid Build Coastguard Worker private static int $noinline$testLessThanOrEqualInt(int a) { 181*795d594fSAndroid Build Coastguard Worker if (a <= $inline$returnValueInt(a)) { 182*795d594fSAndroid Build Coastguard Worker return 1; 183*795d594fSAndroid Build Coastguard Worker } else { 184*795d594fSAndroid Build Coastguard Worker return 0; 185*795d594fSAndroid Build Coastguard Worker } 186*795d594fSAndroid Build Coastguard Worker } 187*795d594fSAndroid Build Coastguard Worker $inline$returnValueInt(int a)188*795d594fSAndroid Build Coastguard Worker private static int $inline$returnValueInt(int a) { 189*795d594fSAndroid Build Coastguard Worker return a; 190*795d594fSAndroid Build Coastguard Worker } 191*795d594fSAndroid Build Coastguard Worker 192*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testEqualLong(long) register (after) 193*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const1:i\d+>> IntConstant 1 194*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const1>>] $noinline$testEqualLong(long a)195*795d594fSAndroid Build Coastguard Worker private static int $noinline$testEqualLong(long a) { 196*795d594fSAndroid Build Coastguard Worker if (a == $inline$returnValueLong(a)) { 197*795d594fSAndroid Build Coastguard Worker return 1; 198*795d594fSAndroid Build Coastguard Worker } else { 199*795d594fSAndroid Build Coastguard Worker return 0; 200*795d594fSAndroid Build Coastguard Worker } 201*795d594fSAndroid Build Coastguard Worker } 202*795d594fSAndroid Build Coastguard Worker 203*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testNotEqualLong(long) register (after) 204*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 205*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testNotEqualLong(long a)206*795d594fSAndroid Build Coastguard Worker private static int $noinline$testNotEqualLong(long a) { 207*795d594fSAndroid Build Coastguard Worker if (a != $inline$returnValueLong(a)) { 208*795d594fSAndroid Build Coastguard Worker return 1; 209*795d594fSAndroid Build Coastguard Worker } else { 210*795d594fSAndroid Build Coastguard Worker return 0; 211*795d594fSAndroid Build Coastguard Worker } 212*795d594fSAndroid Build Coastguard Worker } 213*795d594fSAndroid Build Coastguard Worker 214*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testGreaterThanLong(long) register (after) 215*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 216*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testGreaterThanLong(long a)217*795d594fSAndroid Build Coastguard Worker private static int $noinline$testGreaterThanLong(long a) { 218*795d594fSAndroid Build Coastguard Worker if (a > $inline$returnValueLong(a)) { 219*795d594fSAndroid Build Coastguard Worker return 1; 220*795d594fSAndroid Build Coastguard Worker } else { 221*795d594fSAndroid Build Coastguard Worker return 0; 222*795d594fSAndroid Build Coastguard Worker } 223*795d594fSAndroid Build Coastguard Worker } 224*795d594fSAndroid Build Coastguard Worker 225*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testGreaterThanOrEqualLong(long) register (after) 226*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const1:i\d+>> IntConstant 1 227*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const1>>] $noinline$testGreaterThanOrEqualLong(long a)228*795d594fSAndroid Build Coastguard Worker private static int $noinline$testGreaterThanOrEqualLong(long a) { 229*795d594fSAndroid Build Coastguard Worker if (a >= $inline$returnValueLong(a)) { 230*795d594fSAndroid Build Coastguard Worker return 1; 231*795d594fSAndroid Build Coastguard Worker } else { 232*795d594fSAndroid Build Coastguard Worker return 0; 233*795d594fSAndroid Build Coastguard Worker } 234*795d594fSAndroid Build Coastguard Worker } 235*795d594fSAndroid Build Coastguard Worker 236*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testLessThanLong(long) register (after) 237*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 238*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testLessThanLong(long a)239*795d594fSAndroid Build Coastguard Worker private static int $noinline$testLessThanLong(long a) { 240*795d594fSAndroid Build Coastguard Worker if (a < $inline$returnValueLong(a)) { 241*795d594fSAndroid Build Coastguard Worker return 1; 242*795d594fSAndroid Build Coastguard Worker } else { 243*795d594fSAndroid Build Coastguard Worker return 0; 244*795d594fSAndroid Build Coastguard Worker } 245*795d594fSAndroid Build Coastguard Worker } 246*795d594fSAndroid Build Coastguard Worker 247*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testLessThanOrEqualLong(long) register (after) 248*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const1:i\d+>> IntConstant 1 249*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const1>>] $noinline$testLessThanOrEqualLong(long a)250*795d594fSAndroid Build Coastguard Worker private static int $noinline$testLessThanOrEqualLong(long a) { 251*795d594fSAndroid Build Coastguard Worker if (a <= $inline$returnValueLong(a)) { 252*795d594fSAndroid Build Coastguard Worker return 1; 253*795d594fSAndroid Build Coastguard Worker } else { 254*795d594fSAndroid Build Coastguard Worker return 0; 255*795d594fSAndroid Build Coastguard Worker } 256*795d594fSAndroid Build Coastguard Worker } 257*795d594fSAndroid Build Coastguard Worker $inline$returnValueLong(long a)258*795d594fSAndroid Build Coastguard Worker private static long $inline$returnValueLong(long a) { 259*795d594fSAndroid Build Coastguard Worker return a; 260*795d594fSAndroid Build Coastguard Worker } 261*795d594fSAndroid Build Coastguard Worker 262*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testEqualFloat(float) register (after) 263*795d594fSAndroid Build Coastguard Worker /// CHECK: <<NotEqual:z\d+>> NotEqual 264*795d594fSAndroid Build Coastguard Worker /// CHECK: <<BNot:z\d+>> BooleanNot [<<NotEqual>>] 265*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<BNot>>] $noinline$testEqualFloat(float a)266*795d594fSAndroid Build Coastguard Worker private static int $noinline$testEqualFloat(float a) { 267*795d594fSAndroid Build Coastguard Worker if (a == $inline$returnValueFloat(a)) { 268*795d594fSAndroid Build Coastguard Worker return 1; 269*795d594fSAndroid Build Coastguard Worker } else { 270*795d594fSAndroid Build Coastguard Worker return 0; 271*795d594fSAndroid Build Coastguard Worker } 272*795d594fSAndroid Build Coastguard Worker } 273*795d594fSAndroid Build Coastguard Worker 274*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testNotEqualFloat(float) register (after) 275*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Equal:z\d+>> Equal 276*795d594fSAndroid Build Coastguard Worker /// CHECK: <<BNot:z\d+>> BooleanNot [<<Equal>>] 277*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<BNot>>] $noinline$testNotEqualFloat(float a)278*795d594fSAndroid Build Coastguard Worker private static int $noinline$testNotEqualFloat(float a) { 279*795d594fSAndroid Build Coastguard Worker if (a != $inline$returnValueFloat(a)) { 280*795d594fSAndroid Build Coastguard Worker return 1; 281*795d594fSAndroid Build Coastguard Worker } else { 282*795d594fSAndroid Build Coastguard Worker return 0; 283*795d594fSAndroid Build Coastguard Worker } 284*795d594fSAndroid Build Coastguard Worker } 285*795d594fSAndroid Build Coastguard Worker 286*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testGreaterThanFloat(float) register (after) 287*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 288*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testGreaterThanFloat(float a)289*795d594fSAndroid Build Coastguard Worker private static int $noinline$testGreaterThanFloat(float a) { 290*795d594fSAndroid Build Coastguard Worker if (a > $inline$returnValueFloat(a)) { 291*795d594fSAndroid Build Coastguard Worker return 1; 292*795d594fSAndroid Build Coastguard Worker } else { 293*795d594fSAndroid Build Coastguard Worker return 0; 294*795d594fSAndroid Build Coastguard Worker } 295*795d594fSAndroid Build Coastguard Worker } 296*795d594fSAndroid Build Coastguard Worker 297*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testGreaterThanOrEqualFloat(float) register (after) 298*795d594fSAndroid Build Coastguard Worker /// CHECK: <<LessThan:z\d+>> LessThan 299*795d594fSAndroid Build Coastguard Worker /// CHECK: <<BNot:z\d+>> BooleanNot [<<LessThan>>] 300*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<BNot>>] $noinline$testGreaterThanOrEqualFloat(float a)301*795d594fSAndroid Build Coastguard Worker private static int $noinline$testGreaterThanOrEqualFloat(float a) { 302*795d594fSAndroid Build Coastguard Worker if (a >= $inline$returnValueFloat(a)) { 303*795d594fSAndroid Build Coastguard Worker return 1; 304*795d594fSAndroid Build Coastguard Worker } else { 305*795d594fSAndroid Build Coastguard Worker return 0; 306*795d594fSAndroid Build Coastguard Worker } 307*795d594fSAndroid Build Coastguard Worker } 308*795d594fSAndroid Build Coastguard Worker 309*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testLessThanFloat(float) register (after) 310*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 311*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testLessThanFloat(float a)312*795d594fSAndroid Build Coastguard Worker private static int $noinline$testLessThanFloat(float a) { 313*795d594fSAndroid Build Coastguard Worker if (a < $inline$returnValueFloat(a)) { 314*795d594fSAndroid Build Coastguard Worker return 1; 315*795d594fSAndroid Build Coastguard Worker } else { 316*795d594fSAndroid Build Coastguard Worker return 0; 317*795d594fSAndroid Build Coastguard Worker } 318*795d594fSAndroid Build Coastguard Worker } 319*795d594fSAndroid Build Coastguard Worker 320*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testLessThanOrEqualFloat(float) register (after) 321*795d594fSAndroid Build Coastguard Worker /// CHECK: <<GreaterThan:z\d+>> GreaterThan 322*795d594fSAndroid Build Coastguard Worker /// CHECK: <<BNot:z\d+>> BooleanNot [<<GreaterThan>>] 323*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<BNot>>] $noinline$testLessThanOrEqualFloat(float a)324*795d594fSAndroid Build Coastguard Worker private static int $noinline$testLessThanOrEqualFloat(float a) { 325*795d594fSAndroid Build Coastguard Worker if (a <= $inline$returnValueFloat(a)) { 326*795d594fSAndroid Build Coastguard Worker return 1; 327*795d594fSAndroid Build Coastguard Worker } else { 328*795d594fSAndroid Build Coastguard Worker return 0; 329*795d594fSAndroid Build Coastguard Worker } 330*795d594fSAndroid Build Coastguard Worker } 331*795d594fSAndroid Build Coastguard Worker $inline$returnValueFloat(float a)332*795d594fSAndroid Build Coastguard Worker private static float $inline$returnValueFloat(float a) { 333*795d594fSAndroid Build Coastguard Worker return a; 334*795d594fSAndroid Build Coastguard Worker } 335*795d594fSAndroid Build Coastguard Worker 336*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testEqualDouble(double) register (after) 337*795d594fSAndroid Build Coastguard Worker /// CHECK: <<NotEqual:z\d+>> NotEqual 338*795d594fSAndroid Build Coastguard Worker /// CHECK: <<BNot:z\d+>> BooleanNot [<<NotEqual>>] 339*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<BNot>>] $noinline$testEqualDouble(double a)340*795d594fSAndroid Build Coastguard Worker private static int $noinline$testEqualDouble(double a) { 341*795d594fSAndroid Build Coastguard Worker if (a == $inline$returnValueDouble(a)) { 342*795d594fSAndroid Build Coastguard Worker return 1; 343*795d594fSAndroid Build Coastguard Worker } else { 344*795d594fSAndroid Build Coastguard Worker return 0; 345*795d594fSAndroid Build Coastguard Worker } 346*795d594fSAndroid Build Coastguard Worker } 347*795d594fSAndroid Build Coastguard Worker 348*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testNotEqualDouble(double) register (after) 349*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Equal:z\d+>> Equal 350*795d594fSAndroid Build Coastguard Worker /// CHECK: <<BNot:z\d+>> BooleanNot [<<Equal>>] 351*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<BNot>>] $noinline$testNotEqualDouble(double a)352*795d594fSAndroid Build Coastguard Worker private static int $noinline$testNotEqualDouble(double a) { 353*795d594fSAndroid Build Coastguard Worker if (a != $inline$returnValueDouble(a)) { 354*795d594fSAndroid Build Coastguard Worker return 1; 355*795d594fSAndroid Build Coastguard Worker } else { 356*795d594fSAndroid Build Coastguard Worker return 0; 357*795d594fSAndroid Build Coastguard Worker } 358*795d594fSAndroid Build Coastguard Worker } 359*795d594fSAndroid Build Coastguard Worker 360*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testGreaterThanDouble(double) register (after) 361*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 362*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testGreaterThanDouble(double a)363*795d594fSAndroid Build Coastguard Worker private static int $noinline$testGreaterThanDouble(double a) { 364*795d594fSAndroid Build Coastguard Worker if (a > $inline$returnValueDouble(a)) { 365*795d594fSAndroid Build Coastguard Worker return 1; 366*795d594fSAndroid Build Coastguard Worker } else { 367*795d594fSAndroid Build Coastguard Worker return 0; 368*795d594fSAndroid Build Coastguard Worker } 369*795d594fSAndroid Build Coastguard Worker } 370*795d594fSAndroid Build Coastguard Worker 371*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testGreaterThanOrEqualDouble(double) register (after) 372*795d594fSAndroid Build Coastguard Worker /// CHECK: <<LessThan:z\d+>> LessThan 373*795d594fSAndroid Build Coastguard Worker /// CHECK: <<BNot:z\d+>> BooleanNot [<<LessThan>>] 374*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<BNot>>] $noinline$testGreaterThanOrEqualDouble(double a)375*795d594fSAndroid Build Coastguard Worker private static int $noinline$testGreaterThanOrEqualDouble(double a) { 376*795d594fSAndroid Build Coastguard Worker if (a >= $inline$returnValueDouble(a)) { 377*795d594fSAndroid Build Coastguard Worker return 1; 378*795d594fSAndroid Build Coastguard Worker } else { 379*795d594fSAndroid Build Coastguard Worker return 0; 380*795d594fSAndroid Build Coastguard Worker } 381*795d594fSAndroid Build Coastguard Worker } 382*795d594fSAndroid Build Coastguard Worker 383*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testLessThanDouble(double) register (after) 384*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 385*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testLessThanDouble(double a)386*795d594fSAndroid Build Coastguard Worker private static int $noinline$testLessThanDouble(double a) { 387*795d594fSAndroid Build Coastguard Worker if (a < $inline$returnValueDouble(a)) { 388*795d594fSAndroid Build Coastguard Worker return 1; 389*795d594fSAndroid Build Coastguard Worker } else { 390*795d594fSAndroid Build Coastguard Worker return 0; 391*795d594fSAndroid Build Coastguard Worker } 392*795d594fSAndroid Build Coastguard Worker } 393*795d594fSAndroid Build Coastguard Worker 394*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testLessThanOrEqualDouble(double) register (after) 395*795d594fSAndroid Build Coastguard Worker /// CHECK: <<GreaterThan:z\d+>> GreaterThan 396*795d594fSAndroid Build Coastguard Worker /// CHECK: <<BNot:z\d+>> BooleanNot [<<GreaterThan>>] 397*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<BNot>>] $noinline$testLessThanOrEqualDouble(double a)398*795d594fSAndroid Build Coastguard Worker private static int $noinline$testLessThanOrEqualDouble(double a) { 399*795d594fSAndroid Build Coastguard Worker if (a <= $inline$returnValueDouble(a)) { 400*795d594fSAndroid Build Coastguard Worker return 1; 401*795d594fSAndroid Build Coastguard Worker } else { 402*795d594fSAndroid Build Coastguard Worker return 0; 403*795d594fSAndroid Build Coastguard Worker } 404*795d594fSAndroid Build Coastguard Worker } 405*795d594fSAndroid Build Coastguard Worker $inline$returnValueDouble(double a)406*795d594fSAndroid Build Coastguard Worker private static double $inline$returnValueDouble(double a) { 407*795d594fSAndroid Build Coastguard Worker return a; 408*795d594fSAndroid Build Coastguard Worker } 409*795d594fSAndroid Build Coastguard Worker 410*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testEqualObject(java.lang.Object) register (after) 411*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const1:i\d+>> IntConstant 1 412*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const1>>] $noinline$testEqualObject(Object a)413*795d594fSAndroid Build Coastguard Worker private static int $noinline$testEqualObject(Object a) { 414*795d594fSAndroid Build Coastguard Worker if (a == $inline$returnValueObject(a)) { 415*795d594fSAndroid Build Coastguard Worker return 1; 416*795d594fSAndroid Build Coastguard Worker } else { 417*795d594fSAndroid Build Coastguard Worker return 0; 418*795d594fSAndroid Build Coastguard Worker } 419*795d594fSAndroid Build Coastguard Worker } 420*795d594fSAndroid Build Coastguard Worker 421*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int Main.$noinline$testNotEqualObject(java.lang.Object) register (after) 422*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Const0:i\d+>> IntConstant 0 423*795d594fSAndroid Build Coastguard Worker /// CHECK: Return [<<Const0>>] $noinline$testNotEqualObject(Object a)424*795d594fSAndroid Build Coastguard Worker private static int $noinline$testNotEqualObject(Object a) { 425*795d594fSAndroid Build Coastguard Worker if (a != $inline$returnValueObject(a)) { 426*795d594fSAndroid Build Coastguard Worker return 1; 427*795d594fSAndroid Build Coastguard Worker } else { 428*795d594fSAndroid Build Coastguard Worker return 0; 429*795d594fSAndroid Build Coastguard Worker } 430*795d594fSAndroid Build Coastguard Worker } 431*795d594fSAndroid Build Coastguard Worker $inline$returnValueObject(Object a)432*795d594fSAndroid Build Coastguard Worker private static Object $inline$returnValueObject(Object a) { 433*795d594fSAndroid Build Coastguard Worker return a; 434*795d594fSAndroid Build Coastguard Worker } 435*795d594fSAndroid Build Coastguard Worker assertEquals(int expected, int actual)436*795d594fSAndroid Build Coastguard Worker static void assertEquals(int expected, int actual) { 437*795d594fSAndroid Build Coastguard Worker if (expected != actual) { 438*795d594fSAndroid Build Coastguard Worker throw new AssertionError("Expected " + expected + " got " + actual); 439*795d594fSAndroid Build Coastguard Worker } 440*795d594fSAndroid Build Coastguard Worker } 441*795d594fSAndroid Build Coastguard Worker } 442