1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 public class Main { assertIntEquals(int expected, int result)18 public static void assertIntEquals(int expected, int result) { 19 if (expected != result) { 20 throw new Error("Expected: " + expected + ", found: " + result); 21 } 22 } 23 assertLongEquals(long expected, long result)24 public static void assertLongEquals(long expected, long result) { 25 if (expected != result) { 26 throw new Error("Expected: " + expected + ", found: " + result); 27 } 28 } 29 30 /// CHECK-START-RISCV64: int Main.$noinline$intRiscvShift1Add(int, int) instruction_simplifier_riscv64 (before) 31 /// CHECK: <<A:i\d+>> ParameterValue 32 /// CHECK: <<B:i\d+>> ParameterValue 33 /// CHECK: <<One:i\d+>> IntConstant 1 34 /// CHECK: <<Shift:i\d+>> Shl [<<A>>,<<One>>] 35 /// CHECK: <<Add:i\d+>> Add [<<B>>,<<Shift>>] 36 /// CHECK: <<Return:v\d+>> Return [<<Add>>] 37 38 /// CHECK-START-RISCV64: int Main.$noinline$intRiscvShift1Add(int, int) instruction_simplifier_riscv64 (after) 39 /// CHECK-NOT: Riscv64ShiftAdd 40 $noinline$intRiscvShift1Add(int a, int b)41 public static int $noinline$intRiscvShift1Add(int a, int b) { 42 return (a << 1) + b; 43 } 44 45 /// CHECK-START-RISCV64: long Main.$noinline$longIntRiscvShift1Add(long, int) instruction_simplifier_riscv64 (before) 46 /// CHECK: <<A:j\d+>> ParameterValue 47 /// CHECK: <<B:i\d+>> ParameterValue 48 /// CHECK: <<One:i\d+>> IntConstant 1 49 /// CHECK: <<Shift:j\d+>> Shl [<<A>>,<<One>>] 50 /// CHECK: <<Convert:j\d+>> TypeConversion [<<B>>] 51 /// CHECK: <<Add:j\d+>> Add [<<Shift>>,<<Convert>>] 52 /// CHECK: <<Return:v\d+>> Return [<<Add>>] 53 54 /// CHECK-START-RISCV64: long Main.$noinline$longIntRiscvShift1Add(long, int) instruction_simplifier_riscv64 (after) 55 /// CHECK: <<A:j\d+>> ParameterValue 56 /// CHECK: <<B:i\d+>> ParameterValue 57 /// CHECK: <<Convert:j\d+>> TypeConversion [<<B>>] 58 /// CHECK-DAG: <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<Convert>>] distance:1 59 60 /// CHECK-START-RISCV64: long Main.$noinline$longIntRiscvShift1Add(long, int) instruction_simplifier_riscv64 (after) 61 /// CHECK-NOT: Shl 62 63 /// CHECK-START-RISCV64: long Main.$noinline$longIntRiscvShift1Add(long, int) instruction_simplifier_riscv64 (after) 64 /// CHECK-NOT: Add 65 $noinline$longIntRiscvShift1Add(long a, int b)66 public static long $noinline$longIntRiscvShift1Add(long a, int b) { 67 return (a << 1) + b; 68 } 69 70 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift1Add(long, long) instruction_simplifier_riscv64 (before) 71 /// CHECK: <<A:j\d+>> ParameterValue 72 /// CHECK: <<B:j\d+>> ParameterValue 73 /// CHECK: <<One:i\d+>> IntConstant 1 74 /// CHECK: <<Shift:j\d+>> Shl [<<A>>,<<One>>] 75 /// CHECK: <<Add:j\d+>> Add [<<B>>,<<Shift>>] 76 /// CHECK: <<Return:v\d+>> Return [<<Add>>] 77 78 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift1Add(long, long) instruction_simplifier_riscv64 (after) 79 /// CHECK: <<A:j\d+>> ParameterValue 80 /// CHECK: <<B:j\d+>> ParameterValue 81 /// CHECK-DAG: <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:1 82 83 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift1Add(long, long) instruction_simplifier_riscv64 (after) 84 /// CHECK-NOT: Shl 85 86 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift1Add(long, long) instruction_simplifier_riscv64 (after) 87 /// CHECK-NOT: Add 88 $noinline$longRiscvShift1Add(long a, long b)89 public static long $noinline$longRiscvShift1Add(long a, long b) { 90 return (a << 1) + b; 91 } 92 93 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift2Add(long, long) instruction_simplifier_riscv64 (before) 94 /// CHECK: <<A:j\d+>> ParameterValue 95 /// CHECK: <<B:j\d+>> ParameterValue 96 /// CHECK: <<Two:i\d+>> IntConstant 2 97 /// CHECK: <<Shift:j\d+>> Shl [<<A>>,<<Two>>] 98 /// CHECK: <<Add:j\d+>> Add [<<B>>,<<Shift>>] 99 /// CHECK: <<Return:v\d+>> Return [<<Add>>] 100 101 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift2Add(long, long) instruction_simplifier_riscv64 (after) 102 /// CHECK: <<A:j\d+>> ParameterValue 103 /// CHECK: <<B:j\d+>> ParameterValue 104 /// CHECK-DAG: <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:2 105 106 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift2Add(long, long) instruction_simplifier_riscv64 (after) 107 /// CHECK-NOT: Shl 108 109 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift2Add(long, long) instruction_simplifier_riscv64 (after) 110 /// CHECK-NOT: Add 111 $noinline$longRiscvShift2Add(long a, long b)112 public static long $noinline$longRiscvShift2Add(long a, long b) { 113 return (a << 2) + b; 114 } 115 116 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift3Add(long, long) instruction_simplifier_riscv64 (before) 117 /// CHECK: <<A:j\d+>> ParameterValue 118 /// CHECK: <<B:j\d+>> ParameterValue 119 /// CHECK: <<Three:i\d+>> IntConstant 3 120 /// CHECK: <<Shift:j\d+>> Shl [<<A>>,<<Three>>] 121 /// CHECK: <<Add:j\d+>> Add [<<B>>,<<Shift>>] 122 /// CHECK: <<Return:v\d+>> Return [<<Add>>] 123 124 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after) 125 /// CHECK: <<A:j\d+>> ParameterValue 126 /// CHECK: <<B:j\d+>> ParameterValue 127 /// CHECK-DAG: <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:3 128 129 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after) 130 /// CHECK-NOT: Shl 131 132 /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after) 133 /// CHECK-NOT: Add 134 $noinline$longRiscvShift3Add(long a, long b)135 public static long $noinline$longRiscvShift3Add(long a, long b) { 136 return (a << 3) + b; 137 } 138 139 /// CHECK-START-RISCV64: long Main.$noinline$longReverseRiscvShift3Add(long, long) instruction_simplifier_riscv64 (before) 140 /// CHECK: <<A:j\d+>> ParameterValue 141 /// CHECK: <<B:j\d+>> ParameterValue 142 /// CHECK: <<Three:i\d+>> IntConstant 3 143 /// CHECK: <<Shift:j\d+>> Shl [<<A>>,<<Three>>] 144 /// CHECK: <<Add:j\d+>> Add [<<B>>,<<Shift>>] 145 /// CHECK: <<Return:v\d+>> Return [<<Add>>] 146 147 /// CHECK-START-RISCV64: long Main.$noinline$longReverseRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after) 148 /// CHECK: <<A:j\d+>> ParameterValue 149 /// CHECK: <<B:j\d+>> ParameterValue 150 /// CHECK-DAG: <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:3 151 152 /// CHECK-START-RISCV64: long Main.$noinline$longReverseRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after) 153 /// CHECK-NOT: Shl 154 155 /// CHECK-START-RISCV64: long Main.$noinline$longReverseRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after) 156 /// CHECK-NOT: Add 157 $noinline$longReverseRiscvShift3Add(long a, long b)158 public static long $noinline$longReverseRiscvShift3Add(long a, long b) { 159 return b + (a << 3); 160 } 161 162 /// CHECK-START-RISCV64: long Main.$noinline$longRightShift(long, long) instruction_simplifier_riscv64 (before) 163 /// CHECK: <<A:j\d+>> ParameterValue 164 /// CHECK: <<B:j\d+>> ParameterValue 165 /// CHECK: <<Four:i\d+>> IntConstant 4 166 /// CHECK: <<One:i\d+>> IntConstant 1 167 /// CHECK: <<Shift1:j\d+>> Shl [<<A>>,<<Four>>] 168 /// CHECK: <<Shift2:j\d+>> Shl [<<B>>,<<One>>] 169 /// CHECK: <<Add:j\d+>> Add [<<Shift1>>,<<Shift2>>] 170 /// CHECK: <<Return:v\d+>> Return [<<Add>>] 171 172 /// CHECK-START-RISCV64: long Main.$noinline$longRightShift(long, long) instruction_simplifier_riscv64 (after) 173 /// CHECK: <<A:j\d+>> ParameterValue 174 /// CHECK: <<B:j\d+>> ParameterValue 175 /// CHECK: <<Four:i\d+>> IntConstant 4 176 /// CHECK: <<Shift1:j\d+>> Shl [<<A>>,<<Four>>] 177 /// CHECK-DAG: <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<B>>,<<Shift1>>] distance:1 178 179 /// CHECK-START-RISCV64: long Main.$noinline$longRightShift(long, long) instruction_simplifier_riscv64 (after) 180 /// CHECK-NOT: Add 181 $noinline$longRightShift(long a, long b)182 public static long $noinline$longRightShift(long a, long b) { 183 return (a << 4) + (b << 1); 184 } 185 186 /// CHECK-START-RISCV64: long Main.$noinline$longLeftShift(long, long) instruction_simplifier_riscv64 (before) 187 /// CHECK: <<A:j\d+>> ParameterValue 188 /// CHECK: <<B:j\d+>> ParameterValue 189 /// CHECK: <<One:i\d+>> IntConstant 1 190 /// CHECK: <<Four:i\d+>> IntConstant 4 191 /// CHECK: <<Shift1:j\d+>> Shl [<<A>>,<<One>>] 192 /// CHECK: <<Shift2:j\d+>> Shl [<<B>>,<<Four>>] 193 /// CHECK: <<Add:j\d+>> Add [<<Shift1>>,<<Shift2>>] 194 /// CHECK: <<Return:v\d+>> Return [<<Add>>] 195 196 /// CHECK-START-RISCV64: long Main.$noinline$longLeftShift(long, long) instruction_simplifier_riscv64 (after) 197 /// CHECK: <<A:j\d+>> ParameterValue 198 /// CHECK: <<B:j\d+>> ParameterValue 199 /// CHECK: <<Four:i\d+>> IntConstant 4 200 /// CHECK: <<Shift2:j\d+>> Shl [<<B>>,<<Four>>] 201 /// CHECK-DAG: <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<Shift2>>] distance:1 202 203 /// CHECK-START-RISCV64: long Main.$noinline$longLeftShift(long, long) instruction_simplifier_riscv64 (after) 204 /// CHECK-NOT: Add 205 $noinline$longLeftShift(long a, long b)206 public static long $noinline$longLeftShift(long a, long b) { 207 return (a << 1) + (b << 4); 208 } 209 210 /// CHECK-START-RISCV64: long Main.$noinline$longShiftTooLittleDistance(long, long) instruction_simplifier_riscv64 (after) 211 /// CHECK-NOT: Riscv64ShiftAdd 212 $noinline$longShiftTooLittleDistance(long a, long b)213 public static long $noinline$longShiftTooLittleDistance(long a, long b) { 214 return (a << 0) + b; 215 } 216 217 /// CHECK-START-RISCV64: long Main.$noinline$longShiftTooGreatDistance(long, long) instruction_simplifier_riscv64 (after) 218 /// CHECK-NOT: Riscv64ShiftAdd 219 $noinline$longShiftTooGreatDistance(long a, long b)220 public static long $noinline$longShiftTooGreatDistance(long a, long b) { 221 return (a << 4) + b; 222 } 223 224 /// CHECK-START-RISCV64: long Main.$noinline$longTwoSimplifications(long, long) instruction_simplifier_riscv64 (before) 225 /// CHECK: <<A:j\d+>> ParameterValue 226 /// CHECK: <<B:j\d+>> ParameterValue 227 /// CHECK: <<One:i\d+>> IntConstant 1 228 /// CHECK: <<Two:i\d+>> IntConstant 2 229 /// CHECK: <<Shift1:j\d+>> Shl [<<A>>,<<One>>] 230 /// CHECK: <<Add1:j\d+>> Add [<<B>>,<<Shift1>>] 231 /// CHECK: <<Shift2:j\d+>> Shl [<<B>>,<<Two>>] 232 /// CHECK: <<Add2:j\d+>> Add [<<A>>,<<Shift2>>] 233 /// CHECK: <<Xor:j\d+>> Xor [<<Add1>>,<<Add2>>] 234 235 /// CHECK-START-RISCV64: long Main.$noinline$longTwoSimplifications(long, long) instruction_simplifier_riscv64 (after) 236 /// CHECK-DAG: <<ShiftAdd1:j\d+>> Riscv64ShiftAdd distance:1 237 /// CHECK-DAG: <<ShiftAdd2:j\d+>> Riscv64ShiftAdd distance:2 238 239 /// CHECK-START-RISCV64: long Main.$noinline$longTwoSimplifications(long, long) instruction_simplifier_riscv64 (after) 240 /// CHECK-NOT: Shl 241 242 /// CHECK-START-RISCV64: long Main.$noinline$longTwoSimplifications(long, long) instruction_simplifier_riscv64 (after) 243 /// CHECK-NOT: Add 244 $noinline$longTwoSimplifications(long a, long b)245 public static long $noinline$longTwoSimplifications(long a, long b) { 246 long x = b + (a << 1); 247 long y = a + (b << 2); 248 return x ^ y; 249 } 250 251 /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsUseShl(long, long, long) instruction_simplifier_riscv64 (before) 252 /// CHECK: <<A:j\d+>> ParameterValue 253 /// CHECK: <<B:j\d+>> ParameterValue 254 /// CHECK: <<C:j\d+>> ParameterValue 255 /// CHECK: <<One:i\d+>> IntConstant 1 256 /// CHECK: <<Shl:j\d+>> Shl [<<A>>,<<One>>] 257 /// CHECK: <<X:j\d+>> Add [<<B>>,<<Shl>>] 258 /// CHECK: <<Y:j\d+>> Add [<<C>>,<<Shl>>] 259 260 /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsUseShl(long, long, long) instruction_simplifier_riscv64 (after) 261 /// CHECK: <<A:j\d+>> ParameterValue 262 /// CHECK: <<B:j\d+>> ParameterValue 263 /// CHECK: <<C:j\d+>> ParameterValue 264 /// CHECK-DAG: <<ShAdd1:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:1 265 /// CHECK-DAG: <<ShAdd2:j\d+>> Riscv64ShiftAdd [<<A>>,<<C>>] distance:1 266 267 /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsUseShl(long, long, long) instruction_simplifier_riscv64 (after) 268 /// CHECK-NOT: Shl 269 270 /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsUseShl(long, long, long) instruction_simplifier_riscv64 (after) 271 /// CHECK-NOT: Add 272 $noinline$longTwoAddsUseShl(long a, long b, long c)273 public static long $noinline$longTwoAddsUseShl(long a, long b, long c) { 274 long shl = a << 1; 275 long x = shl + b; 276 long y = shl + c; 277 return x ^ y; 278 } 279 280 /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsMixedOrderUseShl(long, long, long) instruction_simplifier_riscv64 (after) 281 /// CHECK-DAG: Riscv64ShiftAdd 282 /// CHECK-DAG: Riscv64ShiftAdd 283 284 /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsMixedOrderUseShl(long, long, long) instruction_simplifier_riscv64 (after) 285 /// CHECK-NOT: Shl 286 287 /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsMixedOrderUseShl(long, long, long) instruction_simplifier_riscv64 (after) 288 /// CHECK-NOT: Add 289 $noinline$longTwoAddsMixedOrderUseShl(long a, long b, long c)290 public static long $noinline$longTwoAddsMixedOrderUseShl(long a, long b, long c) { 291 long x = (a << 1) + b; 292 long y = c + (a << 1); 293 return x ^ y; 294 } 295 296 /// CHECK-START-RISCV64: long Main.$noinline$longOneAddSharesShlUse(long, long, long) instruction_simplifier_riscv64 (before) 297 /// CHECK: <<A:j\d+>> ParameterValue 298 /// CHECK: <<B:j\d+>> ParameterValue 299 /// CHECK: <<C:j\d+>> ParameterValue 300 /// CHECK: <<One:i\d+>> IntConstant 1 301 /// CHECK: <<Shl:j\d+>> Shl [<<A>>,<<One>>] 302 /// CHECK: <<X:j\d+>> Add [<<B>>,<<Shl>>] 303 /// CHECK: <<Y:j\d+>> Sub [<<Shl>>,<<C>>] 304 305 /// CHECK-START-RISCV64: long Main.$noinline$longOneAddSharesShlUse(long, long, long) instruction_simplifier_riscv64 (after) 306 /// CHECK: <<A:j\d+>> ParameterValue 307 /// CHECK: <<B:j\d+>> ParameterValue 308 /// CHECK: <<C:j\d+>> ParameterValue 309 /// CHECK: <<One:i\d+>> IntConstant 1 310 /// CHECK: <<Shl:j\d+>> Shl [<<A>>,<<One>>] 311 /// CHECK-DAG: <<ShAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:1 312 /// CHECK: <<Y:j\d+>> Sub [<<Shl>>,<<C>>] 313 314 /// CHECK-START-RISCV64: long Main.$noinline$longOneAddSharesShlUse(long, long, long) instruction_simplifier_riscv64 (after) 315 /// CHECK-NOT: Add 316 $noinline$longOneAddSharesShlUse(long a, long b, long c)317 public static long $noinline$longOneAddSharesShlUse(long a, long b, long c) { 318 long shl = a << 1; 319 long x = shl + b; 320 long y = shl - c; 321 return x ^ y; 322 } 323 $noinline$returnVoid(long a)324 public static void $noinline$returnVoid(long a) {} 325 326 /// CHECK-START-RISCV64: long Main.$noinline$longOneAddSharesShlEnvironmentUse(long, long) instruction_simplifier_riscv64 (after) 327 /// CHECK: Shl 328 /// CHECK-DAG: Riscv64ShiftAdd 329 $noinline$longOneAddSharesShlEnvironmentUse(long a, long b)330 public static long $noinline$longOneAddSharesShlEnvironmentUse(long a, long b) { 331 long shl = a << 1; 332 long x = shl + b; 333 $noinline$returnVoid(shl); 334 return x; 335 } 336 337 /// CHECK-START-RISCV64: long Main.$noinline$longTwoTheSameShl(long) instruction_simplifier_riscv64 (after) 338 /// CHECK-NOT: Riscv64ShiftAdd 339 $noinline$longTwoTheSameShl(long a)340 public static long $noinline$longTwoTheSameShl(long a) { 341 return (a << 1) + (a << 1); 342 } 343 main(String[] args)344 public static void main(String[] args) { 345 assertIntEquals(0, $noinline$intRiscvShift1Add(0, 0)); 346 347 assertLongEquals(-3L, $noinline$longIntRiscvShift1Add(-1L, -1)); 348 assertLongEquals(3L, $noinline$longIntRiscvShift1Add(1L, 1)); 349 350 assertLongEquals(-3L, $noinline$longRiscvShift1Add(-1L, -1L)); 351 assertLongEquals(-1L, $noinline$longRiscvShift1Add(0L, -1L)); 352 assertLongEquals(-2L, $noinline$longRiscvShift1Add(-1L, 0L)); 353 assertLongEquals(0L, $noinline$longRiscvShift1Add(0L, 0L)); 354 assertLongEquals(1L, $noinline$longRiscvShift1Add(0L, 1L)); 355 assertLongEquals(2L, $noinline$longRiscvShift1Add(1L, 0L)); 356 assertLongEquals(3L, $noinline$longRiscvShift1Add(1L, 1L)); 357 358 assertLongEquals(-1L, $noinline$longRiscvShift1Add(Long.MAX_VALUE, 1L)); 359 360 assertLongEquals(0L, $noinline$longRiscvShift2Add(0L, 0L)); 361 assertLongEquals(1L, $noinline$longRiscvShift2Add(0L, 1L)); 362 assertLongEquals(4L, $noinline$longRiscvShift2Add(1L, 0L)); 363 assertLongEquals(5L, $noinline$longRiscvShift2Add(1L, 1L)); 364 365 assertLongEquals(0L, $noinline$longRiscvShift3Add(0L, 0L)); 366 assertLongEquals(0L, $noinline$longReverseRiscvShift3Add(0L, 0L)); 367 assertLongEquals(1L, $noinline$longRiscvShift3Add(0L, 1L)); 368 assertLongEquals(1L, $noinline$longReverseRiscvShift3Add(0L, 1L)); 369 assertLongEquals(8L, $noinline$longRiscvShift3Add(1L, 0L)); 370 assertLongEquals(8L, $noinline$longReverseRiscvShift3Add(1L, 0L)); 371 assertLongEquals(9L, $noinline$longRiscvShift3Add(1L, 1L)); 372 assertLongEquals(9L, $noinline$longReverseRiscvShift3Add(1L, 1L)); 373 374 assertLongEquals(2L, $noinline$longRightShift(0L, 1L)); 375 assertLongEquals(4L, $noinline$longRightShift(0L, 2L)); 376 377 assertLongEquals(2L, $noinline$longLeftShift(1L, 0L)); 378 assertLongEquals(4L, $noinline$longLeftShift(2L, 0L)); 379 380 assertLongEquals(1L, $noinline$longShiftTooLittleDistance(1L, 0L)); 381 assertLongEquals(2L, $noinline$longShiftTooLittleDistance(2L, 0L)); 382 383 assertLongEquals(17L, $noinline$longShiftTooGreatDistance(1L, 1L)); 384 assertLongEquals(32L, $noinline$longShiftTooGreatDistance(2L, 0L)); 385 386 assertLongEquals(6L, $noinline$longTwoSimplifications(1L, 1L)); 387 388 assertLongEquals(0L, $noinline$longTwoAddsUseShl(1L, 1L, 1L)); 389 assertLongEquals(1L, $noinline$longTwoAddsUseShl(1L, 0L, 1L)); 390 assertLongEquals(3L, $noinline$longTwoAddsUseShl(0L, 1L, 2L)); 391 assertLongEquals(7L, $noinline$longTwoAddsUseShl(1L, 2L, 1L)); 392 393 assertLongEquals(0L, $noinline$longTwoAddsMixedOrderUseShl(1L, 1L, 1L)); 394 assertLongEquals(1L, $noinline$longTwoAddsMixedOrderUseShl(1L, 0L, 1L)); 395 assertLongEquals(3L, $noinline$longTwoAddsMixedOrderUseShl(0L, 1L, 2L)); 396 397 assertLongEquals(2L, $noinline$longOneAddSharesShlUse(1L, 1L, 1L)); 398 assertLongEquals(3L, $noinline$longOneAddSharesShlUse(1L, 0L, 1L)); 399 assertLongEquals(-1L, $noinline$longOneAddSharesShlUse(0L, 1L, 2L)); 400 assertLongEquals(5L, $noinline$longOneAddSharesShlUse(1L, 2L, 1L)); 401 402 assertLongEquals(3L, $noinline$longOneAddSharesShlEnvironmentUse(1L, 1L)); 403 404 assertLongEquals(4L, $noinline$longTwoTheSameShl(1L)); 405 } 406 } 407