1/*
2 * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23package org.graalvm.compiler.jtt.optimize;
24
25import org.junit.Test;
26
27import org.graalvm.compiler.jtt.JTTTest;
28
29/*
30 * Tests constant folding of integer operations.
31 */
32public class Fold_Int01 extends JTTTest {
33
34    public static int test(int arg) {
35        if (arg == 0) {
36            return add();
37        }
38        if (arg == 1) {
39            return sub();
40        }
41        if (arg == 2) {
42            return mul();
43        }
44        if (arg == 3) {
45            return div();
46        }
47        if (arg == 4) {
48            return mod();
49        }
50        if (arg == 5) {
51            return and();
52        }
53        if (arg == 6) {
54            return or();
55        }
56        if (arg == 7) {
57            return xor();
58        }
59        return 0;
60    }
61
62    public static int add() {
63        int x = 3;
64        return x + 7;
65    }
66
67    public static int sub() {
68        int x = 15;
69        return x - 4;
70    }
71
72    public static int mul() {
73        int x = 6;
74        return x * 2;
75    }
76
77    public static int div() {
78        int x = 26;
79        return x / 2;
80    }
81
82    public static int mod() {
83        int x = 29;
84        return x % 15;
85    }
86
87    public static int and() {
88        int x = 31;
89        return x & 15;
90    }
91
92    public static int or() {
93        int x = 16;
94        return x | 16;
95    }
96
97    public static int xor() {
98        int x = 0;
99        return x ^ 17;
100    }
101
102    @Test
103    public void run0() throws Throwable {
104        runTest("test", 0);
105    }
106
107    @Test
108    public void run1() throws Throwable {
109        runTest("test", 1);
110    }
111
112    @Test
113    public void run2() throws Throwable {
114        runTest("test", 2);
115    }
116
117    @Test
118    public void run3() throws Throwable {
119        runTest("test", 3);
120    }
121
122    @Test
123    public void run4() throws Throwable {
124        runTest("test", 4);
125    }
126
127    @Test
128    public void run5() throws Throwable {
129        runTest("test", 5);
130    }
131
132    @Test
133    public void run6() throws Throwable {
134        runTest("test", 6);
135    }
136
137    @Test
138    public void run7() throws Throwable {
139        runTest("test", 7);
140    }
141
142}
143