xref: /aosp_15_r20/art/test/458-checker-riscv64-shift-add/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1 /*
2  * Copyright (C) 2024 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 {
assertIntEquals(int expected, int result)18   public static void assertIntEquals(int expected, int result) {
19     if (expected != result) {
20       throw new Error("Expected: " + expected + ", found: " + result);
21     }
22   }
23 
assertLongEquals(long expected, long result)24   public static void assertLongEquals(long expected, long result) {
25     if (expected != result) {
26       throw new Error("Expected: " + expected + ", found: " + result);
27     }
28   }
29 
30   /// CHECK-START-RISCV64: int Main.$noinline$intRiscvShift1Add(int, int) instruction_simplifier_riscv64 (before)
31   /// CHECK:          <<A:i\d+>>        ParameterValue
32   /// CHECK:          <<B:i\d+>>        ParameterValue
33   /// CHECK:          <<One:i\d+>>      IntConstant 1
34   /// CHECK:          <<Shift:i\d+>>    Shl [<<A>>,<<One>>]
35   /// CHECK:          <<Add:i\d+>>      Add [<<B>>,<<Shift>>]
36   /// CHECK:          <<Return:v\d+>>   Return [<<Add>>]
37 
38   /// CHECK-START-RISCV64: int Main.$noinline$intRiscvShift1Add(int, int) instruction_simplifier_riscv64 (after)
39   /// CHECK-NOT:                        Riscv64ShiftAdd
40 
$noinline$intRiscvShift1Add(int a, int b)41   public static int $noinline$intRiscvShift1Add(int a, int b) {
42     return (a << 1) + b;
43   }
44 
45   /// CHECK-START-RISCV64: long Main.$noinline$longIntRiscvShift1Add(long, int) instruction_simplifier_riscv64 (before)
46   /// CHECK:          <<A:j\d+>>        ParameterValue
47   /// CHECK:          <<B:i\d+>>        ParameterValue
48   /// CHECK:          <<One:i\d+>>      IntConstant 1
49   /// CHECK:          <<Shift:j\d+>>    Shl [<<A>>,<<One>>]
50   /// CHECK:          <<Convert:j\d+>>  TypeConversion [<<B>>]
51   /// CHECK:          <<Add:j\d+>>      Add [<<Shift>>,<<Convert>>]
52   /// CHECK:          <<Return:v\d+>>   Return [<<Add>>]
53 
54   /// CHECK-START-RISCV64: long Main.$noinline$longIntRiscvShift1Add(long, int) instruction_simplifier_riscv64 (after)
55   /// CHECK:          <<A:j\d+>>        ParameterValue
56   /// CHECK:          <<B:i\d+>>        ParameterValue
57   /// CHECK:          <<Convert:j\d+>>  TypeConversion [<<B>>]
58   /// CHECK-DAG:      <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<Convert>>] distance:1
59 
60   /// CHECK-START-RISCV64: long Main.$noinline$longIntRiscvShift1Add(long, int) instruction_simplifier_riscv64 (after)
61   /// CHECK-NOT:                        Shl
62 
63   /// CHECK-START-RISCV64: long Main.$noinline$longIntRiscvShift1Add(long, int) instruction_simplifier_riscv64 (after)
64   /// CHECK-NOT:                        Add
65 
$noinline$longIntRiscvShift1Add(long a, int b)66   public static long $noinline$longIntRiscvShift1Add(long a, int b) {
67     return (a << 1) + b;
68   }
69 
70   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift1Add(long, long) instruction_simplifier_riscv64 (before)
71   /// CHECK:          <<A:j\d+>>        ParameterValue
72   /// CHECK:          <<B:j\d+>>        ParameterValue
73   /// CHECK:          <<One:i\d+>>      IntConstant 1
74   /// CHECK:          <<Shift:j\d+>>    Shl [<<A>>,<<One>>]
75   /// CHECK:          <<Add:j\d+>>      Add [<<B>>,<<Shift>>]
76   /// CHECK:          <<Return:v\d+>>   Return [<<Add>>]
77 
78   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift1Add(long, long) instruction_simplifier_riscv64 (after)
79   /// CHECK:          <<A:j\d+>>        ParameterValue
80   /// CHECK:          <<B:j\d+>>        ParameterValue
81   /// CHECK-DAG:      <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:1
82 
83   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift1Add(long, long) instruction_simplifier_riscv64 (after)
84   /// CHECK-NOT:                        Shl
85 
86   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift1Add(long, long) instruction_simplifier_riscv64 (after)
87   /// CHECK-NOT:                        Add
88 
$noinline$longRiscvShift1Add(long a, long b)89   public static long $noinline$longRiscvShift1Add(long a, long b) {
90     return (a << 1) + b;
91   }
92 
93   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift2Add(long, long) instruction_simplifier_riscv64 (before)
94   /// CHECK:          <<A:j\d+>>        ParameterValue
95   /// CHECK:          <<B:j\d+>>        ParameterValue
96   /// CHECK:          <<Two:i\d+>>      IntConstant 2
97   /// CHECK:          <<Shift:j\d+>>    Shl [<<A>>,<<Two>>]
98   /// CHECK:          <<Add:j\d+>>      Add [<<B>>,<<Shift>>]
99   /// CHECK:          <<Return:v\d+>>   Return [<<Add>>]
100 
101   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift2Add(long, long) instruction_simplifier_riscv64 (after)
102   /// CHECK:          <<A:j\d+>>        ParameterValue
103   /// CHECK:          <<B:j\d+>>        ParameterValue
104   /// CHECK-DAG:      <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:2
105 
106   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift2Add(long, long) instruction_simplifier_riscv64 (after)
107   /// CHECK-NOT:                        Shl
108 
109   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift2Add(long, long) instruction_simplifier_riscv64 (after)
110   /// CHECK-NOT:                        Add
111 
$noinline$longRiscvShift2Add(long a, long b)112   public static long $noinline$longRiscvShift2Add(long a, long b) {
113     return (a << 2) + b;
114   }
115 
116   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift3Add(long, long) instruction_simplifier_riscv64 (before)
117   /// CHECK:          <<A:j\d+>>        ParameterValue
118   /// CHECK:          <<B:j\d+>>        ParameterValue
119   /// CHECK:          <<Three:i\d+>>    IntConstant 3
120   /// CHECK:          <<Shift:j\d+>>    Shl [<<A>>,<<Three>>]
121   /// CHECK:          <<Add:j\d+>>      Add [<<B>>,<<Shift>>]
122   /// CHECK:          <<Return:v\d+>>   Return [<<Add>>]
123 
124   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after)
125   /// CHECK:          <<A:j\d+>>        ParameterValue
126   /// CHECK:          <<B:j\d+>>        ParameterValue
127   /// CHECK-DAG:      <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:3
128 
129   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after)
130   /// CHECK-NOT:                        Shl
131 
132   /// CHECK-START-RISCV64: long Main.$noinline$longRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after)
133   /// CHECK-NOT:                        Add
134 
$noinline$longRiscvShift3Add(long a, long b)135   public static long $noinline$longRiscvShift3Add(long a, long b) {
136     return (a << 3) + b;
137   }
138 
139   /// CHECK-START-RISCV64: long Main.$noinline$longReverseRiscvShift3Add(long, long) instruction_simplifier_riscv64 (before)
140   /// CHECK:          <<A:j\d+>>        ParameterValue
141   /// CHECK:          <<B:j\d+>>        ParameterValue
142   /// CHECK:          <<Three:i\d+>>    IntConstant 3
143   /// CHECK:          <<Shift:j\d+>>    Shl [<<A>>,<<Three>>]
144   /// CHECK:          <<Add:j\d+>>      Add [<<B>>,<<Shift>>]
145   /// CHECK:          <<Return:v\d+>>   Return [<<Add>>]
146 
147   /// CHECK-START-RISCV64: long Main.$noinline$longReverseRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after)
148   /// CHECK:          <<A:j\d+>>        ParameterValue
149   /// CHECK:          <<B:j\d+>>        ParameterValue
150   /// CHECK-DAG:      <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<B>>] distance:3
151 
152   /// CHECK-START-RISCV64: long Main.$noinline$longReverseRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after)
153   /// CHECK-NOT:                        Shl
154 
155   /// CHECK-START-RISCV64: long Main.$noinline$longReverseRiscvShift3Add(long, long) instruction_simplifier_riscv64 (after)
156   /// CHECK-NOT:                        Add
157 
$noinline$longReverseRiscvShift3Add(long a, long b)158   public static long $noinline$longReverseRiscvShift3Add(long a, long b) {
159     return b + (a << 3);
160   }
161 
162   /// CHECK-START-RISCV64: long Main.$noinline$longRightShift(long, long) instruction_simplifier_riscv64 (before)
163   /// CHECK:          <<A:j\d+>>        ParameterValue
164   /// CHECK:          <<B:j\d+>>        ParameterValue
165   /// CHECK:          <<Four:i\d+>>     IntConstant 4
166   /// CHECK:          <<One:i\d+>>      IntConstant 1
167   /// CHECK:          <<Shift1:j\d+>>   Shl [<<A>>,<<Four>>]
168   /// CHECK:          <<Shift2:j\d+>>   Shl [<<B>>,<<One>>]
169   /// CHECK:          <<Add:j\d+>>      Add [<<Shift1>>,<<Shift2>>]
170   /// CHECK:          <<Return:v\d+>>   Return [<<Add>>]
171 
172   /// CHECK-START-RISCV64: long Main.$noinline$longRightShift(long, long) instruction_simplifier_riscv64 (after)
173   /// CHECK:          <<A:j\d+>>        ParameterValue
174   /// CHECK:          <<B:j\d+>>        ParameterValue
175   /// CHECK:          <<Four:i\d+>>     IntConstant 4
176   /// CHECK:          <<Shift1:j\d+>>   Shl [<<A>>,<<Four>>]
177   /// CHECK-DAG:      <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<B>>,<<Shift1>>] distance:1
178 
179   /// CHECK-START-RISCV64: long Main.$noinline$longRightShift(long, long) instruction_simplifier_riscv64 (after)
180   /// CHECK-NOT:                        Add
181 
$noinline$longRightShift(long a, long b)182   public static long $noinline$longRightShift(long a, long b) {
183     return (a << 4) + (b << 1);
184   }
185 
186   /// CHECK-START-RISCV64: long Main.$noinline$longLeftShift(long, long) instruction_simplifier_riscv64 (before)
187   /// CHECK:          <<A:j\d+>>        ParameterValue
188   /// CHECK:          <<B:j\d+>>        ParameterValue
189   /// CHECK:          <<One:i\d+>>      IntConstant 1
190   /// CHECK:          <<Four:i\d+>>     IntConstant 4
191   /// CHECK:          <<Shift1:j\d+>>   Shl [<<A>>,<<One>>]
192   /// CHECK:          <<Shift2:j\d+>>   Shl [<<B>>,<<Four>>]
193   /// CHECK:          <<Add:j\d+>>      Add [<<Shift1>>,<<Shift2>>]
194   /// CHECK:          <<Return:v\d+>>   Return [<<Add>>]
195 
196   /// CHECK-START-RISCV64: long Main.$noinline$longLeftShift(long, long) instruction_simplifier_riscv64 (after)
197   /// CHECK:          <<A:j\d+>>        ParameterValue
198   /// CHECK:          <<B:j\d+>>        ParameterValue
199   /// CHECK:          <<Four:i\d+>>     IntConstant 4
200   /// CHECK:          <<Shift2:j\d+>>   Shl [<<B>>,<<Four>>]
201   /// CHECK-DAG:      <<ShiftAdd:j\d+>> Riscv64ShiftAdd [<<A>>,<<Shift2>>] distance:1
202 
203   /// CHECK-START-RISCV64: long Main.$noinline$longLeftShift(long, long) instruction_simplifier_riscv64 (after)
204   /// CHECK-NOT:                        Add
205 
$noinline$longLeftShift(long a, long b)206   public static long $noinline$longLeftShift(long a, long b) {
207     return (a << 1) + (b << 4);
208   }
209 
210   /// CHECK-START-RISCV64: long Main.$noinline$longShiftTooLittleDistance(long, long) instruction_simplifier_riscv64 (after)
211   /// CHECK-NOT:                        Riscv64ShiftAdd
212 
$noinline$longShiftTooLittleDistance(long a, long b)213   public static long $noinline$longShiftTooLittleDistance(long a, long b) {
214     return (a << 0) + b;
215   }
216 
217   /// CHECK-START-RISCV64: long Main.$noinline$longShiftTooGreatDistance(long, long) instruction_simplifier_riscv64 (after)
218   /// CHECK-NOT:                        Riscv64ShiftAdd
219 
$noinline$longShiftTooGreatDistance(long a, long b)220   public static long $noinline$longShiftTooGreatDistance(long a, long b) {
221     return (a << 4) + b;
222   }
223 
224   /// CHECK-START-RISCV64: long Main.$noinline$longTwoSimplifications(long, long) instruction_simplifier_riscv64 (before)
225   /// CHECK:          <<A:j\d+>>         ParameterValue
226   /// CHECK:          <<B:j\d+>>         ParameterValue
227   /// CHECK:          <<One:i\d+>>       IntConstant 1
228   /// CHECK:          <<Two:i\d+>>       IntConstant 2
229   /// CHECK:          <<Shift1:j\d+>>    Shl [<<A>>,<<One>>]
230   /// CHECK:          <<Add1:j\d+>>      Add [<<B>>,<<Shift1>>]
231   /// CHECK:          <<Shift2:j\d+>>    Shl [<<B>>,<<Two>>]
232   /// CHECK:          <<Add2:j\d+>>      Add [<<A>>,<<Shift2>>]
233   /// CHECK:          <<Xor:j\d+>>       Xor [<<Add1>>,<<Add2>>]
234 
235   /// CHECK-START-RISCV64: long Main.$noinline$longTwoSimplifications(long, long) instruction_simplifier_riscv64 (after)
236   /// CHECK-DAG:      <<ShiftAdd1:j\d+>> Riscv64ShiftAdd distance:1
237   /// CHECK-DAG:      <<ShiftAdd2:j\d+>> Riscv64ShiftAdd distance:2
238 
239   /// CHECK-START-RISCV64: long Main.$noinline$longTwoSimplifications(long, long) instruction_simplifier_riscv64 (after)
240   /// CHECK-NOT:                         Shl
241 
242   /// CHECK-START-RISCV64: long Main.$noinline$longTwoSimplifications(long, long) instruction_simplifier_riscv64 (after)
243   /// CHECK-NOT:                         Add
244 
$noinline$longTwoSimplifications(long a, long b)245   public static long $noinline$longTwoSimplifications(long a, long b) {
246     long x = b + (a << 1);
247     long y = a + (b << 2);
248     return x ^ y;
249   }
250 
251   /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsUseShl(long, long, long) instruction_simplifier_riscv64 (before)
252   /// CHECK:          <<A:j\d+>>         ParameterValue
253   /// CHECK:          <<B:j\d+>>         ParameterValue
254   /// CHECK:          <<C:j\d+>>         ParameterValue
255   /// CHECK:          <<One:i\d+>>       IntConstant 1
256   /// CHECK:          <<Shl:j\d+>>       Shl [<<A>>,<<One>>]
257   /// CHECK:          <<X:j\d+>>         Add [<<B>>,<<Shl>>]
258   /// CHECK:          <<Y:j\d+>>         Add [<<C>>,<<Shl>>]
259 
260   /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsUseShl(long, long, long) instruction_simplifier_riscv64 (after)
261   /// CHECK:          <<A:j\d+>>         ParameterValue
262   /// CHECK:          <<B:j\d+>>         ParameterValue
263   /// CHECK:          <<C:j\d+>>         ParameterValue
264   /// CHECK-DAG:      <<ShAdd1:j\d+>>    Riscv64ShiftAdd [<<A>>,<<B>>] distance:1
265   /// CHECK-DAG:      <<ShAdd2:j\d+>>    Riscv64ShiftAdd [<<A>>,<<C>>] distance:1
266 
267   /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsUseShl(long, long, long) instruction_simplifier_riscv64 (after)
268   /// CHECK-NOT:                         Shl
269 
270   /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsUseShl(long, long, long) instruction_simplifier_riscv64 (after)
271   /// CHECK-NOT:                         Add
272 
$noinline$longTwoAddsUseShl(long a, long b, long c)273   public static long $noinline$longTwoAddsUseShl(long a, long b, long c) {
274     long shl = a << 1;
275     long x = shl + b;
276     long y = shl + c;
277     return x ^ y;
278   }
279 
280   /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsMixedOrderUseShl(long, long, long) instruction_simplifier_riscv64 (after)
281   /// CHECK-DAG:                         Riscv64ShiftAdd
282   /// CHECK-DAG:                         Riscv64ShiftAdd
283 
284   /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsMixedOrderUseShl(long, long, long) instruction_simplifier_riscv64 (after)
285   /// CHECK-NOT:                         Shl
286 
287   /// CHECK-START-RISCV64: long Main.$noinline$longTwoAddsMixedOrderUseShl(long, long, long) instruction_simplifier_riscv64 (after)
288   /// CHECK-NOT:                         Add
289 
$noinline$longTwoAddsMixedOrderUseShl(long a, long b, long c)290   public static long $noinline$longTwoAddsMixedOrderUseShl(long a, long b, long c) {
291     long x = (a << 1) + b;
292     long y = c + (a << 1);
293     return x ^ y;
294   }
295 
296   /// CHECK-START-RISCV64: long Main.$noinline$longOneAddSharesShlUse(long, long, long) instruction_simplifier_riscv64 (before)
297   /// CHECK:          <<A:j\d+>>         ParameterValue
298   /// CHECK:          <<B:j\d+>>         ParameterValue
299   /// CHECK:          <<C:j\d+>>         ParameterValue
300   /// CHECK:          <<One:i\d+>>       IntConstant 1
301   /// CHECK:          <<Shl:j\d+>>       Shl [<<A>>,<<One>>]
302   /// CHECK:          <<X:j\d+>>         Add [<<B>>,<<Shl>>]
303   /// CHECK:          <<Y:j\d+>>         Sub [<<Shl>>,<<C>>]
304 
305   /// CHECK-START-RISCV64: long Main.$noinline$longOneAddSharesShlUse(long, long, long) instruction_simplifier_riscv64 (after)
306   /// CHECK:          <<A:j\d+>>         ParameterValue
307   /// CHECK:          <<B:j\d+>>         ParameterValue
308   /// CHECK:          <<C:j\d+>>         ParameterValue
309   /// CHECK:          <<One:i\d+>>       IntConstant 1
310   /// CHECK:          <<Shl:j\d+>>       Shl [<<A>>,<<One>>]
311   /// CHECK-DAG:      <<ShAdd:j\d+>>     Riscv64ShiftAdd [<<A>>,<<B>>] distance:1
312   /// CHECK:          <<Y:j\d+>>         Sub [<<Shl>>,<<C>>]
313 
314   /// CHECK-START-RISCV64: long Main.$noinline$longOneAddSharesShlUse(long, long, long) instruction_simplifier_riscv64 (after)
315   /// CHECK-NOT:                         Add
316 
$noinline$longOneAddSharesShlUse(long a, long b, long c)317   public static long $noinline$longOneAddSharesShlUse(long a, long b, long c) {
318     long shl = a << 1;
319     long x = shl + b;
320     long y = shl - c;
321     return x ^ y;
322   }
323 
$noinline$returnVoid(long a)324   public static void $noinline$returnVoid(long a) {}
325 
326   /// CHECK-START-RISCV64: long Main.$noinline$longOneAddSharesShlEnvironmentUse(long, long) instruction_simplifier_riscv64 (after)
327   /// CHECK:                             Shl
328   /// CHECK-DAG:                         Riscv64ShiftAdd
329 
$noinline$longOneAddSharesShlEnvironmentUse(long a, long b)330   public static long $noinline$longOneAddSharesShlEnvironmentUse(long a, long b) {
331     long shl = a << 1;
332     long x = shl + b;
333     $noinline$returnVoid(shl);
334     return x;
335   }
336 
337   /// CHECK-START-RISCV64: long Main.$noinline$longTwoTheSameShl(long) instruction_simplifier_riscv64 (after)
338   /// CHECK-NOT:                        Riscv64ShiftAdd
339 
$noinline$longTwoTheSameShl(long a)340   public static long $noinline$longTwoTheSameShl(long a) {
341     return (a << 1) + (a << 1);
342   }
343 
main(String[] args)344   public static void main(String[] args) {
345     assertIntEquals(0, $noinline$intRiscvShift1Add(0, 0));
346 
347     assertLongEquals(-3L, $noinline$longIntRiscvShift1Add(-1L, -1));
348     assertLongEquals(3L, $noinline$longIntRiscvShift1Add(1L, 1));
349 
350     assertLongEquals(-3L, $noinline$longRiscvShift1Add(-1L, -1L));
351     assertLongEquals(-1L, $noinline$longRiscvShift1Add(0L, -1L));
352     assertLongEquals(-2L, $noinline$longRiscvShift1Add(-1L, 0L));
353     assertLongEquals(0L, $noinline$longRiscvShift1Add(0L, 0L));
354     assertLongEquals(1L, $noinline$longRiscvShift1Add(0L, 1L));
355     assertLongEquals(2L, $noinline$longRiscvShift1Add(1L, 0L));
356     assertLongEquals(3L, $noinline$longRiscvShift1Add(1L, 1L));
357 
358     assertLongEquals(-1L, $noinline$longRiscvShift1Add(Long.MAX_VALUE, 1L));
359 
360     assertLongEquals(0L, $noinline$longRiscvShift2Add(0L, 0L));
361     assertLongEquals(1L, $noinline$longRiscvShift2Add(0L, 1L));
362     assertLongEquals(4L, $noinline$longRiscvShift2Add(1L, 0L));
363     assertLongEquals(5L, $noinline$longRiscvShift2Add(1L, 1L));
364 
365     assertLongEquals(0L, $noinline$longRiscvShift3Add(0L, 0L));
366     assertLongEquals(0L, $noinline$longReverseRiscvShift3Add(0L, 0L));
367     assertLongEquals(1L, $noinline$longRiscvShift3Add(0L, 1L));
368     assertLongEquals(1L, $noinline$longReverseRiscvShift3Add(0L, 1L));
369     assertLongEquals(8L, $noinline$longRiscvShift3Add(1L, 0L));
370     assertLongEquals(8L, $noinline$longReverseRiscvShift3Add(1L, 0L));
371     assertLongEquals(9L, $noinline$longRiscvShift3Add(1L, 1L));
372     assertLongEquals(9L, $noinline$longReverseRiscvShift3Add(1L, 1L));
373 
374     assertLongEquals(2L, $noinline$longRightShift(0L, 1L));
375     assertLongEquals(4L, $noinline$longRightShift(0L, 2L));
376 
377     assertLongEquals(2L, $noinline$longLeftShift(1L, 0L));
378     assertLongEquals(4L, $noinline$longLeftShift(2L, 0L));
379 
380     assertLongEquals(1L, $noinline$longShiftTooLittleDistance(1L, 0L));
381     assertLongEquals(2L, $noinline$longShiftTooLittleDistance(2L, 0L));
382 
383     assertLongEquals(17L, $noinline$longShiftTooGreatDistance(1L, 1L));
384     assertLongEquals(32L, $noinline$longShiftTooGreatDistance(2L, 0L));
385 
386     assertLongEquals(6L, $noinline$longTwoSimplifications(1L, 1L));
387 
388     assertLongEquals(0L, $noinline$longTwoAddsUseShl(1L, 1L, 1L));
389     assertLongEquals(1L, $noinline$longTwoAddsUseShl(1L, 0L, 1L));
390     assertLongEquals(3L, $noinline$longTwoAddsUseShl(0L, 1L, 2L));
391     assertLongEquals(7L, $noinline$longTwoAddsUseShl(1L, 2L, 1L));
392 
393     assertLongEquals(0L, $noinline$longTwoAddsMixedOrderUseShl(1L, 1L, 1L));
394     assertLongEquals(1L, $noinline$longTwoAddsMixedOrderUseShl(1L, 0L, 1L));
395     assertLongEquals(3L, $noinline$longTwoAddsMixedOrderUseShl(0L, 1L, 2L));
396 
397     assertLongEquals(2L, $noinline$longOneAddSharesShlUse(1L, 1L, 1L));
398     assertLongEquals(3L, $noinline$longOneAddSharesShlUse(1L, 0L, 1L));
399     assertLongEquals(-1L, $noinline$longOneAddSharesShlUse(0L, 1L, 2L));
400     assertLongEquals(5L, $noinline$longOneAddSharesShlUse(1L, 2L, 1L));
401 
402     assertLongEquals(3L, $noinline$longOneAddSharesShlEnvironmentUse(1L, 1L));
403 
404     assertLongEquals(4L, $noinline$longTwoTheSameShl(1L));
405   }
406 }
407