1ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil/*
26a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain * Copyright (C) 2014 The Android Open Source Project
36a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain *
46a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain * Licensed under the Apache License, Version 2.0 (the "License");
56a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain * you may not use this file except in compliance with the License.
66a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain * You may obtain a copy of the License at
76a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain *
86a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain *      http://www.apache.org/licenses/LICENSE-2.0
96a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain *
106a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain * Unless required by applicable law or agreed to in writing, software
116a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain * distributed under the License is distributed on an "AS IS" BASIS,
126a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain * See the License for the specific language governing permissions and
146a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain * limitations under the License.
156a92a033c33e383541d77607fbe8cd982875d13dRoland Levillain */
16ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
1731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillainimport java.lang.reflect.Method;
1831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
194846d13744f07e82571d2882acc823d811ec942dDavid Brazdilpublic class Main {
20ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
2131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  // Workaround for b/18051191.
2231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  class InnerClass {}
2331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
243b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain  public static void assertFalse(boolean condition) {
253b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain    if (condition) {
263b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain      throw new Error();
273b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain    }
283b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain  }
293b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain
30b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static void assertIntEquals(int expected, int result) {
31b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    if (expected != result) {
32b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames      throw new Error("Expected: " + expected + ", found: " + result);
33b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    }
34b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
35b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
36b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static void assertLongEquals(long expected, long result) {
37b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    if (expected != result) {
38b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames      throw new Error("Expected: " + expected + ", found: " + result);
39b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    }
40b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
41b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
42e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static void assertFloatEquals(float expected, float result) {
43e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    if (expected != result) {
44e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell      throw new Error("Expected: " + expected + ", found: " + result);
45e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    }
46e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
47e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
48e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static void assertDoubleEquals(double expected, double result) {
49e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    if (expected != result) {
50e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell      throw new Error("Expected: " + expected + ", found: " + result);
51e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    }
52e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
53e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
54b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
5531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  // Wrappers around methods located in file TestCmp.smali.
5631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
5731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpLongConstants() throws Exception {
5831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpLongConstants");
5931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
6031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
6131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpGtFloatConstants() throws Exception {
6231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpGtFloatConstants");
6331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
6431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
6531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpLtFloatConstants() throws Exception {
6631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpLtFloatConstants");
6731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
6831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
6931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpGtDoubleConstants() throws Exception {
7031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpGtDoubleConstants");
7131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
7231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
7331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpLtDoubleConstants() throws Exception {
7431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpLtDoubleConstants");
7531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
7631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
7731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
7831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpLongSameConstant() throws Exception {
7931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpLongSameConstant");
8031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
8131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
8231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpGtFloatSameConstant() throws Exception {
8331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpGtFloatSameConstant");
8431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
8531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
8631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpLtFloatSameConstant() throws Exception {
8731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpLtFloatSameConstant");
8831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
8931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
9031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpGtDoubleSameConstant() throws Exception {
9131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpGtDoubleSameConstant");
9231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
9331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
9431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpLtDoubleSameConstant() throws Exception {
9531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpLtDoubleSameConstant");
9631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
9731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
9831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
9931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpGtFloatConstantWithNaN() throws Exception {
10031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpGtFloatConstantWithNaN");
10131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
10231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
10331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpLtFloatConstantWithNaN() throws Exception {
10431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpLtFloatConstantWithNaN");
10531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
10631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
10731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpGtDoubleConstantWithNaN() throws Exception {
10831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpGtDoubleConstantWithNaN");
10931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
11031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
11131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public int smaliCmpLtDoubleConstantWithNaN() throws Exception {
11231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Method m = testCmp.getMethod("$opt$CmpLtDoubleConstantWithNaN");
11331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return (Integer)m.invoke(null);
11431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
11531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
116138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung  public static int smaliIntAddition2() throws Exception {
117138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    Method m = Class.forName("TestCmp").getMethod("IntAddition2");
118138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    return (Integer)m.invoke(null);
119138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung  }
120138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung  public static int smaliIntAddition2AddAndMove() throws Exception {
121138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    Method m = Class.forName("TestCmp").getMethod("IntAddition2AddAndMove");
122138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    return (Integer)m.invoke(null);
123138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung  }
124138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung  public static int smaliJumpsAndConditionals(boolean cond) throws Exception {
125138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    Method m = Class.forName("TestCmp").getMethod("JumpsAndConditionals", boolean.class);
126138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    return (Integer)m.invoke(null, cond);
127138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung  }
128138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung
12931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
130ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
131b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain   * Exercise constant folding on negation.
132ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
133ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
134a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.IntNegation() constant_folding (before)
135a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const42:i\d+>>  IntConstant 42
136a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Neg:i\d+>>      Neg [<<Const42>>]
137a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Neg>>]
138ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
139a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.IntNegation() constant_folding (after)
140a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstN42:i\d+>> IntConstant -42
141a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<ConstN42>>]
142ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
143b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: int Main.IntNegation() constant_folding (after)
144b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       Neg
145b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
146ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int IntNegation() {
147ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int x, y;
148ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    x = 42;
149ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    y = -x;
150ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return y;
151ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
152ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
153c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  /// CHECK-START: long Main.LongNegation() constant_folding (before)
154c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  /// CHECK-DAG:     <<Const42:j\d+>>  LongConstant 42
155c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  /// CHECK-DAG:     <<Neg:j\d+>>      Neg [<<Const42>>]
156c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  /// CHECK-DAG:                       Return [<<Neg>>]
157c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain
158c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  /// CHECK-START: long Main.LongNegation() constant_folding (after)
159c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  /// CHECK-DAG:     <<ConstN42:j\d+>> LongConstant -42
160c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  /// CHECK-DAG:                       Return [<<ConstN42>>]
161c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain
162c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  /// CHECK-START: long Main.LongNegation() constant_folding (after)
163c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  /// CHECK-NOT:                       Neg
164c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain
165c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  public static long LongNegation() {
166c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain    long x, y;
167c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain    x = 42L;
168c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain    y = -x;
169c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain    return y;
170c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain  }
171c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain
17231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-START: float Main.FloatNegation() constant_folding (before)
17331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const42:f\d+>>  FloatConstant 42
17431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Neg:f\d+>>      Neg [<<Const42>>]
17531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Neg>>]
17631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
17731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-START: float Main.FloatNegation() constant_folding (after)
17831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<ConstN42:f\d+>> FloatConstant -42
17931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<ConstN42>>]
18031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
18131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-START: float Main.FloatNegation() constant_folding (after)
18231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                       Neg
18331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
18431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static float FloatNegation() {
18531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    float x, y;
18631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    x = 42F;
18731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    y = -x;
18831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return y;
18931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
19031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
19131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-START: double Main.DoubleNegation() constant_folding (before)
19231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const42:d\d+>>  DoubleConstant 42
19331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Neg:d\d+>>      Neg [<<Const42>>]
19431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Neg>>]
19531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
19631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-START: double Main.DoubleNegation() constant_folding (after)
19731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<ConstN42:d\d+>> DoubleConstant -42
19831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<ConstN42>>]
19931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
20031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-START: double Main.DoubleNegation() constant_folding (after)
20131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                       Neg
20231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
20331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static double DoubleNegation() {
20431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    double x, y;
20531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    x = 42D;
20631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    y = -x;
20731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return y;
20831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
20931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
210bd44132f680430d44790015b42edffc05797e19cIgor Murashkin
211ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
212b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain   * Exercise constant folding on addition.
213ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
214ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
215bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntAddition1() constant_folding (before)
216a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const1:i\d+>>  IntConstant 1
217a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const2:i\d+>>  IntConstant 2
218a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Add:i\d+>>     Add [<<Const1>>,<<Const2>>]
219a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                      Return [<<Add>>]
220ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
221bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntAddition1() constant_folding (after)
222a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const3:i\d+>>  IntConstant 3
223a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                      Return [<<Const3>>]
224ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
225bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntAddition1() constant_folding (after)
226b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                      Add
227b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
228ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int IntAddition1() {
229ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int a, b, c;
230bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 1;
231bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2;
232ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = a + b;
233ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
234ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
235ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
236bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntAddition2() constant_folding (before)
237a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const1:i\d+>>  IntConstant 1
238a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const2:i\d+>>  IntConstant 2
239a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const5:i\d+>>  IntConstant 5
240a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const6:i\d+>>  IntConstant 6
241a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Add1:i\d+>>    Add [<<Const1>>,<<Const2>>]
242bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-DAG:                      Add [<<Const5>>,<<Const6>>]
243ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
244bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntAddition2() constant_folding (after)
245a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const14:i\d+>> IntConstant 14
246a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                      Return [<<Const14>>]
247ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
248bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntAddition2() constant_folding (after)
249b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                      Add
250b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
251ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int IntAddition2() {
252ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int a, b, c;
253bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 1;
254bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2;
255ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    a += b;
256bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 5;
257bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    c = 6;
258ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    b += c;
259ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = a + b;
260ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
261ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
262ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
263bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongAddition() constant_folding (before)
264a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const1:j\d+>>  LongConstant 1
265a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const2:j\d+>>  LongConstant 2
266a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Add:j\d+>>     Add [<<Const1>>,<<Const2>>]
267a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                      Return [<<Add>>]
268ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
269bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongAddition() constant_folding (after)
270a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const3:j\d+>>  LongConstant 3
271a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                      Return [<<Const3>>]
272ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
273bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongAddition() constant_folding (after)
274b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                      Add
275b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
276ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static long LongAddition() {
277ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    long a, b, c;
278bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 1L;
279bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2L;
280ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = a + b;
281ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
282ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
283ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
284bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatAddition() constant_folding (before)
28531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const1:f\d+>>  FloatConstant 1
28631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const2:f\d+>>  FloatConstant 2
28731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Add:f\d+>>     Add [<<Const1>>,<<Const2>>]
28831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Add>>]
28931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
290bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatAddition() constant_folding (after)
29131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const3:f\d+>>  FloatConstant 3
29231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Const3>>]
29331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
294bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatAddition() constant_folding (after)
29531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                      Add
29631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
29731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static float FloatAddition() {
29831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    float a, b, c;
299bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 1F;
300bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2F;
30131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a + b;
30231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
30331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
30431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
305bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleAddition() constant_folding (before)
30631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const1:d\d+>>  DoubleConstant 1
30731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const2:d\d+>>  DoubleConstant 2
30831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Add:d\d+>>     Add [<<Const1>>,<<Const2>>]
30931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Add>>]
31031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
311bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleAddition() constant_folding (after)
31231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const3:d\d+>>  DoubleConstant 3
31331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Const3>>]
31431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
315bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleAddition() constant_folding (after)
31631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                      Add
31731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
31831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static double DoubleAddition() {
31931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    double a, b, c;
320bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 1D;
321bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2D;
32231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a + b;
32331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
32431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
32531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
326b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
327ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
328b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain   * Exercise constant folding on subtraction.
329ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
330ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
331bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntSubtraction() constant_folding (before)
332b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-DAG:     <<Const6:i\d+>>  IntConstant 6
333b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-DAG:     <<Const2:i\d+>>  IntConstant 2
334b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-DAG:     <<Sub:i\d+>>     Sub [<<Const6>>,<<Const2>>]
335b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-DAG:                      Return [<<Sub>>]
336b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
337bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntSubtraction() constant_folding (after)
338b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-DAG:     <<Const4:i\d+>>  IntConstant 4
339b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-DAG:                      Return [<<Const4>>]
340b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
341bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntSubtraction() constant_folding (after)
342b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                      Sub
343b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
344b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  public static int IntSubtraction() {
345b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    int a, b, c;
346bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 6;
347bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2;
348b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    c = a - b;
349b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    return c;
350b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  }
351b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
352bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongSubtraction() constant_folding (before)
353a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const6:j\d+>>  LongConstant 6
354a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const2:j\d+>>  LongConstant 2
355a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Sub:j\d+>>     Sub [<<Const6>>,<<Const2>>]
356a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                      Return [<<Sub>>]
357ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
358bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongSubtraction() constant_folding (after)
359a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const4:j\d+>>  LongConstant 4
360a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                      Return [<<Const4>>]
361ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
362bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongSubtraction() constant_folding (after)
363b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                      Sub
364b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
365ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static long LongSubtraction() {
366ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    long a, b, c;
367bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 6L;
368bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2L;
369ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    c = a - b;
370ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
371ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
372ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
373bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatSubtraction() constant_folding (before)
37431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const6:f\d+>>  FloatConstant 6
37531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const2:f\d+>>  FloatConstant 2
37631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Sub:f\d+>>     Sub [<<Const6>>,<<Const2>>]
37731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Sub>>]
37831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
379bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatSubtraction() constant_folding (after)
38031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const4:f\d+>>  FloatConstant 4
38131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Const4>>]
38231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
383bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatSubtraction() constant_folding (after)
38431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                      Sub
38531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
38631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static float FloatSubtraction() {
38731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    float a, b, c;
388bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 6F;
389bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2F;
39031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a - b;
39131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
39231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
39331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
394bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleSubtraction() constant_folding (before)
39531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const6:d\d+>>  DoubleConstant 6
39631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const2:d\d+>>  DoubleConstant 2
39731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Sub:d\d+>>     Sub [<<Const6>>,<<Const2>>]
39831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Sub>>]
39931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
400bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleSubtraction() constant_folding (after)
40131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const4:d\d+>>  DoubleConstant 4
40231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Const4>>]
40331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
404bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleSubtraction() constant_folding (after)
40531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                      Sub
40631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
40731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static double DoubleSubtraction() {
40831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    double a, b, c;
409bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 6D;
410bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2D;
41131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a - b;
41231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
41331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
41431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
415b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
416ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
417f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain   * Exercise constant folding on multiplication.
418f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain   */
419f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
420bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntMultiplication() constant_folding (before)
421f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const7:i\d+>>  IntConstant 7
422f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const3:i\d+>>  IntConstant 3
423f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Mul:i\d+>>     Mul [<<Const7>>,<<Const3>>]
424f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                      Return [<<Mul>>]
425f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
426bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntMultiplication() constant_folding (after)
427f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const21:i\d+>> IntConstant 21
428f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                      Return [<<Const21>>]
429f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
430bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntMultiplication() constant_folding (after)
431f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                      Mul
432f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
433f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  public static int IntMultiplication() {
434f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    int a, b, c;
435bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 7;
436bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 3;
437f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    c = a * b;
438f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    return c;
439f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  }
440f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
441bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongMultiplication() constant_folding (before)
442f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const7:j\d+>>  LongConstant 7
443f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const3:j\d+>>  LongConstant 3
444f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Mul:j\d+>>     Mul [<<Const7>>,<<Const3>>]
445f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                      Return [<<Mul>>]
446f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
447bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongMultiplication() constant_folding (after)
448f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const21:j\d+>> LongConstant 21
449f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                      Return [<<Const21>>]
450f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
451bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongMultiplication() constant_folding (after)
452f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                      Mul
453f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
454f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  public static long LongMultiplication() {
455f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    long a, b, c;
456bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 7L;
457bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 3L;
458f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    c = a * b;
459f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    return c;
460f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  }
461f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
462bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatMultiplication() constant_folding (before)
46331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const7:f\d+>>  FloatConstant 7
46431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const3:f\d+>>  FloatConstant 3
46531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Mul:f\d+>>     Mul [<<Const7>>,<<Const3>>]
46631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Mul>>]
46731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
468bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatMultiplication() constant_folding (after)
46931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const21:f\d+>> FloatConstant 21
47031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Const21>>]
47131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
472bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatMultiplication() constant_folding (after)
47331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                      Mul
47431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
47531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static float FloatMultiplication() {
47631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    float a, b, c;
477bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 7F;
478bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 3F;
47931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a * b;
48031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
48131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
48231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
483bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleMultiplication() constant_folding (before)
48431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const7:d\d+>>  DoubleConstant 7
48531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const3:d\d+>>  DoubleConstant 3
48631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Mul:d\d+>>     Mul [<<Const7>>,<<Const3>>]
48731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Mul>>]
48831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
489bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleMultiplication() constant_folding (after)
49031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const21:d\d+>> DoubleConstant 21
49131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                      Return [<<Const21>>]
49231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
493bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleMultiplication() constant_folding (after)
49431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                      Mul
49531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
49631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static double DoubleMultiplication() {
49731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    double a, b, c;
498bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 7D;
499bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 3D;
50031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a * b;
50131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
50231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
50331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
504f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
505f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /**
506f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain   * Exercise constant folding on division.
507f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain   */
508f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
509bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntDivision() constant_folding (before)
510f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const8:i\d+>>   IntConstant 8
511f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const3:i\d+>>   IntConstant 3
512f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Div0Chk:i\d+>>  DivZeroCheck [<<Const3>>]
513f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Div:i\d+>>      Div [<<Const8>>,<<Div0Chk>>]
514f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                       Return [<<Div>>]
515f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
516bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntDivision() constant_folding (after)
517f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const2:i\d+>>   IntConstant 2
518f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                       Return [<<Const2>>]
519f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
520bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntDivision() constant_folding (after)
521f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                       DivZeroCheck
522f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                       Div
523f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
524f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  public static int IntDivision() {
525f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    int a, b, c;
526bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 8;
527bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 3;
528f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    c = a / b;
529f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    return c;
530f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  }
531f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
532bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongDivision() constant_folding (before)
533f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const8:j\d+>>   LongConstant 8
534f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const3:j\d+>>   LongConstant 3
535f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Div0Chk:j\d+>>  DivZeroCheck [<<Const3>>]
536f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Div:j\d+>>      Div [<<Const8>>,<<Div0Chk>>]
537f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                       Return [<<Div>>]
538f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
539bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongDivision() constant_folding (after)
540f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const2:j\d+>>   LongConstant 2
541f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                       Return [<<Const2>>]
542f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
543bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongDivision() constant_folding (after)
544f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                       DivZeroCheck
545f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                       Div
546f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
547f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  public static long LongDivision() {
548f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    long a, b, c;
549bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 8L;
550bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 3L;
551f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    c = a / b;
552f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    return c;
553f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  }
554f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
555bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatDivision() constant_folding (before)
55631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const8:f\d+>>   FloatConstant 8
55731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const2P5:f\d+>> FloatConstant 2.5
55831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Div:f\d+>>      Div [<<Const8>>,<<Const2P5>>]
55931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Div>>]
56031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
561bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatDivision() constant_folding (after)
56231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const3P2:f\d+>> FloatConstant 3.2
56331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Const3P2>>]
56431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
565bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatDivision() constant_folding (after)
56631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                       Div
56731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
56831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static float FloatDivision() {
56931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    float a, b, c;
570bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 8F;
571bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2.5F;
57231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a / b;
57331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
57431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
57531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
576bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleDivision() constant_folding (before)
57731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const8:d\d+>>   DoubleConstant 8
57831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const2P5:d\d+>> DoubleConstant 2.5
57931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Div:d\d+>>      Div [<<Const8>>,<<Const2P5>>]
58031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Div>>]
58131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
582bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleDivision() constant_folding (after)
58331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const3P2:d\d+>> DoubleConstant 3.2
58431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Const3P2>>]
58531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
586bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleDivision() constant_folding (after)
58731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                       Div
58831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
58931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static double DoubleDivision() {
59031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    double a, b, c;
591bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 8D;
592bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2.5D;
59331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a / b;
59431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
59531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
59631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
597f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
598f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /**
599f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain   * Exercise constant folding on remainder.
600f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain   */
601f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
602bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntRemainder() constant_folding (before)
603f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const8:i\d+>>   IntConstant 8
604f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const3:i\d+>>   IntConstant 3
605f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Div0Chk:i\d+>>  DivZeroCheck [<<Const3>>]
606f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Rem:i\d+>>      Rem [<<Const8>>,<<Div0Chk>>]
607f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                       Return [<<Rem>>]
608f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
609bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntRemainder() constant_folding (after)
610f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const2:i\d+>>   IntConstant 2
611f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                       Return [<<Const2>>]
612f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
613bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.IntRemainder() constant_folding (after)
614f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                       DivZeroCheck
615f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                       Rem
616f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
617f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  public static int IntRemainder() {
618f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    int a, b, c;
619bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 8;
620bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 3;
621f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    c = a % b;
622f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    return c;
623f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  }
624f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
625bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongRemainder() constant_folding (before)
626f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const8:j\d+>>   LongConstant 8
627f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const3:j\d+>>   LongConstant 3
628f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Div0Chk:j\d+>>  DivZeroCheck [<<Const3>>]
629f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Rem:j\d+>>      Rem [<<Const8>>,<<Div0Chk>>]
630f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                       Return [<<Rem>>]
631f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
632bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongRemainder() constant_folding (after)
633f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:     <<Const2:j\d+>>   LongConstant 2
634f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-DAG:                       Return [<<Const2>>]
635f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
636bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.LongRemainder() constant_folding (after)
637f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                       DivZeroCheck
638f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /// CHECK-NOT:                       Rem
639f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
640f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  public static long LongRemainder() {
641f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    long a, b, c;
642bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 8L;
643bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 3L;
644f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    c = a % b;
645f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    return c;
646f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  }
647f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
648bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatRemainder() constant_folding (before)
64931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const8:f\d+>>   FloatConstant 8
65031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const2P5:f\d+>> FloatConstant 2.5
65131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Rem:f\d+>>      Rem [<<Const8>>,<<Const2P5>>]
65231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Rem>>]
65331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
654bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatRemainder() constant_folding (after)
65531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const0P5:f\d+>> FloatConstant 0.5
65631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Const0P5>>]
65731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
658bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.FloatRemainder() constant_folding (after)
65931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                       Rem
66031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
66131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static float FloatRemainder() {
66231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    float a, b, c;
663bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 8F;
664bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2.5F;
66531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a % b;
66631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
66731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
66831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
669bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleRemainder() constant_folding (before)
67031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const8:d\d+>>   DoubleConstant 8
67131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const2P5:d\d+>> DoubleConstant 2.5
67231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Rem:d\d+>>      Rem [<<Const8>>,<<Const2P5>>]
67331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Rem>>]
67431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
675bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleRemainder() constant_folding (after)
67631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:     <<Const0P5:d\d+>> DoubleConstant 0.5
67731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-DAG:                       Return [<<Const0P5>>]
67831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
679bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.DoubleRemainder() constant_folding (after)
68031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  /// CHECK-NOT:                       Rem
68131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
68231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static double DoubleRemainder() {
68331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    double a, b, c;
684bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 8D;
685bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2.5D;
68631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    c = a % b;
68731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    return c;
68831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
68931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
690f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
691f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain  /**
6929867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   * Exercise constant folding on left shift.
6939867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   */
6949867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
695bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ShlIntLong() constant_folding (before)
6969867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
6979867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const2L:j\d+>>  LongConstant 2
6989867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<TypeConv:i\d+>> TypeConversion [<<Const2L>>]
6999867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Shl:i\d+>>      Shl [<<Const1>>,<<TypeConv>>]
7009867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Shl>>]
7019867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
702bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ShlIntLong() constant_folding (after)
7039867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const4:i\d+>>   IntConstant 4
7049867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const4>>]
7059867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
706bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ShlIntLong() constant_folding (after)
7079867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       Shl
7089867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
7099867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static int ShlIntLong() {
710bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int lhs = 1;
711bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long rhs = 2;
7129867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs << rhs;
7139867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
7149867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
715bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ShlLongInt() constant_folding (before)
7169867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const3L:j\d+>>  LongConstant 3
7179867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const2:i\d+>>   IntConstant 2
7189867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Shl:j\d+>>      Shl [<<Const3L>>,<<Const2>>]
7199867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Shl>>]
7209867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
721bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ShlLongInt() constant_folding (after)
7229867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const12L:j\d+>> LongConstant 12
7239867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const12L>>]
7249867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
725bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ShlLongInt() constant_folding (after)
7269867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       Shl
7279867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
7289867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long ShlLongInt() {
729bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long lhs = 3;
730bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int rhs = 2;
7319867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs << rhs;
7329867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
7339867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
7349867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
7359867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /**
7369867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   * Exercise constant folding on right shift.
7379867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   */
7389867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
739bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ShrIntLong() constant_folding (before)
7409867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const7:i\d+>>   IntConstant 7
7419867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const2L:j\d+>>  LongConstant 2
7429867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<TypeConv:i\d+>> TypeConversion [<<Const2L>>]
7439867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Shr:i\d+>>      Shr [<<Const7>>,<<TypeConv>>]
7449867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Shr>>]
7459867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
746bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ShrIntLong() constant_folding (after)
7479867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
7489867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const1>>]
7499867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
750bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ShrIntLong() constant_folding (after)
7519867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       Shr
7529867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
7539867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static int ShrIntLong() {
754bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int lhs = 7;
755bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long rhs = 2;
7569867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs >> rhs;
7579867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
7589867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
759bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ShrLongInt() constant_folding (before)
7609867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const9L:j\d+>>  LongConstant 9
7619867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const2:i\d+>>   IntConstant 2
7629867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Shr:j\d+>>      Shr [<<Const9L>>,<<Const2>>]
7639867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Shr>>]
7649867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
765bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ShrLongInt() constant_folding (after)
7669867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const2L:j\d+>>  LongConstant 2
7679867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const2L>>]
7689867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
769bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ShrLongInt() constant_folding (after)
7709867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       Shr
7719867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
7729867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long ShrLongInt() {
773bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long lhs = 9;
774bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int rhs = 2;
7759867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs >> rhs;
7769867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
7779867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
7789867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
7799867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /**
7809867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   * Exercise constant folding on unsigned right shift.
7819867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   */
7829867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
783bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.UShrIntLong() constant_folding (before)
7849867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<ConstM7:i\d+>>  IntConstant -7
7859867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const2L:j\d+>>  LongConstant 2
7869867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<TypeConv:i\d+>> TypeConversion [<<Const2L>>]
7879867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<UShr:i\d+>>     UShr [<<ConstM7>>,<<TypeConv>>]
7889867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<UShr>>]
7899867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
790bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.UShrIntLong() constant_folding (after)
7919867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<ConstRes:i\d+>> IntConstant 1073741822
7929867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<ConstRes>>]
7939867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
794bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.UShrIntLong() constant_folding (after)
7959867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       UShr
7969867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
7979867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static int UShrIntLong() {
798bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int lhs = -7;
799bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long rhs = 2;
8009867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs >>> rhs;
8019867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
8029867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
803bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.UShrLongInt() constant_folding (before)
8049867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<ConstM9L:j\d+>> LongConstant -9
8059867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const2:i\d+>>   IntConstant 2
8069867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<UShr:j\d+>>     UShr [<<ConstM9L>>,<<Const2>>]
8079867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<UShr>>]
8089867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
809bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.UShrLongInt() constant_folding (after)
8109867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<ConstRes:j\d+>> LongConstant 4611686018427387901
8119867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<ConstRes>>]
8129867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
813bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.UShrLongInt() constant_folding (after)
8149867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       UShr
8159867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
8169867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long UShrLongInt() {
817bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long lhs = -9;
818bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int rhs = 2;
8199867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs >>> rhs;
8209867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
8219867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
8229867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
8239867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /**
8249867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   * Exercise constant folding on logical and.
8259867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   */
8269867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
827bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.AndIntLong() constant_folding (before)
8289867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const10:i\d+>>  IntConstant 10
8299867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const3L:j\d+>>  LongConstant 3
8309867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<TypeConv:j\d+>> TypeConversion [<<Const10>>]
8319867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<And:j\d+>>      And [<<TypeConv>>,<<Const3L>>]
8329867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<And>>]
8339867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
834bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.AndIntLong() constant_folding (after)
8359867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const2:j\d+>>   LongConstant 2
8369867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const2>>]
8379867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
838bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.AndIntLong() constant_folding (after)
8399867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       And
8409867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
8419867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long AndIntLong() {
842bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int lhs = 10;
843bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long rhs = 3;
8449867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs & rhs;
8459867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
8469867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
847bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.AndLongInt() constant_folding (before)
8489867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const10L:j\d+>> LongConstant 10
8499867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const3:i\d+>>   IntConstant 3
8509867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<TypeConv:j\d+>> TypeConversion [<<Const3>>]
85157e863c3739c310380e19252ad5746ff08d219c7David Brazdil  /// CHECK-DAG:     <<And:j\d+>>      And [<<TypeConv>>,<<Const10L>>]
8529867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<And>>]
8539867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
854bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.AndLongInt() constant_folding (after)
8559867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const2:j\d+>>   LongConstant 2
8569867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const2>>]
8579867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
858bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.AndLongInt() constant_folding (after)
8599867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       And
8609867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
8619867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long AndLongInt() {
862bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long lhs = 10;
863bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int rhs = 3;
8649867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs & rhs;
8659867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
8669867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
8679867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
8689867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /**
8699867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   * Exercise constant folding on logical or.
8709867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   */
8719867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
872bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.OrIntLong() constant_folding (before)
8739867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const10:i\d+>>  IntConstant 10
8749867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const3L:j\d+>>  LongConstant 3
8759867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<TypeConv:j\d+>> TypeConversion [<<Const10>>]
8769867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Or:j\d+>>       Or [<<TypeConv>>,<<Const3L>>]
8779867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Or>>]
8789867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
879bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.OrIntLong() constant_folding (after)
8809867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const11:j\d+>>  LongConstant 11
8819867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const11>>]
8829867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
883bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.OrIntLong() constant_folding (after)
8849867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       Or
8859867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
8869867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long OrIntLong() {
887bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int lhs = 10;
888bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long rhs = 3;
8899867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs | rhs;
8909867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
8919867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
892bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.OrLongInt() constant_folding (before)
8939867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const10L:j\d+>> LongConstant 10
8949867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const3:i\d+>>   IntConstant 3
8959867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<TypeConv:j\d+>> TypeConversion [<<Const3>>]
89657e863c3739c310380e19252ad5746ff08d219c7David Brazdil  /// CHECK-DAG:     <<Or:j\d+>>       Or [<<TypeConv>>,<<Const10L>>]
8979867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Or>>]
8989867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
899bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.OrLongInt() constant_folding (after)
9009867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const11:j\d+>>  LongConstant 11
9019867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const11>>]
9029867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
903bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.OrLongInt() constant_folding (after)
9049867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       Or
9059867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
9069867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long OrLongInt() {
907bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long lhs = 10;
908bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int rhs = 3;
9099867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs | rhs;
9109867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
9119867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
9129867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
9139867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /**
9149867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   * Exercise constant folding on logical exclusive or.
9159867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain   */
9169867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
917bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.XorIntLong() constant_folding (before)
9189867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const10:i\d+>>  IntConstant 10
9199867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const3L:j\d+>>  LongConstant 3
9209867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<TypeConv:j\d+>> TypeConversion [<<Const10>>]
9219867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Xor:j\d+>>      Xor [<<TypeConv>>,<<Const3L>>]
9229867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Xor>>]
9239867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
924bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.XorIntLong() constant_folding (after)
9259867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const9:j\d+>>   LongConstant 9
9269867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const9>>]
9279867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
928bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.XorIntLong() constant_folding (after)
9299867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       Xor
9309867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
9319867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long XorIntLong() {
932bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int lhs = 10;
933bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long rhs = 3;
9349867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs ^ rhs;
9359867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
9369867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
937bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.XorLongInt() constant_folding (before)
9389867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const10L:j\d+>> LongConstant 10
9399867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const3:i\d+>>   IntConstant 3
9409867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<TypeConv:j\d+>> TypeConversion [<<Const3>>]
94157e863c3739c310380e19252ad5746ff08d219c7David Brazdil  /// CHECK-DAG:     <<Xor:j\d+>>      Xor [<<TypeConv>>,<<Const10L>>]
9429867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Xor>>]
9439867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
944bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.XorLongInt() constant_folding (after)
9459867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const9:j\d+>>   LongConstant 9
9469867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const9>>]
9479867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
948bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.XorLongInt() constant_folding (after)
9499867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       Xor
9509867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
9519867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long XorLongInt() {
952bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long lhs = 10;
953bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int rhs = 3;
9549867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return lhs ^ rhs;
9559867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
9569867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
9579867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
9589867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /**
959b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain   * Exercise constant folding on constant (static) condition.
960ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
961ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
962bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.StaticCondition() constant_folding (before)
963a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const7:i\d+>>  IntConstant 7
964a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const2:i\d+>>  IntConstant 2
965a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Cond:z\d+>>    GreaterThanOrEqual [<<Const7>>,<<Const2>>]
966bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-DAG:                      If [<<Cond>>]
967ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
968bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.StaticCondition() constant_folding (after)
969a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const1:i\d+>>  IntConstant 1
970bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-DAG:                      If [<<Const1>>]
971ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
972bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.StaticCondition() constant_folding (after)
973b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                      GreaterThanOrEqual
974b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
975ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int StaticCondition() {
976ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int a, b, c;
977bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 7;
978bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2;
979ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    if (a < b)
980ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil      c = a + b;
981ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    else
982ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil      c = a - b;
983ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
984ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
985ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
986b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
987ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  /**
9889e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko   * Exercise constant folding on constant (static) condition for null references.
9899e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko   */
9909e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko
9915319d3cca5a9b8e9e3f59421818272b966575172Wojciech Staszkiewicz  /// CHECK-START: int Main.StaticConditionNulls() constant_folding$after_inlining (before)
9929e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko  /// CHECK-DAG:     <<Null:l\d+>>    NullConstant
9939e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko  /// CHECK-DAG:     <<Cond:z\d+>>    NotEqual [<<Null>>,<<Null>>]
99474eb1b264691c4eb399d0858015a7fc13c476ac6David Brazdil  /// CHECK-DAG:                      Select [{{i\d+}},{{i\d+}},<<Cond>>]
9959e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko
9965319d3cca5a9b8e9e3f59421818272b966575172Wojciech Staszkiewicz  /// CHECK-START: int Main.StaticConditionNulls() constant_folding$after_inlining (after)
9979e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko  /// CHECK-DAG:     <<Const0:i\d+>>  IntConstant 0
99874eb1b264691c4eb399d0858015a7fc13c476ac6David Brazdil  /// CHECK-DAG:                      Select [{{i\d+}},{{i\d+}},<<Const0>>]
9999e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko
10005319d3cca5a9b8e9e3f59421818272b966575172Wojciech Staszkiewicz  /// CHECK-START: int Main.StaticConditionNulls() constant_folding$after_inlining (after)
10019e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko  /// CHECK-NOT:                      NotEqual
10029e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko
10039e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko  private static Object getNull() {
10049e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko    return null;
10059e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko  }
10069e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko
10079e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko  public static int StaticConditionNulls() {
10089e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko    Object a = getNull();
10099e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko    Object b = getNull();
10109e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko    return (a == b) ? 5 : 2;
10119e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko  }
10129e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko
10139e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko
10149e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko  /**
1015b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain   * Exercise constant folding on a program with condition
1016b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain   * (i.e. jumps) leading to the creation of many blocks.
1017ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   *
1018ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * The intent of this test is to ensure that all constant expressions
1019ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * are actually evaluated at compile-time, thanks to the reverse
1020ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   * (forward) post-order traversal of the the dominator tree.
1021ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil   */
1022ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
1023bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (before)
1024a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const2:i\d+>>  IntConstant 2
1025a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const5:i\d+>>  IntConstant 5
1026a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Add:i\d+>>     Add [<<Const5>>,<<Const2>>]
1027a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Sub:i\d+>>     Sub [<<Const5>>,<<Const2>>]
1028bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-DAG:     <<Phi:i\d+>>     Phi [<<Add>>,<<Sub>>]
1029a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                      Return [<<Phi>>]
1030ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
1031bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (after)
1032a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const3:i\d+>>  IntConstant 3
1033a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const7:i\d+>>  IntConstant 7
1034bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-DAG:     <<Phi:i\d+>>     Phi [<<Const7>>,<<Const3>>]
1035a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                      Return [<<Phi>>]
1036ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil
1037bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (after)
1038b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                      Add
1039b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                      Sub
1040b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1041ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  public static int JumpsAndConditionals(boolean cond) {
1042ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    int a, b, c;
1043bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    a = 5;
1044bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    b = 2;
1045ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    if (cond)
1046ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil      c = a + b;
1047ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    else
1048ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil      c = a - b;
1049ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil    return c;
1050ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil  }
10514846d13744f07e82571d2882acc823d811ec942dDavid Brazdil
1052b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1053b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  /**
1054b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames   * Test optimizations of arithmetic identities yielding a constant result.
1055b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames   */
10564846d13744f07e82571d2882acc823d811ec942dDavid Brazdil
1057a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.And0(int) constant_folding (before)
1058a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1059a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1060a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<And:i\d+>>      And [<<Arg>>,<<Const0>>]
1061a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<And>>]
10624846d13744f07e82571d2882acc823d811ec942dDavid Brazdil
1063a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.And0(int) constant_folding (after)
1064a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1065a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1066a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
10674846d13744f07e82571d2882acc823d811ec942dDavid Brazdil
1068b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: int Main.And0(int) constant_folding (after)
1069b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       And
1070b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1071b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static int And0(int arg) {
1072b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return arg & 0;
1073b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
10744846d13744f07e82571d2882acc823d811ec942dDavid Brazdil
1075a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.Mul0(long) constant_folding (before)
1076a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:j\d+>>      ParameterValue
1077a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:j\d+>>   LongConstant 0
107857e863c3739c310380e19252ad5746ff08d219c7David Brazdil  /// CHECK-DAG:     <<Mul:j\d+>>      Mul [<<Const0>>,<<Arg>>]
1079a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Mul>>]
10804846d13744f07e82571d2882acc823d811ec942dDavid Brazdil
1081a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.Mul0(long) constant_folding (after)
1082a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:j\d+>>      ParameterValue
1083a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:j\d+>>   LongConstant 0
1084a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
10854846d13744f07e82571d2882acc823d811ec942dDavid Brazdil
1086b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: long Main.Mul0(long) constant_folding (after)
1087b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       Mul
1088b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1089b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static long Mul0(long arg) {
1090b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return arg * 0;
1091b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
10924846d13744f07e82571d2882acc823d811ec942dDavid Brazdil
1093a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.OrAllOnes(int) constant_folding (before)
1094a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1095a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstF:i\d+>>   IntConstant -1
1096a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Or:i\d+>>       Or [<<Arg>>,<<ConstF>>]
1097a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Or>>]
10984846d13744f07e82571d2882acc823d811ec942dDavid Brazdil
1099a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.OrAllOnes(int) constant_folding (after)
1100a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstF:i\d+>>   IntConstant -1
1101a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<ConstF>>]
1102b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1103b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: int Main.OrAllOnes(int) constant_folding (after)
1104b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       Or
1105b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1106b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static int OrAllOnes(int arg) {
1107b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return arg | -1;
1108b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
1109b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1110a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.Rem0(long) constant_folding (before)
1111a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:j\d+>>           ParameterValue
1112a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:j\d+>>        LongConstant 0
1113a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<DivZeroCheck:j\d+>>  DivZeroCheck [<<Arg>>]
1114a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Rem:j\d+>>           Rem [<<Const0>>,<<DivZeroCheck>>]
1115a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                            Return [<<Rem>>]
1116b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1117a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.Rem0(long) constant_folding (after)
1118a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:j\d+>>        LongConstant 0
1119a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                            Return [<<Const0>>]
1120b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1121b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: long Main.Rem0(long) constant_folding (after)
1122b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                            Rem
1123b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1124b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static long Rem0(long arg) {
1125b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return 0 % arg;
1126b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
1127b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1128a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.Rem1(int) constant_folding (before)
1129a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1130a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
1131a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Rem:i\d+>>      Rem [<<Arg>>,<<Const1>>]
1132a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Rem>>]
1133b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1134a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.Rem1(int) constant_folding (after)
1135a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1136a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
1137b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1138b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: int Main.Rem1(int) constant_folding (after)
1139b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       Rem
1140b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1141b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static int Rem1(int arg) {
1142b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return arg % 1;
1143b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
1144b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1145a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.RemN1(long) constant_folding (before)
1146a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:j\d+>>           ParameterValue
1147a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstN1:j\d+>>       LongConstant -1
1148a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<DivZeroCheck:j\d+>>  DivZeroCheck [<<ConstN1>>]
1149a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Rem:j\d+>>           Rem [<<Arg>>,<<DivZeroCheck>>]
1150a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                            Return [<<Rem>>]
1151b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1152a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.RemN1(long) constant_folding (after)
1153a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:j\d+>>        LongConstant 0
1154a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                            Return [<<Const0>>]
1155b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1156b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: long Main.RemN1(long) constant_folding (after)
1157b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                            Rem
1158b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1159b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static long RemN1(long arg) {
1160b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return arg % -1;
1161b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
1162b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1163a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.Shl0(int) constant_folding (before)
1164a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1165a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1166a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Shl:i\d+>>      Shl [<<Const0>>,<<Arg>>]
1167a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Shl>>]
1168b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1169a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.Shl0(int) constant_folding (after)
1170a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1171a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1172a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
1173b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1174b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: int Main.Shl0(int) constant_folding (after)
1175b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       Shl
1176b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1177b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static int Shl0(int arg) {
1178b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return 0 << arg;
1179b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
1180b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
11819867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-START: long Main.ShlLong0WithInt(int) constant_folding (before)
11829867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
11839867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const0L:j\d+>>  LongConstant 0
11849867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Shl:j\d+>>      Shl [<<Const0L>>,<<Arg>>]
11859867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Shl>>]
11869867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
11879867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-START: long Main.ShlLong0WithInt(int) constant_folding (after)
11889867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
11899867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:     <<Const0L:j\d+>>  LongConstant 0
11909867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-DAG:                       Return [<<Const0L>>]
11919867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
11929867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-START: long Main.ShlLong0WithInt(int) constant_folding (after)
11939867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  /// CHECK-NOT:                       Shl
11949867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
11959867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  public static long ShlLong0WithInt(int arg) {
11969867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    long long_zero = 0;
11979867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    return long_zero << arg;
11989867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain  }
11999867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
1200a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.Shr0(int) constant_folding (before)
1201a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1202a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:j\d+>>   LongConstant 0
1203a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Shr:j\d+>>      Shr [<<Const0>>,<<Arg>>]
1204a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Shr>>]
1205b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1206a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.Shr0(int) constant_folding (after)
1207a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1208a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:j\d+>>   LongConstant 0
1209a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
1210b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1211b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: long Main.Shr0(int) constant_folding (after)
1212b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       Shr
1213b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1214b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static long Shr0(int arg) {
1215b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return (long)0 >> arg;
1216b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
1217b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1218a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.SubSameLong(long) constant_folding (before)
1219a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:j\d+>>      ParameterValue
1220a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Sub:j\d+>>      Sub [<<Arg>>,<<Arg>>]
1221a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Sub>>]
1222b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1223a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: long Main.SubSameLong(long) constant_folding (after)
1224a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:j\d+>>      ParameterValue
1225a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:j\d+>>   LongConstant 0
1226a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
1227b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1228b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: long Main.SubSameLong(long) constant_folding (after)
1229b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       Sub
1230b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1231b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static long SubSameLong(long arg) {
1232b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return arg - arg;
1233b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
1234b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1235a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.UShr0(int) constant_folding (before)
1236a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1237a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1238a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<UShr:i\d+>>     UShr [<<Const0>>,<<Arg>>]
1239a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<UShr>>]
1240b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1241a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.UShr0(int) constant_folding (after)
1242a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1243a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1244a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
1245b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1246b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: int Main.UShr0(int) constant_folding (after)
1247b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       UShr
1248b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1249b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static int UShr0(int arg) {
1250b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return 0 >>> arg;
1251b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
1252b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1253a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.XorSameInt(int) constant_folding (before)
1254a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1255a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Xor:i\d+>>      Xor [<<Arg>>,<<Arg>>]
1256a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Xor>>]
1257b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1258a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: int Main.XorSameInt(int) constant_folding (after)
1259a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:i\d+>>      ParameterValue
1260a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1261a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
1262b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1263b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-START: int Main.XorSameInt(int) constant_folding (after)
1264b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       Xor
1265b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1266b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  public static int XorSameInt(int arg) {
1267b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames    return arg ^ arg;
1268b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames  }
1269b2fd7bca70b580921eebf7c45769c39d2dfd8a5aAlexandre Rames
1270a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: boolean Main.CmpFloatGreaterThanNaN(float) constant_folding (before)
1271a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:f\d+>>      ParameterValue
1272a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstNan:f\d+>> FloatConstant nan
1273a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1274a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       IntConstant 1
1275a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Cmp:i\d+>>      Compare [<<Arg>>,<<ConstNan>>]
1276a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Le:z\d+>>       LessThanOrEqual [<<Cmp>>,<<Const0>>]
1277a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       If [<<Le>>]
12783b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain
1279a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: boolean Main.CmpFloatGreaterThanNaN(float) constant_folding (after)
1280a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       ParameterValue
1281a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       FloatConstant nan
1282a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       IntConstant 0
1283a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
1284a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       If [<<Const1>>]
12853b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain
1286a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: boolean Main.CmpFloatGreaterThanNaN(float) constant_folding (after)
1287a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-NOT:                       Compare
1288a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-NOT:                       LessThanOrEqual
12893b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain
12903b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain  public static boolean CmpFloatGreaterThanNaN(float arg) {
12913b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain    return arg > Float.NaN;
12923b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain  }
12933b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain
1294a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: boolean Main.CmpDoubleLessThanNaN(double) constant_folding (before)
1295a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Arg:d\d+>>      ParameterValue
1296a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstNan:d\d+>> DoubleConstant nan
1297a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1298a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       IntConstant 1
1299a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Cmp:i\d+>>      Compare [<<Arg>>,<<ConstNan>>]
1300a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Ge:z\d+>>       GreaterThanOrEqual [<<Cmp>>,<<Const0>>]
1301a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       If [<<Ge>>]
13023b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain
1303a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: boolean Main.CmpDoubleLessThanNaN(double) constant_folding (after)
1304a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       ParameterValue
1305a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       DoubleConstant nan
1306a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       IntConstant 0
1307a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
1308a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       If [<<Const1>>]
13093b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain
1310a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-START: boolean Main.CmpDoubleLessThanNaN(double) constant_folding (after)
1311a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-NOT:                       Compare
1312a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-NOT:                       GreaterThanOrEqual
13133b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain
13143b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain  public static boolean CmpDoubleLessThanNaN(double arg) {
13153b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain    return arg < Double.NaN;
13163b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain  }
13173b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain
1318b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1319b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /**
1320b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain   * Exercise constant folding on type conversions.
1321b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain   */
1322b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1323bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ReturnInt33() constant_folding (before)
1324a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const33:j\d+>>  LongConstant 33
1325a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:i\d+>>  TypeConversion [<<Const33>>]
1326a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1327e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1328bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ReturnInt33() constant_folding (after)
1329a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const33:i\d+>>  IntConstant 33
1330a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const33>>]
1331e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1332bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ReturnInt33() constant_folding (after)
1333b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1334b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1335e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static int ReturnInt33() {
1336bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long imm = 33L;
1337e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (int) imm;
1338e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1339e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1340bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ReturnIntMax() constant_folding (before)
1341a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstMax:f\d+>> FloatConstant 1e+34
1342a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:i\d+>>  TypeConversion [<<ConstMax>>]
1343a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1344e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1345bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ReturnIntMax() constant_folding (after)
1346a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstMax:i\d+>> IntConstant 2147483647
1347a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<ConstMax>>]
1348e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1349bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ReturnIntMax() constant_folding (after)
1350b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1351b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1352e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static int ReturnIntMax() {
1353bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    float imm = 1.0e34f;
1354e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (int) imm;
1355e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1356e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1357bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ReturnInt0() constant_folding (before)
1358a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstNaN:d\d+>> DoubleConstant nan
1359a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:i\d+>>  TypeConversion [<<ConstNaN>>]
1360a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1361e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1362bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ReturnInt0() constant_folding (after)
1363a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
1364a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
1365e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1366bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: int Main.ReturnInt0() constant_folding (after)
1367b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1368b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1369e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static int ReturnInt0() {
1370bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    double imm = Double.NaN;
1371e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (int) imm;
1372e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1373e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1374bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ReturnLong33() constant_folding (before)
1375a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const33:i\d+>>  IntConstant 33
1376a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:j\d+>>  TypeConversion [<<Const33>>]
1377a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1378e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1379bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ReturnLong33() constant_folding (after)
1380a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const33:j\d+>>  LongConstant 33
1381a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const33>>]
1382e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1383bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ReturnLong33() constant_folding (after)
1384b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1385b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1386e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static long ReturnLong33() {
1387bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int imm = 33;
1388e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (long) imm;
1389e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1390e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1391bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ReturnLong34() constant_folding (before)
1392a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const34:f\d+>>  FloatConstant 34
1393a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:j\d+>>  TypeConversion [<<Const34>>]
1394a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1395e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1396bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ReturnLong34() constant_folding (after)
1397a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const34:j\d+>>  LongConstant 34
1398a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const34>>]
1399e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1400bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ReturnLong34() constant_folding (after)
1401b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1402b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1403e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static long ReturnLong34() {
1404bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    float imm = 34.0f;
1405e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (long) imm;
1406e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1407e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1408bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ReturnLong0() constant_folding (before)
1409a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<ConstNaN:d\d+>> DoubleConstant nan
1410a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:j\d+>>  TypeConversion [<<ConstNaN>>]
1411a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1412e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1413bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ReturnLong0() constant_folding (after)
1414a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const0:j\d+>>   LongConstant 0
1415a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const0>>]
1416e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1417bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: long Main.ReturnLong0() constant_folding (after)
1418b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1419b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1420e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static long ReturnLong0() {
1421bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    double imm = -Double.NaN;
1422e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (long) imm;
1423e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1424e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1425bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.ReturnFloat33() constant_folding (before)
1426a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const33:i\d+>>  IntConstant 33
1427a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:f\d+>>  TypeConversion [<<Const33>>]
1428a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1429e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1430bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.ReturnFloat33() constant_folding (after)
1431a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const33:f\d+>>  FloatConstant 33
1432a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const33>>]
1433e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1434bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.ReturnFloat33() constant_folding (after)
1435b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1436b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1437e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static float ReturnFloat33() {
1438bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int imm = 33;
1439e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (float) imm;
1440e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1441e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1442bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.ReturnFloat34() constant_folding (before)
1443a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const34:j\d+>>  LongConstant 34
1444a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:f\d+>>  TypeConversion [<<Const34>>]
1445a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1446e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1447bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.ReturnFloat34() constant_folding (after)
1448a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const34:f\d+>>  FloatConstant 34
1449a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const34>>]
1450e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1451bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.ReturnFloat34() constant_folding (after)
1452b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1453b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1454e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static float ReturnFloat34() {
1455bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long imm = 34L;
1456e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (float) imm;
1457e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1458e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1459bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (before)
1460a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const:d\d+>>    DoubleConstant 99.25
1461a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:f\d+>>  TypeConversion [<<Const>>]
1462a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1463e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1464bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (after)
1465a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const:f\d+>>    FloatConstant 99.25
1466a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const>>]
1467e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1468bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (after)
1469b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1470b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1471e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static float ReturnFloat99P25() {
1472bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    double imm = 99.25;
1473e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (float) imm;
1474e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1475e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1476bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.ReturnDouble33() constant_folding (before)
1477a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const33:i\d+>>  IntConstant 33
1478a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:d\d+>>  TypeConversion [<<Const33>>]
1479a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1480e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1481bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.ReturnDouble33() constant_folding (after)
1482a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const33:d\d+>>  DoubleConstant 33
1483a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const33>>]
1484e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1485e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static double ReturnDouble33() {
1486bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    int imm = 33;
1487e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (double) imm;
1488e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1489e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1490bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.ReturnDouble34() constant_folding (before)
1491a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const34:j\d+>>  LongConstant 34
1492a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:d\d+>>  TypeConversion [<<Const34>>]
1493a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1494e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1495bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.ReturnDouble34() constant_folding (after)
1496a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const34:d\d+>>  DoubleConstant 34
1497a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const34>>]
1498e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1499bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.ReturnDouble34() constant_folding (after)
1500b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1501b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1502e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static double ReturnDouble34() {
1503bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    long imm = 34L;
1504e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (double) imm;
1505e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1506e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1507bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (before)
1508a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const:f\d+>>    FloatConstant 99.25
1509a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Convert:d\d+>>  TypeConversion [<<Const>>]
1510a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Convert>>]
1511e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1512bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (after)
1513a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:     <<Const:d\d+>>    DoubleConstant 99.25
1514a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil  /// CHECK-DAG:                       Return [<<Const>>]
1515e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1516bd44132f680430d44790015b42edffc05797e19cIgor Murashkin  /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (after)
1517b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain  /// CHECK-NOT:                       TypeConversion
1518b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1519e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  public static double ReturnDouble99P25() {
1520bd44132f680430d44790015b42edffc05797e19cIgor Murashkin    float imm = 99.25f;
1521e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell    return (double) imm;
1522e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell  }
1523e82549b14c7def0a45461183964f7e6a34cbb70cMark Mendell
1524b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
152531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  public static void main(String[] args) throws Exception {
1526b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(-42, IntNegation());
1527c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6Roland Levillain    assertLongEquals(-42L, LongNegation());
152831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertFloatEquals(-42F, FloatNegation());
152931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertDoubleEquals(-42D, DoubleNegation());
1530b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1531b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(3, IntAddition1());
1532b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(14, IntAddition2());
1533138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    assertIntEquals(14, smaliIntAddition2());
1534138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    assertIntEquals(14, smaliIntAddition2AddAndMove());
1535b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(3L, LongAddition());
153631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertFloatEquals(3F, FloatAddition());
153731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertDoubleEquals(3D, DoubleAddition());
1538b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1539b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(4, IntSubtraction());
1540b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(4L, LongSubtraction());
154131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertFloatEquals(4F, FloatSubtraction());
154231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertDoubleEquals(4D, DoubleSubtraction());
1543b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1544f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    assertIntEquals(21, IntMultiplication());
1545f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    assertLongEquals(21L, LongMultiplication());
154631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertFloatEquals(21F, FloatMultiplication());
154731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertDoubleEquals(21D, DoubleMultiplication());
1548f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
1549f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    assertIntEquals(2, IntDivision());
1550f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    assertLongEquals(2L, LongDivision());
155131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertFloatEquals(3.2F, FloatDivision());
155231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertDoubleEquals(3.2D, DoubleDivision());
1553f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
1554f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    assertIntEquals(2, IntRemainder());
1555f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain    assertLongEquals(2L, LongRemainder());
155631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertFloatEquals(0.5F, FloatRemainder());
155731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertDoubleEquals(0.5D, DoubleRemainder());
1558f7746ad0063b02f19f3448c5ef4db7e4925d4f16Roland Levillain
15599867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertIntEquals(4, ShlIntLong());
15609867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(12L, ShlLongInt());
15619867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
15629867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertIntEquals(1, ShrIntLong());
15639867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(2L, ShrLongInt());
15649867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
15659867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertIntEquals(1073741822, UShrIntLong());
15669867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(4611686018427387901L, UShrLongInt());
15679867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
15689867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(2, AndIntLong());
15699867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(2, AndLongInt());
15709867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
15719867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(11, OrIntLong());
15729867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(11, OrLongInt());
15739867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
15749867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(9, XorIntLong());
15759867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(9, XorLongInt());
15769867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain
1577b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(5, StaticCondition());
15789e23df5c21bed53ead79e3131b67105abc8871e4Vladimir Marko    assertIntEquals(5, StaticConditionNulls());
1579b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1580b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(7, JumpsAndConditionals(true));
1581b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(3, JumpsAndConditionals(false));
1582138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    assertIntEquals(7, smaliJumpsAndConditionals(true));
1583138b48583fa89e8ced7513f2f6a2548e79273db9Alan Leung    assertIntEquals(3, smaliJumpsAndConditionals(false));
1584b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
15853b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain    int arbitrary = 123456;  // Value chosen arbitrarily.
1586b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1587b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(0, And0(arbitrary));
1588b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(0, Mul0(arbitrary));
1589b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(-1, OrAllOnes(arbitrary));
1590b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(0, Rem0(arbitrary));
1591b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(0, Rem1(arbitrary));
1592b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(0, RemN1(arbitrary));
1593b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(0, Shl0(arbitrary));
15949867bc722f7c41e07a95397bc08b790cd21dc758Roland Levillain    assertLongEquals(0, ShlLong0WithInt(arbitrary));
1595b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(0, Shr0(arbitrary));
1596b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(0, SubSameLong(arbitrary));
1597b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(0, UShr0(arbitrary));
1598b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(0, XorSameInt(arbitrary));
1599b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
16003b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain    assertFalse(CmpFloatGreaterThanNaN(arbitrary));
16013b55ebb22156e1f3496cd1ee4a05e03b4780e579Roland Levillain    assertFalse(CmpDoubleLessThanNaN(arbitrary));
1602b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
160331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    Main main = new Main();
160431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(1, main.smaliCmpLongConstants());
160531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(-1, main.smaliCmpGtFloatConstants());
160631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(-1, main.smaliCmpLtFloatConstants());
160731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(-1, main.smaliCmpGtDoubleConstants());
160831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(-1, main.smaliCmpLtDoubleConstants());
160931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
161031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(0, main.smaliCmpLongSameConstant());
161131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(0, main.smaliCmpGtFloatSameConstant());
161231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(0, main.smaliCmpLtFloatSameConstant());
161331dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(0, main.smaliCmpGtDoubleSameConstant());
161431dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(0, main.smaliCmpLtDoubleSameConstant());
161531dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
161631dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(1, main.smaliCmpGtFloatConstantWithNaN());
161731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(-1, main.smaliCmpLtFloatConstantWithNaN());
161831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(1, main.smaliCmpGtDoubleConstantWithNaN());
161931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    assertIntEquals(-1, main.smaliCmpLtDoubleConstantWithNaN());
162031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
1621b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(33, ReturnInt33());
1622b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(2147483647, ReturnIntMax());
1623b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertIntEquals(0, ReturnInt0());
1624b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1625b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(33, ReturnLong33());
1626b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(34, ReturnLong34());
1627b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertLongEquals(0, ReturnLong0());
1628b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1629b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertFloatEquals(33, ReturnFloat33());
1630b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertFloatEquals(34, ReturnFloat34());
1631b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertFloatEquals(99.25f, ReturnFloat99P25());
1632b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain
1633b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertDoubleEquals(33, ReturnDouble33());
1634b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertDoubleEquals(34, ReturnDouble34());
1635b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bbRoland Levillain    assertDoubleEquals(99.25, ReturnDouble99P25());
16364846d13744f07e82571d2882acc823d811ec942dDavid Brazdil  }
163731dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
163831dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  Main() throws ClassNotFoundException {
163931dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain    testCmp = Class.forName("TestCmp");
164031dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  }
164131dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain
164231dd3d60491148d345c1edae1ccd090a1b67dd2bRoland Levillain  private Class<?> testCmp;
1643ee690a3dd364c025ebc1767d9f84097bb7473eecDavid Brazdil}
1644