// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // Test if-conversion pass in the optimizing compiler. // VMOptions=--optimization-counter-threshold=10 --no-use-osr --no-background-compilation import "package:expect/expect.dart"; f1(i) => (i == 0) ? 0 : 1; f2(i) => (i == 0) ? 2 : 3; f3(i) => (i == null) ? 0 : 1; f4(i) => (i == null) ? 2 : 3; f5(i) => (i != 0) ? 0 : 1; f6(i) => (i != 0) ? 2 : 3; f7(i) => (i != null) ? 0 : 1; f8(i) => (i != null) ? 2 : 3; f9(i) => identical(i, 0) ? 0 : 1; f10(i) => identical(i, 0) ? 2 : 3; f11(i) => identical(i, null) ? 0 : 1; f12(i) => identical(i, null) ? 2 : 3; f13(i) => !identical(i, 0) ? 0 : 1; f14(i) => !identical(i, 0) ? 2 : 3; f15(i) => !identical(i, null) ? 0 : 1; f16(i) => !identical(i, null) ? 2 : 3; const POWER_OF_2 = 0x1000000000; bigPower(i) => (i == 11) ? 0 : POWER_OF_2; cse(i) { final a = i == 0 ? 0 : 1; final b = i == 0 ? 2 : 3; return a + b; } f17(b) => b ? 0 : 11; f18(b) => b ? 2 : 0; f19(i) => i == 0 ? 0 : 0; f20(i) => i > 0 ? 0 : 1; f21(i) => i > 0 ? 2 : 3; f22(i) => i & 1 == 0 ? 0 : 1; f23(i) => i & 1 != 0 ? 1 : 0; f24(i) => i >= 0 ? 0 : 1; f25(i) => i < 0 ? 0 : 1; f26(i) => i <= 0 ? 0 : 1; main() { for (var i = 0; i < 20; i++) { f1(i); f2(i); f3(i); f4(i); f5(i); f6(i); f7(i); f8(i); f9(i); f10(i); f11(i); f12(i); f13(i); f14(i); f15(i); f16(i); cse(i); bigPower(i); f17(true); f18(true); f19(i); f20(i); f21(i); f22(i); f23(i); f24(i); f25(i); f26(i); } Expect.equals(0, f1(0)); Expect.equals(1, f1(44)); Expect.equals(2, f2(0)); Expect.equals(3, f2(44)); Expect.equals(0, f3(null)); Expect.equals(1, f3(44)); Expect.equals(2, f4(null)); Expect.equals(3, f4(44)); Expect.equals(1, f5(0)); Expect.equals(0, f5(44)); Expect.equals(3, f6(0)); Expect.equals(2, f6(44)); Expect.equals(1, f7(null)); Expect.equals(0, f7(44)); Expect.equals(3, f8(null)); Expect.equals(2, f8(44)); Expect.equals(0, f9(0)); Expect.equals(1, f9(44)); Expect.equals(2, f10(0)); Expect.equals(3, f10(44)); Expect.equals(0, f11(null)); Expect.equals(1, f11(44)); Expect.equals(2, f12(null)); Expect.equals(3, f12(44)); Expect.equals(1, f13(0)); Expect.equals(0, f13(44)); Expect.equals(3, f14(0)); Expect.equals(2, f14(44)); Expect.equals(1, f15(null)); Expect.equals(0, f15(44)); Expect.equals(3, f16(null)); Expect.equals(2, f16(44)); Expect.equals(0, bigPower(11)); Expect.equals(POWER_OF_2, bigPower(12)); Expect.equals(2, cse(0)); Expect.equals(4, cse(1)); Expect.equals(11, f17(false)); Expect.equals(0, f17(true)); Expect.equals(0, f18(false)); Expect.equals(2, f18(true)); Expect.equals(0, f19(0)); Expect.equals(0, f19(1)); Expect.equals(0, f20(123)); Expect.equals(2, f21(123)); Expect.equals(0, f22(122)); Expect.equals(1, f22(123)); Expect.equals(0, f23(122)); Expect.equals(1, f23(123)); Expect.equals(0, f24(0)); Expect.equals(1, f24(-1)); Expect.equals(0, f25(-1)); Expect.equals(1, f25(0)); Expect.equals(0, f26(0)); Expect.equals(1, f26(1)); }