• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 public class Main {
18 
main(String args[])19   public static void main(String args[]) {
20     expectEqualsByte((byte)1, booleanToByte(true));
21     expectEqualsShort((short)1, booleanToShort(true));
22     expectEqualsChar((char)1, booleanToChar(true));
23     expectEqualsInt(1, booleanToInt(true));
24     expectEqualsLong(1L, booleanToLong(true));
25 
26     expectEqualsInt(1, longToIntOfBoolean());
27 
28     System.out.println("passed");
29   }
30 
31   /// CHECK-START: byte Main.booleanToByte(boolean) builder (after)
32   /// CHECK:         <<Arg:z\d+>>           ParameterValue
33   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
34   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
35   /// CHECK-DAG:     <<Cond:z\d+>>          Equal [<<Arg>>,<<Zero>>]
36   /// CHECK-DAG:                            If [<<Cond>>]
37   /// CHECK-DAG:     <<Phi:i\d+>>           Phi [<<One>>,<<Zero>>]
38   /// CHECK-DAG:     <<IToS:b\d+>>          TypeConversion [<<Phi>>]
39   /// CHECK-DAG:                            Return [<<IToS>>]
40 
41   /// CHECK-START: byte Main.booleanToByte(boolean) select_generator (after)
42   /// CHECK:         <<Arg:z\d+>>           ParameterValue
43   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
44   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
45   /// CHECK-DAG:     <<Sel:i\d+>>           Select [<<Zero>>,<<One>>,<<Arg>>]
46   /// CHECK-DAG:     <<IToS:b\d+>>          TypeConversion [<<Sel>>]
47   /// CHECK-DAG:                            Return [<<IToS>>]
48 
49   /// CHECK-START: byte Main.booleanToByte(boolean) instruction_simplifier_after_bce (after)
50   /// CHECK:         <<Arg:z\d+>>           ParameterValue
51   /// CHECK-DAG:                            Return [<<Arg>>]
52 
booleanToByte(boolean b)53   static byte booleanToByte(boolean b) {
54     return (byte)(b ? 1 : 0);
55   }
56 
57   /// CHECK-START: short Main.booleanToShort(boolean) builder (after)
58   /// CHECK:         <<Arg:z\d+>>           ParameterValue
59   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
60   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
61   /// CHECK-DAG:     <<Cond:z\d+>>          Equal [<<Arg>>,<<Zero>>]
62   /// CHECK-DAG:                            If [<<Cond>>]
63   /// CHECK-DAG:     <<Phi:i\d+>>           Phi [<<One>>,<<Zero>>]
64   /// CHECK-DAG:     <<IToS:s\d+>>          TypeConversion [<<Phi>>]
65   /// CHECK-DAG:                            Return [<<IToS>>]
66 
67   /// CHECK-START: short Main.booleanToShort(boolean) select_generator (after)
68   /// CHECK:         <<Arg:z\d+>>           ParameterValue
69   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
70   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
71   /// CHECK-DAG:     <<Sel:i\d+>>           Select [<<Zero>>,<<One>>,<<Arg>>]
72   /// CHECK-DAG:     <<IToS:s\d+>>          TypeConversion [<<Sel>>]
73   /// CHECK-DAG:                            Return [<<IToS>>]
74 
75   /// CHECK-START: short Main.booleanToShort(boolean) instruction_simplifier_after_bce (after)
76   /// CHECK:         <<Arg:z\d+>>           ParameterValue
77   /// CHECK-DAG:                            Return [<<Arg>>]
78 
booleanToShort(boolean b)79   static short booleanToShort(boolean b) {
80     return (short)(b ? 1 : 0);
81   }
82 
83   /// CHECK-START: char Main.booleanToChar(boolean) builder (after)
84   /// CHECK:         <<Arg:z\d+>>           ParameterValue
85   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
86   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
87   /// CHECK-DAG:     <<Cond:z\d+>>          Equal [<<Arg>>,<<Zero>>]
88   /// CHECK-DAG:                            If [<<Cond>>]
89   /// CHECK-DAG:     <<Phi:i\d+>>           Phi [<<One>>,<<Zero>>]
90   /// CHECK-DAG:     <<IToC:c\d+>>          TypeConversion [<<Phi>>]
91   /// CHECK-DAG:                            Return [<<IToC>>]
92 
93   /// CHECK-START: char Main.booleanToChar(boolean) select_generator (after)
94   /// CHECK:         <<Arg:z\d+>>           ParameterValue
95   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
96   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
97   /// CHECK-DAG:     <<Sel:i\d+>>           Select [<<Zero>>,<<One>>,<<Arg>>]
98   /// CHECK-DAG:     <<IToC:c\d+>>          TypeConversion [<<Sel>>]
99   /// CHECK-DAG:                            Return [<<IToC>>]
100 
101   /// CHECK-START: char Main.booleanToChar(boolean) instruction_simplifier_after_bce (after)
102   /// CHECK:         <<Arg:z\d+>>           ParameterValue
103   /// CHECK-DAG:                            Return [<<Arg>>]
104 
booleanToChar(boolean b)105   static char booleanToChar(boolean b) {
106     return (char)(b ? 1 : 0);
107   }
108 
109   /// CHECK-START: int Main.booleanToInt(boolean) builder (after)
110   /// CHECK:         <<Arg:z\d+>>           ParameterValue
111   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
112   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
113   /// CHECK-DAG:     <<Cond:z\d+>>          Equal [<<Arg>>,<<Zero>>]
114   /// CHECK-DAG:                            If [<<Cond>>]
115   /// CHECK-DAG:     <<Phi:i\d+>>           Phi [<<One>>,<<Zero>>]
116   /// CHECK-DAG:                            Return [<<Phi>>]
117 
118   /// CHECK-START: int Main.booleanToInt(boolean) select_generator (after)
119   /// CHECK:         <<Arg:z\d+>>           ParameterValue
120   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
121   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
122   /// CHECK-DAG:     <<Sel:i\d+>>           Select [<<Zero>>,<<One>>,<<Arg>>]
123   /// CHECK-DAG:                            Return [<<Sel>>]
124 
125   /// CHECK-START: int Main.booleanToInt(boolean) instruction_simplifier_after_bce (after)
126   /// CHECK:         <<Arg:z\d+>>           ParameterValue
127   /// CHECK-DAG:                            Return [<<Arg>>]
128 
booleanToInt(boolean b)129   static int booleanToInt(boolean b) {
130     return b ? 1 : 0;
131   }
132 
133   /// CHECK-START: long Main.booleanToLong(boolean) builder (after)
134   /// CHECK:         <<Arg:z\d+>>           ParameterValue
135   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
136   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
137   /// CHECK-DAG:     <<Cond:z\d+>>          Equal [<<Arg>>,<<Zero>>]
138   /// CHECK-DAG:                            If [<<Cond>>]
139   /// CHECK-DAG:     <<Phi:i\d+>>           Phi [<<One>>,<<Zero>>]
140   /// CHECK-DAG:     <<IToJ:j\d+>>          TypeConversion [<<Phi>>]
141   /// CHECK-DAG:                            Return [<<IToJ>>]
142 
143   /// CHECK-START: long Main.booleanToLong(boolean) select_generator (after)
144   /// CHECK:         <<Arg:z\d+>>           ParameterValue
145   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
146   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
147   /// CHECK-DAG:     <<Sel:i\d+>>           Select [<<Zero>>,<<One>>,<<Arg>>]
148   /// CHECK-DAG:     <<IToJ:j\d+>>          TypeConversion [<<Sel>>]
149   /// CHECK-DAG:                            Return [<<IToJ>>]
150 
151   /// CHECK-START: long Main.booleanToLong(boolean) instruction_simplifier_after_bce (after)
152   /// CHECK:         <<Arg:z\d+>>           ParameterValue
153   /// CHECK-DAG:     <<ZToJ:j\d+>>          TypeConversion [<<Arg>>]
154   /// CHECK-DAG:                            Return [<<ZToJ>>]
155 
booleanToLong(boolean b)156   static long booleanToLong(boolean b) {
157     return b ? 1 : 0;
158   }
159 
160   /// CHECK-START: int Main.longToIntOfBoolean() builder (after)
161   /// CHECK-DAG:     <<Method:[ij]\d+>>     CurrentMethod
162   /// CHECK-DAG:     <<Sget:z\d+>>          StaticFieldGet
163   /// CHECK-DAG:     <<ZToJ:j\d+>>          InvokeStaticOrDirect [<<Sget>>,<<Method>>]
164   /// CHECK-DAG:     <<JToI:i\d+>>          TypeConversion [<<ZToJ>>]
165   /// CHECK-DAG:                            Return [<<JToI>>]
166 
167   /// CHECK-START: int Main.longToIntOfBoolean() inliner (after)
168   /// CHECK-DAG:     <<Method:[ij]\d+>>     CurrentMethod
169   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
170   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
171   /// CHECK-DAG:     <<Sget:z\d+>>          StaticFieldGet
172   /// CHECK-DAG:                            If [<<Sget>>]
173   /// CHECK-DAG:     <<Phi:i\d+>>           Phi [<<One>>,<<Zero>>]
174   /// CHECK-DAG:     <<IToJ:j\d+>>          TypeConversion [<<Phi>>]
175   /// CHECK-DAG:     <<JToI:i\d+>>          TypeConversion [<<IToJ>>]
176   /// CHECK-DAG:                            Return [<<JToI>>]
177 
178   /// CHECK-START: int Main.longToIntOfBoolean() select_generator (after)
179   /// CHECK-DAG:     <<Method:[ij]\d+>>     CurrentMethod
180   /// CHECK-DAG:     <<Zero:i\d+>>          IntConstant 0
181   /// CHECK-DAG:     <<One:i\d+>>           IntConstant 1
182   /// CHECK-DAG:     <<Sget:z\d+>>          StaticFieldGet
183   /// CHECK-DAG:     <<Sel:i\d+>>           Select [<<Zero>>,<<One>>,<<Sget>>]
184   /// CHECK-DAG:     <<IToJ:j\d+>>          TypeConversion [<<Sel>>]
185   /// CHECK-DAG:     <<JToI:i\d+>>          TypeConversion [<<IToJ>>]
186   /// CHECK-DAG:                            Return [<<JToI>>]
187 
188   /// CHECK-START: int Main.longToIntOfBoolean() instruction_simplifier_after_bce (after)
189   /// CHECK-DAG:     <<Method:[ij]\d+>>     CurrentMethod
190   /// CHECK-DAG:     <<Sget:z\d+>>          StaticFieldGet
191   /// CHECK-DAG:                            Return [<<Sget>>]
192 
longToIntOfBoolean()193   static int longToIntOfBoolean() {
194     long l = booleanToLong(booleanField);
195     return (int) l;
196   }
197 
198 
expectEqualsByte(byte expected, byte result)199   private static void expectEqualsByte(byte expected, byte result) {
200     if (expected != result) {
201       throw new Error("Expected: " + expected + ", found: " + result);
202     }
203   }
204 
expectEqualsShort(short expected, short result)205   private static void expectEqualsShort(short expected, short result) {
206     if (expected != result) {
207       throw new Error("Expected: " + expected + ", found: " + result);
208     }
209   }
210 
expectEqualsChar(char expected, char result)211   private static void expectEqualsChar(char expected, char result) {
212     if (expected != result) {
213       throw new Error("Expected: " + expected + ", found: " + result);
214     }
215   }
216 
expectEqualsInt(int expected, int result)217   private static void expectEqualsInt(int expected, int result) {
218     if (expected != result) {
219       throw new Error("Expected: " + expected + ", found: " + result);
220     }
221   }
222 
expectEqualsLong(long expected, long result)223   private static void expectEqualsLong(long expected, long result) {
224     if (expected != result) {
225       throw new Error("Expected: " + expected + ", found: " + result);
226     }
227   }
228 
229 
230   public static boolean booleanField = true;
231 
232 }
233