blob: 7c257372aa3fc52dbd8a3625a4f5adc7f18be773 [file] [log] [blame]
David Brazdilee690a32014-12-01 17:04:16 +00001/*
Roland Levillain6a92a032015-07-23 12:15:01 +01002 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
David Brazdilee690a32014-12-01 17:04:16 +000016
David Brazdil4846d132015-01-15 19:07:08 +000017public class Main {
David Brazdilee690a32014-12-01 17:04:16 +000018
Roland Levillain3b55ebb2015-05-08 13:13:19 +010019 public static void assertFalse(boolean condition) {
20 if (condition) {
21 throw new Error();
22 }
23 }
24
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +000025 public static void assertIntEquals(int expected, int result) {
26 if (expected != result) {
27 throw new Error("Expected: " + expected + ", found: " + result);
28 }
29 }
30
31 public static void assertLongEquals(long expected, long result) {
32 if (expected != result) {
33 throw new Error("Expected: " + expected + ", found: " + result);
34 }
35 }
36
Mark Mendelle82549b2015-05-06 10:55:34 -040037 public static void assertFloatEquals(float expected, float result) {
38 if (expected != result) {
39 throw new Error("Expected: " + expected + ", found: " + result);
40 }
41 }
42
43 public static void assertDoubleEquals(double expected, double result) {
44 if (expected != result) {
45 throw new Error("Expected: " + expected + ", found: " + result);
46 }
47 }
48
Roland Levillainb65eb502015-07-23 12:11:42 +010049
David Brazdilee690a32014-12-01 17:04:16 +000050 /**
Roland Levillainb65eb502015-07-23 12:11:42 +010051 * Exercise constant folding on negation.
David Brazdilee690a32014-12-01 17:04:16 +000052 */
53
David Brazdila06d66a2015-05-28 11:14:54 +010054 /// CHECK-START: int Main.IntNegation() constant_folding (before)
55 /// CHECK-DAG: <<Const42:i\d+>> IntConstant 42
56 /// CHECK-DAG: <<Neg:i\d+>> Neg [<<Const42>>]
57 /// CHECK-DAG: Return [<<Neg>>]
David Brazdilee690a32014-12-01 17:04:16 +000058
David Brazdila06d66a2015-05-28 11:14:54 +010059 /// CHECK-START: int Main.IntNegation() constant_folding (after)
60 /// CHECK-DAG: <<ConstN42:i\d+>> IntConstant -42
61 /// CHECK-DAG: Return [<<ConstN42>>]
David Brazdilee690a32014-12-01 17:04:16 +000062
Roland Levillainb65eb502015-07-23 12:11:42 +010063 /// CHECK-START: int Main.IntNegation() constant_folding (after)
64 /// CHECK-NOT: Neg
65
David Brazdilee690a32014-12-01 17:04:16 +000066 public static int IntNegation() {
67 int x, y;
68 x = 42;
69 y = -x;
70 return y;
71 }
72
Roland Levillainb65eb502015-07-23 12:11:42 +010073
David Brazdilee690a32014-12-01 17:04:16 +000074 /**
Roland Levillainb65eb502015-07-23 12:11:42 +010075 * Exercise constant folding on addition.
David Brazdilee690a32014-12-01 17:04:16 +000076 */
77
David Brazdila06d66a2015-05-28 11:14:54 +010078 /// CHECK-START: int Main.IntAddition1() constant_folding (before)
79 /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
80 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2
81 /// CHECK-DAG: <<Add:i\d+>> Add [<<Const1>>,<<Const2>>]
82 /// CHECK-DAG: Return [<<Add>>]
David Brazdilee690a32014-12-01 17:04:16 +000083
David Brazdila06d66a2015-05-28 11:14:54 +010084 /// CHECK-START: int Main.IntAddition1() constant_folding (after)
85 /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3
86 /// CHECK-DAG: Return [<<Const3>>]
David Brazdilee690a32014-12-01 17:04:16 +000087
Roland Levillainb65eb502015-07-23 12:11:42 +010088 /// CHECK-START: int Main.IntAddition1() constant_folding (after)
89 /// CHECK-NOT: Add
90
David Brazdilee690a32014-12-01 17:04:16 +000091 public static int IntAddition1() {
92 int a, b, c;
93 a = 1;
94 b = 2;
95 c = a + b;
96 return c;
97 }
98
David Brazdila06d66a2015-05-28 11:14:54 +010099 /// CHECK-START: int Main.IntAddition2() constant_folding (before)
100 /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
101 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2
102 /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5
103 /// CHECK-DAG: <<Const6:i\d+>> IntConstant 6
104 /// CHECK-DAG: <<Add1:i\d+>> Add [<<Const1>>,<<Const2>>]
105 /// CHECK-DAG: <<Add2:i\d+>> Add [<<Const5>>,<<Const6>>]
106 /// CHECK-DAG: <<Add3:i\d+>> Add [<<Add1>>,<<Add2>>]
107 /// CHECK-DAG: Return [<<Add3>>]
David Brazdilee690a32014-12-01 17:04:16 +0000108
David Brazdila06d66a2015-05-28 11:14:54 +0100109 /// CHECK-START: int Main.IntAddition2() constant_folding (after)
110 /// CHECK-DAG: <<Const14:i\d+>> IntConstant 14
111 /// CHECK-DAG: Return [<<Const14>>]
David Brazdilee690a32014-12-01 17:04:16 +0000112
Roland Levillainb65eb502015-07-23 12:11:42 +0100113 /// CHECK-START: int Main.IntAddition2() constant_folding (after)
114 /// CHECK-NOT: Add
115
David Brazdilee690a32014-12-01 17:04:16 +0000116 public static int IntAddition2() {
117 int a, b, c;
118 a = 1;
119 b = 2;
120 a += b;
121 b = 5;
122 c = 6;
123 b += c;
124 c = a + b;
125 return c;
126 }
127
Roland Levillainb65eb502015-07-23 12:11:42 +0100128 /// CHECK-START: long Main.LongAddition() constant_folding (before)
129 /// CHECK-DAG: <<Const1:j\d+>> LongConstant 1
130 /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2
131 /// CHECK-DAG: <<Add:j\d+>> Add [<<Const1>>,<<Const2>>]
132 /// CHECK-DAG: Return [<<Add>>]
133
134 /// CHECK-START: long Main.LongAddition() constant_folding (after)
135 /// CHECK-DAG: <<Const3:j\d+>> LongConstant 3
136 /// CHECK-DAG: Return [<<Const3>>]
137
138 /// CHECK-START: long Main.LongAddition() constant_folding (after)
139 /// CHECK-NOT: Add
140
141 public static long LongAddition() {
142 long a, b, c;
143 a = 1L;
144 b = 2L;
145 c = a + b;
146 return c;
147 }
148
149
David Brazdilee690a32014-12-01 17:04:16 +0000150 /**
Roland Levillainb65eb502015-07-23 12:11:42 +0100151 * Exercise constant folding on subtraction.
David Brazdilee690a32014-12-01 17:04:16 +0000152 */
153
David Brazdila06d66a2015-05-28 11:14:54 +0100154 /// CHECK-START: int Main.IntSubtraction() constant_folding (before)
155 /// CHECK-DAG: <<Const6:i\d+>> IntConstant 6
156 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2
157 /// CHECK-DAG: <<Sub:i\d+>> Sub [<<Const6>>,<<Const2>>]
158 /// CHECK-DAG: Return [<<Sub>>]
David Brazdilee690a32014-12-01 17:04:16 +0000159
David Brazdila06d66a2015-05-28 11:14:54 +0100160 /// CHECK-START: int Main.IntSubtraction() constant_folding (after)
161 /// CHECK-DAG: <<Const4:i\d+>> IntConstant 4
162 /// CHECK-DAG: Return [<<Const4>>]
David Brazdilee690a32014-12-01 17:04:16 +0000163
Roland Levillainb65eb502015-07-23 12:11:42 +0100164 /// CHECK-START: int Main.IntSubtraction() constant_folding (after)
165 /// CHECK-NOT: Sub
166
David Brazdilee690a32014-12-01 17:04:16 +0000167 public static int IntSubtraction() {
168 int a, b, c;
David Brazdil4846d132015-01-15 19:07:08 +0000169 a = 6;
David Brazdilee690a32014-12-01 17:04:16 +0000170 b = 2;
171 c = a - b;
172 return c;
173 }
174
David Brazdila06d66a2015-05-28 11:14:54 +0100175 /// CHECK-START: long Main.LongSubtraction() constant_folding (before)
176 /// CHECK-DAG: <<Const6:j\d+>> LongConstant 6
177 /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2
178 /// CHECK-DAG: <<Sub:j\d+>> Sub [<<Const6>>,<<Const2>>]
179 /// CHECK-DAG: Return [<<Sub>>]
David Brazdilee690a32014-12-01 17:04:16 +0000180
David Brazdila06d66a2015-05-28 11:14:54 +0100181 /// CHECK-START: long Main.LongSubtraction() constant_folding (after)
182 /// CHECK-DAG: <<Const4:j\d+>> LongConstant 4
183 /// CHECK-DAG: Return [<<Const4>>]
David Brazdilee690a32014-12-01 17:04:16 +0000184
Roland Levillainb65eb502015-07-23 12:11:42 +0100185 /// CHECK-START: long Main.LongSubtraction() constant_folding (after)
186 /// CHECK-NOT: Sub
187
David Brazdilee690a32014-12-01 17:04:16 +0000188 public static long LongSubtraction() {
189 long a, b, c;
David Brazdil4846d132015-01-15 19:07:08 +0000190 a = 6L;
David Brazdilee690a32014-12-01 17:04:16 +0000191 b = 2L;
192 c = a - b;
193 return c;
194 }
195
Roland Levillainb65eb502015-07-23 12:11:42 +0100196
David Brazdilee690a32014-12-01 17:04:16 +0000197 /**
Roland Levillainb65eb502015-07-23 12:11:42 +0100198 * Exercise constant folding on constant (static) condition.
David Brazdilee690a32014-12-01 17:04:16 +0000199 */
200
David Brazdila06d66a2015-05-28 11:14:54 +0100201 /// CHECK-START: int Main.StaticCondition() constant_folding (before)
202 /// CHECK-DAG: <<Const7:i\d+>> IntConstant 7
203 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2
204 /// CHECK-DAG: <<Cond:z\d+>> GreaterThanOrEqual [<<Const7>>,<<Const2>>]
205 /// CHECK-DAG: If [<<Cond>>]
David Brazdilee690a32014-12-01 17:04:16 +0000206
David Brazdila06d66a2015-05-28 11:14:54 +0100207 /// CHECK-START: int Main.StaticCondition() constant_folding (after)
208 /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
209 /// CHECK-DAG: If [<<Const1>>]
David Brazdilee690a32014-12-01 17:04:16 +0000210
Roland Levillainb65eb502015-07-23 12:11:42 +0100211 /// CHECK-START: int Main.StaticCondition() constant_folding (after)
212 /// CHECK-NOT: GreaterThanOrEqual
213
David Brazdilee690a32014-12-01 17:04:16 +0000214 public static int StaticCondition() {
215 int a, b, c;
David Brazdil4846d132015-01-15 19:07:08 +0000216 a = 7;
David Brazdilee690a32014-12-01 17:04:16 +0000217 b = 2;
218 if (a < b)
219 c = a + b;
220 else
221 c = a - b;
222 return c;
223 }
224
Roland Levillainb65eb502015-07-23 12:11:42 +0100225
David Brazdilee690a32014-12-01 17:04:16 +0000226 /**
Roland Levillainb65eb502015-07-23 12:11:42 +0100227 * Exercise constant folding on a program with condition
228 * (i.e. jumps) leading to the creation of many blocks.
David Brazdilee690a32014-12-01 17:04:16 +0000229 *
230 * The intent of this test is to ensure that all constant expressions
231 * are actually evaluated at compile-time, thanks to the reverse
232 * (forward) post-order traversal of the the dominator tree.
233 */
234
David Brazdila06d66a2015-05-28 11:14:54 +0100235 /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (before)
236 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2
237 /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5
238 /// CHECK-DAG: <<Add:i\d+>> Add [<<Const5>>,<<Const2>>]
239 /// CHECK-DAG: <<Sub:i\d+>> Sub [<<Const5>>,<<Const2>>]
240 /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>]
241 /// CHECK-DAG: Return [<<Phi>>]
David Brazdilee690a32014-12-01 17:04:16 +0000242
David Brazdila06d66a2015-05-28 11:14:54 +0100243 /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (after)
244 /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3
245 /// CHECK-DAG: <<Const7:i\d+>> IntConstant 7
246 /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Const7>>,<<Const3>>]
247 /// CHECK-DAG: Return [<<Phi>>]
David Brazdilee690a32014-12-01 17:04:16 +0000248
Roland Levillainb65eb502015-07-23 12:11:42 +0100249 /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (after)
250 /// CHECK-NOT: Add
251 /// CHECK-NOT: Sub
252
David Brazdilee690a32014-12-01 17:04:16 +0000253 public static int JumpsAndConditionals(boolean cond) {
254 int a, b, c;
255 a = 5;
256 b = 2;
257 if (cond)
258 c = a + b;
259 else
260 c = a - b;
261 return c;
262 }
David Brazdil4846d132015-01-15 19:07:08 +0000263
Roland Levillainb65eb502015-07-23 12:11:42 +0100264
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000265 /**
266 * Test optimizations of arithmetic identities yielding a constant result.
267 */
268
David Brazdila06d66a2015-05-28 11:14:54 +0100269 /// CHECK-START: int Main.And0(int) constant_folding (before)
270 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
271 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
272 /// CHECK-DAG: <<And:i\d+>> And [<<Arg>>,<<Const0>>]
273 /// CHECK-DAG: Return [<<And>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000274
David Brazdila06d66a2015-05-28 11:14:54 +0100275 /// CHECK-START: int Main.And0(int) constant_folding (after)
276 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
277 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100278 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000279
Roland Levillainb65eb502015-07-23 12:11:42 +0100280 /// CHECK-START: int Main.And0(int) constant_folding (after)
281 /// CHECK-NOT: And
282
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000283 public static int And0(int arg) {
284 return arg & 0;
285 }
286
David Brazdila06d66a2015-05-28 11:14:54 +0100287 /// CHECK-START: long Main.Mul0(long) constant_folding (before)
288 /// CHECK-DAG: <<Arg:j\d+>> ParameterValue
289 /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
290 /// CHECK-DAG: <<Mul:j\d+>> Mul [<<Arg>>,<<Const0>>]
291 /// CHECK-DAG: Return [<<Mul>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000292
David Brazdila06d66a2015-05-28 11:14:54 +0100293 /// CHECK-START: long Main.Mul0(long) constant_folding (after)
294 /// CHECK-DAG: <<Arg:j\d+>> ParameterValue
295 /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100296 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000297
Roland Levillainb65eb502015-07-23 12:11:42 +0100298 /// CHECK-START: long Main.Mul0(long) constant_folding (after)
299 /// CHECK-NOT: Mul
300
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000301 public static long Mul0(long arg) {
302 return arg * 0;
303 }
304
David Brazdila06d66a2015-05-28 11:14:54 +0100305 /// CHECK-START: int Main.OrAllOnes(int) constant_folding (before)
306 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
307 /// CHECK-DAG: <<ConstF:i\d+>> IntConstant -1
308 /// CHECK-DAG: <<Or:i\d+>> Or [<<Arg>>,<<ConstF>>]
309 /// CHECK-DAG: Return [<<Or>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000310
David Brazdila06d66a2015-05-28 11:14:54 +0100311 /// CHECK-START: int Main.OrAllOnes(int) constant_folding (after)
312 /// CHECK-DAG: <<ConstF:i\d+>> IntConstant -1
David Brazdila06d66a2015-05-28 11:14:54 +0100313 /// CHECK-DAG: Return [<<ConstF>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000314
Roland Levillainb65eb502015-07-23 12:11:42 +0100315 /// CHECK-START: int Main.OrAllOnes(int) constant_folding (after)
316 /// CHECK-NOT: Or
317
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000318 public static int OrAllOnes(int arg) {
319 return arg | -1;
320 }
321
David Brazdila06d66a2015-05-28 11:14:54 +0100322 /// CHECK-START: long Main.Rem0(long) constant_folding (before)
323 /// CHECK-DAG: <<Arg:j\d+>> ParameterValue
324 /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
325 /// CHECK-DAG: <<DivZeroCheck:j\d+>> DivZeroCheck [<<Arg>>]
326 /// CHECK-DAG: <<Rem:j\d+>> Rem [<<Const0>>,<<DivZeroCheck>>]
327 /// CHECK-DAG: Return [<<Rem>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000328
David Brazdila06d66a2015-05-28 11:14:54 +0100329 /// CHECK-START: long Main.Rem0(long) constant_folding (after)
330 /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100331 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000332
Roland Levillainb65eb502015-07-23 12:11:42 +0100333 /// CHECK-START: long Main.Rem0(long) constant_folding (after)
334 /// CHECK-NOT: Rem
335
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000336 public static long Rem0(long arg) {
337 return 0 % arg;
338 }
339
David Brazdila06d66a2015-05-28 11:14:54 +0100340 /// CHECK-START: int Main.Rem1(int) constant_folding (before)
341 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
342 /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
343 /// CHECK-DAG: <<Rem:i\d+>> Rem [<<Arg>>,<<Const1>>]
344 /// CHECK-DAG: Return [<<Rem>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000345
David Brazdila06d66a2015-05-28 11:14:54 +0100346 /// CHECK-START: int Main.Rem1(int) constant_folding (after)
347 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100348 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000349
Roland Levillainb65eb502015-07-23 12:11:42 +0100350 /// CHECK-START: int Main.Rem1(int) constant_folding (after)
351 /// CHECK-NOT: Rem
352
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000353 public static int Rem1(int arg) {
354 return arg % 1;
355 }
356
David Brazdila06d66a2015-05-28 11:14:54 +0100357 /// CHECK-START: long Main.RemN1(long) constant_folding (before)
358 /// CHECK-DAG: <<Arg:j\d+>> ParameterValue
359 /// CHECK-DAG: <<ConstN1:j\d+>> LongConstant -1
360 /// CHECK-DAG: <<DivZeroCheck:j\d+>> DivZeroCheck [<<ConstN1>>]
361 /// CHECK-DAG: <<Rem:j\d+>> Rem [<<Arg>>,<<DivZeroCheck>>]
362 /// CHECK-DAG: Return [<<Rem>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000363
David Brazdila06d66a2015-05-28 11:14:54 +0100364 /// CHECK-START: long Main.RemN1(long) constant_folding (after)
365 /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100366 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000367
Roland Levillainb65eb502015-07-23 12:11:42 +0100368 /// CHECK-START: long Main.RemN1(long) constant_folding (after)
369 /// CHECK-NOT: Rem
370
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000371 public static long RemN1(long arg) {
372 return arg % -1;
373 }
374
David Brazdila06d66a2015-05-28 11:14:54 +0100375 /// CHECK-START: int Main.Shl0(int) constant_folding (before)
376 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
377 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
378 /// CHECK-DAG: <<Shl:i\d+>> Shl [<<Const0>>,<<Arg>>]
379 /// CHECK-DAG: Return [<<Shl>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000380
David Brazdila06d66a2015-05-28 11:14:54 +0100381 /// CHECK-START: int Main.Shl0(int) constant_folding (after)
382 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
383 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100384 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000385
Roland Levillainb65eb502015-07-23 12:11:42 +0100386 /// CHECK-START: int Main.Shl0(int) constant_folding (after)
387 /// CHECK-NOT: Shl
388
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000389 public static int Shl0(int arg) {
390 return 0 << arg;
391 }
392
David Brazdila06d66a2015-05-28 11:14:54 +0100393 /// CHECK-START: long Main.Shr0(int) constant_folding (before)
394 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
395 /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
396 /// CHECK-DAG: <<Shr:j\d+>> Shr [<<Const0>>,<<Arg>>]
397 /// CHECK-DAG: Return [<<Shr>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000398
David Brazdila06d66a2015-05-28 11:14:54 +0100399 /// CHECK-START: long Main.Shr0(int) constant_folding (after)
400 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
401 /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100402 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000403
Roland Levillainb65eb502015-07-23 12:11:42 +0100404 /// CHECK-START: long Main.Shr0(int) constant_folding (after)
405 /// CHECK-NOT: Shr
406
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000407 public static long Shr0(int arg) {
408 return (long)0 >> arg;
409 }
410
David Brazdila06d66a2015-05-28 11:14:54 +0100411 /// CHECK-START: long Main.SubSameLong(long) constant_folding (before)
412 /// CHECK-DAG: <<Arg:j\d+>> ParameterValue
413 /// CHECK-DAG: <<Sub:j\d+>> Sub [<<Arg>>,<<Arg>>]
414 /// CHECK-DAG: Return [<<Sub>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000415
David Brazdila06d66a2015-05-28 11:14:54 +0100416 /// CHECK-START: long Main.SubSameLong(long) constant_folding (after)
417 /// CHECK-DAG: <<Arg:j\d+>> ParameterValue
418 /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100419 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000420
Roland Levillainb65eb502015-07-23 12:11:42 +0100421 /// CHECK-START: long Main.SubSameLong(long) constant_folding (after)
422 /// CHECK-NOT: Sub
423
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000424 public static long SubSameLong(long arg) {
425 return arg - arg;
426 }
427
David Brazdila06d66a2015-05-28 11:14:54 +0100428 /// CHECK-START: int Main.UShr0(int) constant_folding (before)
429 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
430 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
431 /// CHECK-DAG: <<UShr:i\d+>> UShr [<<Const0>>,<<Arg>>]
432 /// CHECK-DAG: Return [<<UShr>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000433
David Brazdila06d66a2015-05-28 11:14:54 +0100434 /// CHECK-START: int Main.UShr0(int) constant_folding (after)
435 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
436 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100437 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000438
Roland Levillainb65eb502015-07-23 12:11:42 +0100439 /// CHECK-START: int Main.UShr0(int) constant_folding (after)
440 /// CHECK-NOT: UShr
441
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000442 public static int UShr0(int arg) {
443 return 0 >>> arg;
444 }
445
David Brazdila06d66a2015-05-28 11:14:54 +0100446 /// CHECK-START: int Main.XorSameInt(int) constant_folding (before)
447 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
448 /// CHECK-DAG: <<Xor:i\d+>> Xor [<<Arg>>,<<Arg>>]
449 /// CHECK-DAG: Return [<<Xor>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000450
David Brazdila06d66a2015-05-28 11:14:54 +0100451 /// CHECK-START: int Main.XorSameInt(int) constant_folding (after)
452 /// CHECK-DAG: <<Arg:i\d+>> ParameterValue
453 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
David Brazdila06d66a2015-05-28 11:14:54 +0100454 /// CHECK-DAG: Return [<<Const0>>]
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000455
Roland Levillainb65eb502015-07-23 12:11:42 +0100456 /// CHECK-START: int Main.XorSameInt(int) constant_folding (after)
457 /// CHECK-NOT: Xor
458
Alexandre Ramesb2fd7bc2015-03-11 16:48:16 +0000459 public static int XorSameInt(int arg) {
460 return arg ^ arg;
461 }
462
David Brazdila06d66a2015-05-28 11:14:54 +0100463 /// CHECK-START: boolean Main.CmpFloatGreaterThanNaN(float) constant_folding (before)
464 /// CHECK-DAG: <<Arg:f\d+>> ParameterValue
465 /// CHECK-DAG: <<ConstNan:f\d+>> FloatConstant nan
466 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
467 /// CHECK-DAG: IntConstant 1
468 /// CHECK-DAG: <<Cmp:i\d+>> Compare [<<Arg>>,<<ConstNan>>]
469 /// CHECK-DAG: <<Le:z\d+>> LessThanOrEqual [<<Cmp>>,<<Const0>>]
470 /// CHECK-DAG: If [<<Le>>]
Roland Levillain3b55ebb2015-05-08 13:13:19 +0100471
David Brazdila06d66a2015-05-28 11:14:54 +0100472 /// CHECK-START: boolean Main.CmpFloatGreaterThanNaN(float) constant_folding (after)
473 /// CHECK-DAG: ParameterValue
474 /// CHECK-DAG: FloatConstant nan
475 /// CHECK-DAG: IntConstant 0
476 /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
477 /// CHECK-DAG: If [<<Const1>>]
Roland Levillain3b55ebb2015-05-08 13:13:19 +0100478
David Brazdila06d66a2015-05-28 11:14:54 +0100479 /// CHECK-START: boolean Main.CmpFloatGreaterThanNaN(float) constant_folding (after)
480 /// CHECK-NOT: Compare
481 /// CHECK-NOT: LessThanOrEqual
Roland Levillain3b55ebb2015-05-08 13:13:19 +0100482
483 public static boolean CmpFloatGreaterThanNaN(float arg) {
484 return arg > Float.NaN;
485 }
486
David Brazdila06d66a2015-05-28 11:14:54 +0100487 /// CHECK-START: boolean Main.CmpDoubleLessThanNaN(double) constant_folding (before)
488 /// CHECK-DAG: <<Arg:d\d+>> ParameterValue
489 /// CHECK-DAG: <<ConstNan:d\d+>> DoubleConstant nan
490 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
491 /// CHECK-DAG: IntConstant 1
492 /// CHECK-DAG: <<Cmp:i\d+>> Compare [<<Arg>>,<<ConstNan>>]
493 /// CHECK-DAG: <<Ge:z\d+>> GreaterThanOrEqual [<<Cmp>>,<<Const0>>]
494 /// CHECK-DAG: If [<<Ge>>]
Roland Levillain3b55ebb2015-05-08 13:13:19 +0100495
David Brazdila06d66a2015-05-28 11:14:54 +0100496 /// CHECK-START: boolean Main.CmpDoubleLessThanNaN(double) constant_folding (after)
497 /// CHECK-DAG: ParameterValue
498 /// CHECK-DAG: DoubleConstant nan
499 /// CHECK-DAG: IntConstant 0
500 /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
501 /// CHECK-DAG: If [<<Const1>>]
Roland Levillain3b55ebb2015-05-08 13:13:19 +0100502
David Brazdila06d66a2015-05-28 11:14:54 +0100503 /// CHECK-START: boolean Main.CmpDoubleLessThanNaN(double) constant_folding (after)
504 /// CHECK-NOT: Compare
505 /// CHECK-NOT: GreaterThanOrEqual
Roland Levillain3b55ebb2015-05-08 13:13:19 +0100506
507 public static boolean CmpDoubleLessThanNaN(double arg) {
508 return arg < Double.NaN;
509 }
510
Roland Levillainb65eb502015-07-23 12:11:42 +0100511
512 /**
513 * Exercise constant folding on type conversions.
514 */
515
David Brazdila06d66a2015-05-28 11:14:54 +0100516 /// CHECK-START: int Main.ReturnInt33() constant_folding (before)
517 /// CHECK-DAG: <<Const33:j\d+>> LongConstant 33
518 /// CHECK-DAG: <<Convert:i\d+>> TypeConversion [<<Const33>>]
519 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400520
David Brazdila06d66a2015-05-28 11:14:54 +0100521 /// CHECK-START: int Main.ReturnInt33() constant_folding (after)
522 /// CHECK-DAG: <<Const33:i\d+>> IntConstant 33
523 /// CHECK-DAG: Return [<<Const33>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400524
Roland Levillainb65eb502015-07-23 12:11:42 +0100525 /// CHECK-START: int Main.ReturnInt33() constant_folding (after)
526 /// CHECK-NOT: TypeConversion
527
Mark Mendelle82549b2015-05-06 10:55:34 -0400528 public static int ReturnInt33() {
529 long imm = 33L;
530 return (int) imm;
531 }
532
David Brazdila06d66a2015-05-28 11:14:54 +0100533 /// CHECK-START: int Main.ReturnIntMax() constant_folding (before)
534 /// CHECK-DAG: <<ConstMax:f\d+>> FloatConstant 1e+34
535 /// CHECK-DAG: <<Convert:i\d+>> TypeConversion [<<ConstMax>>]
536 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400537
David Brazdila06d66a2015-05-28 11:14:54 +0100538 /// CHECK-START: int Main.ReturnIntMax() constant_folding (after)
539 /// CHECK-DAG: <<ConstMax:i\d+>> IntConstant 2147483647
540 /// CHECK-DAG: Return [<<ConstMax>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400541
Roland Levillainb65eb502015-07-23 12:11:42 +0100542 /// CHECK-START: int Main.ReturnIntMax() constant_folding (after)
543 /// CHECK-NOT: TypeConversion
544
Mark Mendelle82549b2015-05-06 10:55:34 -0400545 public static int ReturnIntMax() {
546 float imm = 1.0e34f;
547 return (int) imm;
548 }
549
David Brazdila06d66a2015-05-28 11:14:54 +0100550 /// CHECK-START: int Main.ReturnInt0() constant_folding (before)
551 /// CHECK-DAG: <<ConstNaN:d\d+>> DoubleConstant nan
552 /// CHECK-DAG: <<Convert:i\d+>> TypeConversion [<<ConstNaN>>]
553 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400554
David Brazdila06d66a2015-05-28 11:14:54 +0100555 /// CHECK-START: int Main.ReturnInt0() constant_folding (after)
556 /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
557 /// CHECK-DAG: Return [<<Const0>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400558
Roland Levillainb65eb502015-07-23 12:11:42 +0100559 /// CHECK-START: int Main.ReturnInt0() constant_folding (after)
560 /// CHECK-NOT: TypeConversion
561
Mark Mendelle82549b2015-05-06 10:55:34 -0400562 public static int ReturnInt0() {
563 double imm = Double.NaN;
564 return (int) imm;
565 }
566
David Brazdila06d66a2015-05-28 11:14:54 +0100567 /// CHECK-START: long Main.ReturnLong33() constant_folding (before)
568 /// CHECK-DAG: <<Const33:i\d+>> IntConstant 33
569 /// CHECK-DAG: <<Convert:j\d+>> TypeConversion [<<Const33>>]
570 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400571
David Brazdila06d66a2015-05-28 11:14:54 +0100572 /// CHECK-START: long Main.ReturnLong33() constant_folding (after)
573 /// CHECK-DAG: <<Const33:j\d+>> LongConstant 33
574 /// CHECK-DAG: Return [<<Const33>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400575
Roland Levillainb65eb502015-07-23 12:11:42 +0100576 /// CHECK-START: long Main.ReturnLong33() constant_folding (after)
577 /// CHECK-NOT: TypeConversion
578
Mark Mendelle82549b2015-05-06 10:55:34 -0400579 public static long ReturnLong33() {
580 int imm = 33;
581 return (long) imm;
582 }
583
David Brazdila06d66a2015-05-28 11:14:54 +0100584 /// CHECK-START: long Main.ReturnLong34() constant_folding (before)
585 /// CHECK-DAG: <<Const34:f\d+>> FloatConstant 34
586 /// CHECK-DAG: <<Convert:j\d+>> TypeConversion [<<Const34>>]
587 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400588
David Brazdila06d66a2015-05-28 11:14:54 +0100589 /// CHECK-START: long Main.ReturnLong34() constant_folding (after)
590 /// CHECK-DAG: <<Const34:j\d+>> LongConstant 34
591 /// CHECK-DAG: Return [<<Const34>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400592
Roland Levillainb65eb502015-07-23 12:11:42 +0100593 /// CHECK-START: long Main.ReturnLong34() constant_folding (after)
594 /// CHECK-NOT: TypeConversion
595
Mark Mendelle82549b2015-05-06 10:55:34 -0400596 public static long ReturnLong34() {
597 float imm = 34.0f;
598 return (long) imm;
599 }
600
David Brazdila06d66a2015-05-28 11:14:54 +0100601 /// CHECK-START: long Main.ReturnLong0() constant_folding (before)
602 /// CHECK-DAG: <<ConstNaN:d\d+>> DoubleConstant nan
603 /// CHECK-DAG: <<Convert:j\d+>> TypeConversion [<<ConstNaN>>]
604 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400605
David Brazdila06d66a2015-05-28 11:14:54 +0100606 /// CHECK-START: long Main.ReturnLong0() constant_folding (after)
607 /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
608 /// CHECK-DAG: Return [<<Const0>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400609
Roland Levillainb65eb502015-07-23 12:11:42 +0100610 /// CHECK-START: long Main.ReturnLong0() constant_folding (after)
611 /// CHECK-NOT: TypeConversion
612
Mark Mendelle82549b2015-05-06 10:55:34 -0400613 public static long ReturnLong0() {
614 double imm = -Double.NaN;
615 return (long) imm;
616 }
617
David Brazdila06d66a2015-05-28 11:14:54 +0100618 /// CHECK-START: float Main.ReturnFloat33() constant_folding (before)
619 /// CHECK-DAG: <<Const33:i\d+>> IntConstant 33
620 /// CHECK-DAG: <<Convert:f\d+>> TypeConversion [<<Const33>>]
621 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400622
David Brazdila06d66a2015-05-28 11:14:54 +0100623 /// CHECK-START: float Main.ReturnFloat33() constant_folding (after)
624 /// CHECK-DAG: <<Const33:f\d+>> FloatConstant 33
625 /// CHECK-DAG: Return [<<Const33>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400626
Roland Levillainb65eb502015-07-23 12:11:42 +0100627 /// CHECK-START: float Main.ReturnFloat33() constant_folding (after)
628 /// CHECK-NOT: TypeConversion
629
Mark Mendelle82549b2015-05-06 10:55:34 -0400630 public static float ReturnFloat33() {
631 int imm = 33;
632 return (float) imm;
633 }
634
David Brazdila06d66a2015-05-28 11:14:54 +0100635 /// CHECK-START: float Main.ReturnFloat34() constant_folding (before)
636 /// CHECK-DAG: <<Const34:j\d+>> LongConstant 34
637 /// CHECK-DAG: <<Convert:f\d+>> TypeConversion [<<Const34>>]
638 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400639
David Brazdila06d66a2015-05-28 11:14:54 +0100640 /// CHECK-START: float Main.ReturnFloat34() constant_folding (after)
641 /// CHECK-DAG: <<Const34:f\d+>> FloatConstant 34
642 /// CHECK-DAG: Return [<<Const34>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400643
Roland Levillainb65eb502015-07-23 12:11:42 +0100644 /// CHECK-START: float Main.ReturnFloat34() constant_folding (after)
645 /// CHECK-NOT: TypeConversion
646
Mark Mendelle82549b2015-05-06 10:55:34 -0400647 public static float ReturnFloat34() {
648 long imm = 34L;
649 return (float) imm;
650 }
651
David Brazdila06d66a2015-05-28 11:14:54 +0100652 /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (before)
653 /// CHECK-DAG: <<Const:d\d+>> DoubleConstant 99.25
654 /// CHECK-DAG: <<Convert:f\d+>> TypeConversion [<<Const>>]
655 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400656
David Brazdila06d66a2015-05-28 11:14:54 +0100657 /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (after)
658 /// CHECK-DAG: <<Const:f\d+>> FloatConstant 99.25
659 /// CHECK-DAG: Return [<<Const>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400660
Roland Levillainb65eb502015-07-23 12:11:42 +0100661 /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (after)
662 /// CHECK-NOT: TypeConversion
663
Mark Mendelle82549b2015-05-06 10:55:34 -0400664 public static float ReturnFloat99P25() {
665 double imm = 99.25;
666 return (float) imm;
667 }
668
David Brazdila06d66a2015-05-28 11:14:54 +0100669 /// CHECK-START: double Main.ReturnDouble33() constant_folding (before)
670 /// CHECK-DAG: <<Const33:i\d+>> IntConstant 33
671 /// CHECK-DAG: <<Convert:d\d+>> TypeConversion [<<Const33>>]
672 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400673
David Brazdila06d66a2015-05-28 11:14:54 +0100674 /// CHECK-START: double Main.ReturnDouble33() constant_folding (after)
675 /// CHECK-DAG: <<Const33:d\d+>> DoubleConstant 33
676 /// CHECK-DAG: Return [<<Const33>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400677
678 public static double ReturnDouble33() {
679 int imm = 33;
680 return (double) imm;
681 }
682
David Brazdila06d66a2015-05-28 11:14:54 +0100683 /// CHECK-START: double Main.ReturnDouble34() constant_folding (before)
684 /// CHECK-DAG: <<Const34:j\d+>> LongConstant 34
685 /// CHECK-DAG: <<Convert:d\d+>> TypeConversion [<<Const34>>]
686 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400687
David Brazdila06d66a2015-05-28 11:14:54 +0100688 /// CHECK-START: double Main.ReturnDouble34() constant_folding (after)
689 /// CHECK-DAG: <<Const34:d\d+>> DoubleConstant 34
690 /// CHECK-DAG: Return [<<Const34>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400691
Roland Levillainb65eb502015-07-23 12:11:42 +0100692 /// CHECK-START: double Main.ReturnDouble34() constant_folding (after)
693 /// CHECK-NOT: TypeConversion
694
Mark Mendelle82549b2015-05-06 10:55:34 -0400695 public static double ReturnDouble34() {
696 long imm = 34L;
697 return (double) imm;
698 }
699
David Brazdila06d66a2015-05-28 11:14:54 +0100700 /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (before)
701 /// CHECK-DAG: <<Const:f\d+>> FloatConstant 99.25
702 /// CHECK-DAG: <<Convert:d\d+>> TypeConversion [<<Const>>]
703 /// CHECK-DAG: Return [<<Convert>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400704
David Brazdila06d66a2015-05-28 11:14:54 +0100705 /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (after)
706 /// CHECK-DAG: <<Const:d\d+>> DoubleConstant 99.25
707 /// CHECK-DAG: Return [<<Const>>]
Mark Mendelle82549b2015-05-06 10:55:34 -0400708
Roland Levillainb65eb502015-07-23 12:11:42 +0100709 /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (after)
710 /// CHECK-NOT: TypeConversion
711
Mark Mendelle82549b2015-05-06 10:55:34 -0400712 public static double ReturnDouble99P25() {
713 float imm = 99.25f;
714 return (double) imm;
715 }
716
Roland Levillainb65eb502015-07-23 12:11:42 +0100717
David Brazdil4846d132015-01-15 19:07:08 +0000718 public static void main(String[] args) {
Roland Levillainb65eb502015-07-23 12:11:42 +0100719 assertIntEquals(-42, IntNegation());
720
721 assertIntEquals(3, IntAddition1());
722 assertIntEquals(14, IntAddition2());
723 assertLongEquals(3L, LongAddition());
724
725 assertIntEquals(4, IntSubtraction());
726 assertLongEquals(4L, LongSubtraction());
727
728 assertIntEquals(5, StaticCondition());
729
730 assertIntEquals(7, JumpsAndConditionals(true));
731 assertIntEquals(3, JumpsAndConditionals(false));
732
Roland Levillain3b55ebb2015-05-08 13:13:19 +0100733 int arbitrary = 123456; // Value chosen arbitrarily.
Roland Levillainb65eb502015-07-23 12:11:42 +0100734
735 assertIntEquals(0, And0(arbitrary));
736 assertLongEquals(0, Mul0(arbitrary));
737 assertIntEquals(-1, OrAllOnes(arbitrary));
738 assertLongEquals(0, Rem0(arbitrary));
739 assertIntEquals(0, Rem1(arbitrary));
740 assertLongEquals(0, RemN1(arbitrary));
741 assertIntEquals(0, Shl0(arbitrary));
742 assertLongEquals(0, Shr0(arbitrary));
743 assertLongEquals(0, SubSameLong(arbitrary));
744 assertIntEquals(0, UShr0(arbitrary));
745 assertIntEquals(0, XorSameInt(arbitrary));
746
Roland Levillain3b55ebb2015-05-08 13:13:19 +0100747 assertFalse(CmpFloatGreaterThanNaN(arbitrary));
748 assertFalse(CmpDoubleLessThanNaN(arbitrary));
Roland Levillainb65eb502015-07-23 12:11:42 +0100749
750 assertIntEquals(33, ReturnInt33());
751 assertIntEquals(2147483647, ReturnIntMax());
752 assertIntEquals(0, ReturnInt0());
753
754 assertLongEquals(33, ReturnLong33());
755 assertLongEquals(34, ReturnLong34());
756 assertLongEquals(0, ReturnLong0());
757
758 assertFloatEquals(33, ReturnFloat33());
759 assertFloatEquals(34, ReturnFloat34());
760 assertFloatEquals(99.25f, ReturnFloat99P25());
761
762 assertDoubleEquals(33, ReturnDouble33());
763 assertDoubleEquals(34, ReturnDouble34());
764 assertDoubleEquals(99.25, ReturnDouble99P25());
David Brazdil4846d132015-01-15 19:07:08 +0000765 }
David Brazdilee690a32014-12-01 17:04:16 +0000766}