xref: /aosp_15_r20/art/test/527-checker-array-access-simd/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2017 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker public class Main {
18*795d594fSAndroid Build Coastguard Worker 
assertIntEquals(int expected, int result)19*795d594fSAndroid Build Coastguard Worker   public static void assertIntEquals(int expected, int result) {
20*795d594fSAndroid Build Coastguard Worker     if (expected != result) {
21*795d594fSAndroid Build Coastguard Worker       throw new Error("Expected: " + expected + ", found: " + result);
22*795d594fSAndroid Build Coastguard Worker     }
23*795d594fSAndroid Build Coastguard Worker   }
24*795d594fSAndroid Build Coastguard Worker 
25*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkIntCase(int[]) instruction_simplifier_arm64 (before)
26*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array:l\d+>>         ParameterValue
27*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const5:i\d+>>        IntConstant 5
28*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
29*795d594fSAndroid Build Coastguard Worker   //
30*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>,{{j\d+}}]
31*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
32*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
33*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
34*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
35*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array>>,<<Index>>,<<LoopP>>]
36*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>,<<LoopP>>]
37*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Index>>,<<Add>>,<<LoopP>>]
38*795d594fSAndroid Build Coastguard Worker   //
39*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
40*795d594fSAndroid Build Coastguard Worker   //
41*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>]
42*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
43*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
44*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
45*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array>>,<<Index>>]
46*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>]
47*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Index>>,<<Add>>]
48*795d594fSAndroid Build Coastguard Worker   //
49*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
50*795d594fSAndroid Build Coastguard Worker 
51*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkIntCase(int[]) instruction_simplifier_arm64 (after)
52*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array:l\d+>>         ParameterValue
53*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const5:i\d+>>        IntConstant 5
54*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
55*795d594fSAndroid Build Coastguard Worker   //
56*795d594fSAndroid Build Coastguard Worker   //      IntermediateAddressIndex is not supported for SVE.
57*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>,{{j\d+}}]
58*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
59*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
60*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
61*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
62*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr1:i\d+>>      IntermediateAddress [<<Array>>,{{i\d+}}]
63*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<IntAddr1>>,<<Index>>,<<LoopP>>]
64*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>,<<LoopP>>]
65*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr2:i\d+>>      IntermediateAddress [<<Array>>,{{i\d+}}]
66*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<IntAddr2>>,<<Index>>,<<Add>>,<<LoopP>>]
67*795d594fSAndroid Build Coastguard Worker   //
68*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
69*795d594fSAndroid Build Coastguard Worker   //
70*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Const2:i\d+>>        IntConstant 2
71*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<DataOffset:i\d+>>    IntConstant 12
72*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>]
73*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
74*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
75*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
76*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Address1:i\d+>>      IntermediateAddressIndex [<<Index>>,<<DataOffset>>,<<Const2>>]
77*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array>>,<<Address1>>]
78*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>]
79*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Address2:i\d+>>      IntermediateAddressIndex [<<Index>>,<<DataOffset>>,<<Const2>>]
80*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Address2>>,<<Add>>]
81*795d594fSAndroid Build Coastguard Worker   //
82*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
83*795d594fSAndroid Build Coastguard Worker 
84*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkIntCase(int[]) GVN$after_arch (after)
85*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array:l\d+>>         ParameterValue
86*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const5:i\d+>>        IntConstant 5
87*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
88*795d594fSAndroid Build Coastguard Worker   //
89*795d594fSAndroid Build Coastguard Worker   //      IntermediateAddressIndex is not supported for SVE.
90*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>,{{j\d+}}]
91*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
92*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
93*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
94*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
95*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr:i\d+>>       IntermediateAddress [<<Array>>,{{i\d+}}]
96*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<IntAddr>>,<<Index>>,<<LoopP>>]
97*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>,<<LoopP>>]
98*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<IntAddr>>,<<Index>>,<<Add>>,<<LoopP>>]
99*795d594fSAndroid Build Coastguard Worker   //
100*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
101*795d594fSAndroid Build Coastguard Worker   //
102*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<DataOffset:i\d+>>    IntConstant 12
103*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Const2:i\d+>>        IntConstant 2
104*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>]
105*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
106*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
107*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
108*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Address1:i\d+>>      IntermediateAddressIndex [<<Index>>,<<DataOffset>>,<<Const2>>]
109*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array>>,<<Address1>>]
110*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>]
111*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NOT:                                    IntermediateAddress
112*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Address1>>,<<Add>>]
113*795d594fSAndroid Build Coastguard Worker   //
114*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
115*795d594fSAndroid Build Coastguard Worker 
116*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkIntCase(int[]) disassembly (after)
117*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
118*795d594fSAndroid Build Coastguard Worker   //
119*795d594fSAndroid Build Coastguard Worker   //      IntermediateAddressIndex is not supported for SVE.
120*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NOT:                                    IntermediateAddressIndex
121*795d594fSAndroid Build Coastguard Worker   //
122*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
123*795d594fSAndroid Build Coastguard Worker   //
124*795d594fSAndroid Build Coastguard Worker   ///     CHECK:                                        IntermediateAddressIndex
125*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NEXT:                                   add w{{[0-9]+}}, w{{[0-9]+}}, w{{[0-9]+}}, lsl #2
126*795d594fSAndroid Build Coastguard Worker   //
127*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
checkIntCase(int[] a)128*795d594fSAndroid Build Coastguard Worker   public static void checkIntCase(int[] a) {
129*795d594fSAndroid Build Coastguard Worker     for (int i = 0; i < 128; i++) {
130*795d594fSAndroid Build Coastguard Worker       a[i] += 5;
131*795d594fSAndroid Build Coastguard Worker     }
132*795d594fSAndroid Build Coastguard Worker   }
133*795d594fSAndroid Build Coastguard Worker 
134*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkByteCase(byte[]) instruction_simplifier_arm64 (before)
135*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array:l\d+>>         ParameterValue
136*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const5:i\d+>>        IntConstant 5
137*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
138*795d594fSAndroid Build Coastguard Worker   //
139*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>,{{j\d+}}]
140*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
141*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
142*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
143*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
144*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array>>,<<Index>>,<<LoopP>>]
145*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>,<<LoopP>>]
146*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Index>>,<<Add>>,<<LoopP>>]
147*795d594fSAndroid Build Coastguard Worker   //
148*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
149*795d594fSAndroid Build Coastguard Worker   //
150*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>]
151*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
152*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
153*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
154*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array>>,<<Index>>]
155*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>]
156*795d594fSAndroid Build Coastguard Worker 
157*795d594fSAndroid Build Coastguard Worker   //
158*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
159*795d594fSAndroid Build Coastguard Worker 
160*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkByteCase(byte[]) instruction_simplifier_arm64 (after)
161*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array:l\d+>>         ParameterValue
162*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const0:i\d+>>        IntConstant 0
163*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const5:i\d+>>        IntConstant 5
164*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
165*795d594fSAndroid Build Coastguard Worker   //
166*795d594fSAndroid Build Coastguard Worker   //      IntermediateAddressIndex is not supported for SVE.
167*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>,{{j\d+}}]
168*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
169*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
170*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
171*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
172*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr1:i\d+>>      IntermediateAddress [<<Array>>,{{i\d+}}]
173*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<IntAddr1>>,<<Index>>,<<LoopP>>]
174*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>,<<LoopP>>]
175*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr2:i\d+>>      IntermediateAddress [<<Array>>,{{i\d+}}]
176*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<IntAddr2>>,<<Index>>,<<Add>>,<<LoopP>>]
177*795d594fSAndroid Build Coastguard Worker   //
178*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
179*795d594fSAndroid Build Coastguard Worker   //
180*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<DataOffset:i\d+>>    IntConstant 12
181*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>]
182*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
183*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
184*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
185*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Address1:i\d+>>      IntermediateAddressIndex [<<Index>>,<<DataOffset>>,<<Const0>>]
186*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array>>,<<Address1>>]
187*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>]
188*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Address2:i\d+>>      IntermediateAddressIndex [<<Index>>,<<DataOffset>>,<<Const0>>]
189*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Address2>>,<<Add>>]
190*795d594fSAndroid Build Coastguard Worker   //
191*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
192*795d594fSAndroid Build Coastguard Worker 
193*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkByteCase(byte[]) GVN$after_arch (after)
194*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array:l\d+>>         ParameterValue
195*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const0:i\d+>>        IntConstant 0
196*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const5:i\d+>>        IntConstant 5
197*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
198*795d594fSAndroid Build Coastguard Worker   //
199*795d594fSAndroid Build Coastguard Worker   //      IntermediateAddressIndex is not supported for SVE.
200*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>,{{j\d+}}]
201*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
202*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
203*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
204*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
205*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr:i\d+>>       IntermediateAddress [<<Array>>,{{i\d+}}]
206*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<IntAddr>>,<<Index>>,<<LoopP>>]
207*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>,<<LoopP>>]
208*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<IntAddr>>,<<Index>>,<<Add>>,<<LoopP>>]
209*795d594fSAndroid Build Coastguard Worker   //
210*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
211*795d594fSAndroid Build Coastguard Worker   //
212*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<DataOffset:i\d+>>    IntConstant 12
213*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>]
214*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
215*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
216*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
217*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Address1:i\d+>>      IntermediateAddressIndex [<<Index>>,<<DataOffset>>,<<Const0>>]
218*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array>>,<<Address1>>]
219*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Add:d\d+>>           VecAdd [<<Load>>,<<Repl>>]
220*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NOT:                                    IntermediateAddress
221*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Address1>>,<<Add>>]
222*795d594fSAndroid Build Coastguard Worker   //
223*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
224*795d594fSAndroid Build Coastguard Worker 
225*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkByteCase(byte[]) disassembly (after)
226*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
227*795d594fSAndroid Build Coastguard Worker   //
228*795d594fSAndroid Build Coastguard Worker   //      IntermediateAddressIndex is not supported for SVE.
229*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NOT:                                    IntermediateAddressIndex
230*795d594fSAndroid Build Coastguard Worker   //
231*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
232*795d594fSAndroid Build Coastguard Worker   //
233*795d594fSAndroid Build Coastguard Worker   ///     CHECK:                                        IntermediateAddressIndex
234*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NEXT:                                   add w{{[0-9]+}}, w{{[0-9]+}}, #0x{{[0-9a-fA-F]+}}
235*795d594fSAndroid Build Coastguard Worker   ///     CHECK:                                        VecLoad
236*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NEXT:                                   ldr q{{[0-9]+}}, [x{{[0-9]+}}, x{{[0-9]+}}]
237*795d594fSAndroid Build Coastguard Worker   ///     CHECK:                                        VecStore
238*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NEXT:                                   str q{{[0-9]+}}, [x{{[0-9]+}}, x{{[0-9]+}}]
239*795d594fSAndroid Build Coastguard Worker   //
240*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
checkByteCase(byte[] a)241*795d594fSAndroid Build Coastguard Worker   public static void checkByteCase(byte[] a) {
242*795d594fSAndroid Build Coastguard Worker     for (int i = 0; i < 128; i++) {
243*795d594fSAndroid Build Coastguard Worker       a[i] += 5;
244*795d594fSAndroid Build Coastguard Worker     }
245*795d594fSAndroid Build Coastguard Worker   }
246*795d594fSAndroid Build Coastguard Worker 
247*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkSingleAccess(int[]) instruction_simplifier_arm64 (before)
248*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array:l\d+>>         ParameterValue
249*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const5:i\d+>>        IntConstant 5
250*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
251*795d594fSAndroid Build Coastguard Worker   //
252*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>,{{j\d+}}]
253*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
254*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
255*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
256*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
257*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Index>>,<<Repl>>,<<LoopP>>]
258*795d594fSAndroid Build Coastguard Worker   //
259*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
260*795d594fSAndroid Build Coastguard Worker   //
261*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>]
262*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
263*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
264*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
265*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Index>>,<<Repl>>]
266*795d594fSAndroid Build Coastguard Worker   //
267*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
268*795d594fSAndroid Build Coastguard Worker 
269*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkSingleAccess(int[]) instruction_simplifier_arm64 (after)
270*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array:l\d+>>         ParameterValue
271*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const0:i\d+>>        IntConstant 0
272*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Const5:i\d+>>        IntConstant 5
273*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
274*795d594fSAndroid Build Coastguard Worker   //
275*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>,{{j\d+}}]
276*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
277*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
278*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
279*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
280*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr:i\d+>>       IntermediateAddress [<<Array>>,{{i\d+}}]
281*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<IntAddr>>,<<Index>>,<<Repl>>,<<LoopP>>]
282*795d594fSAndroid Build Coastguard Worker   //
283*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
284*795d594fSAndroid Build Coastguard Worker   //
285*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Repl:d\d+>>          VecReplicateScalar [<<Const5>>]
286*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
287*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
288*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
289*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array>>,<<Index>>,<<Repl>>]
290*795d594fSAndroid Build Coastguard Worker   //
291*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
292*795d594fSAndroid Build Coastguard Worker   //
293*795d594fSAndroid Build Coastguard Worker   /// CHECK-NOT:                                    IntermediateAddress
checkSingleAccess(int[] a)294*795d594fSAndroid Build Coastguard Worker   public static void checkSingleAccess(int[] a) {
295*795d594fSAndroid Build Coastguard Worker     for (int i = 0; i < 128; i++) {
296*795d594fSAndroid Build Coastguard Worker       a[i] = 5;
297*795d594fSAndroid Build Coastguard Worker     }
298*795d594fSAndroid Build Coastguard Worker   }
299*795d594fSAndroid Build Coastguard Worker 
300*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkInt2Float(int[], float[]) instruction_simplifier_arm64 (before)
301*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array1:l\d+>>        ParameterValue
302*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array2:l\d+>>        ParameterValue
303*795d594fSAndroid Build Coastguard Worker   //  -------------- Loop
304*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
305*795d594fSAndroid Build Coastguard Worker   //
306*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
307*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
308*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
309*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array1>>,<<Index>>,<<LoopP>>]
310*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Cnv:d\d+>>           VecCnv [<<Load>>,<<LoopP>>]
311*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array2>>,<<Index>>,<<Cnv>>,<<LoopP>>]
312*795d594fSAndroid Build Coastguard Worker   //
313*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
314*795d594fSAndroid Build Coastguard Worker   //
315*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
316*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
317*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array1>>,<<Index>>]
318*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Cnv:d\d+>>           VecCnv [<<Load>>]
319*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array2>>,<<Index>>,<<Cnv>>]
320*795d594fSAndroid Build Coastguard Worker   //
321*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
322*795d594fSAndroid Build Coastguard Worker 
323*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkInt2Float(int[], float[]) instruction_simplifier_arm64 (after)
324*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array1:l\d+>>        ParameterValue
325*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array2:l\d+>>        ParameterValue
326*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
327*795d594fSAndroid Build Coastguard Worker   //
328*795d594fSAndroid Build Coastguard Worker   //      IntermediateAddressIndex is not supported for SVE.
329*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
330*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
331*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
332*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
333*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr1:i\d+>>      IntermediateAddress [<<Array1>>,{{i\d+}}]
334*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<IntAddr1>>,<<Index>>,<<LoopP>>]
335*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Cnv:d\d+>>           VecCnv [<<Load>>,<<LoopP>>]
336*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr2:i\d+>>      IntermediateAddress [<<Array2>>,{{i\d+}}]
337*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<IntAddr2>>,<<Index>>,<<Cnv>>,<<LoopP>>]
338*795d594fSAndroid Build Coastguard Worker   //
339*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
340*795d594fSAndroid Build Coastguard Worker   //
341*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<DataOffset:i\d+>>    IntConstant 12
342*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Const2:i\d+>>        IntConstant 2
343*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
344*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
345*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
346*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Address1:i\d+>>      IntermediateAddressIndex [<<Index>>,<<DataOffset>>,<<Const2>>]
347*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array1>>,<<Address1>>]
348*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Cnv:d\d+>>           VecCnv [<<Load>>]
349*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Address2:i\d+>>      IntermediateAddressIndex [<<Index>>,<<DataOffset>>,<<Const2>>]
350*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array2>>,<<Address2>>,<<Cnv>>]
351*795d594fSAndroid Build Coastguard Worker   //
352*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
353*795d594fSAndroid Build Coastguard Worker 
354*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkInt2Float(int[], float[]) GVN$after_arch (after)
355*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array1:l\d+>>        ParameterValue
356*795d594fSAndroid Build Coastguard Worker   /// CHECK-DAG:             <<Array2:l\d+>>        ParameterValue
357*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
358*795d594fSAndroid Build Coastguard Worker   //
359*795d594fSAndroid Build Coastguard Worker   //      IntermediateAddressIndex is not supported for SVE.
360*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
361*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<LoopP:j\d+>>         VecPredWhile
362*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
363*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
364*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr1:i\d+>>      IntermediateAddress [<<Array1>>,{{i\d+}}]
365*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<IntAddr1>>,<<Index>>,<<LoopP>>]
366*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Cnv:d\d+>>           VecCnv [<<Load>>,<<LoopP>>]
367*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<IntAddr2:i\d+>>      IntermediateAddress [<<Array2>>,{{i\d+}}]
368*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<IntAddr2>>,<<Index>>,<<Cnv>>,<<LoopP>>]
369*795d594fSAndroid Build Coastguard Worker   //
370*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
371*795d594fSAndroid Build Coastguard Worker   //
372*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<DataOffset:i\d+>>    IntConstant 12
373*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Const2:i\d+>>        IntConstant 2
374*795d594fSAndroid Build Coastguard Worker   //      -------------- Loop
375*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Index:i\d+>>         Phi
376*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    If
377*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Address1:i\d+>>      IntermediateAddressIndex [<<Index>>,<<DataOffset>>,<<Const2>>]
378*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Load:d\d+>>          VecLoad [<<Array1>>,<<Address1>>]
379*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:             <<Cnv:d\d+>>           VecCnv [<<Load>>]
380*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NOT:                                    IntermediateAddress
381*795d594fSAndroid Build Coastguard Worker   ///     CHECK-DAG:                                    VecStore [<<Array2>>,<<Address1>>,<<Cnv>>]
382*795d594fSAndroid Build Coastguard Worker   //
383*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
384*795d594fSAndroid Build Coastguard Worker 
385*795d594fSAndroid Build Coastguard Worker   /// CHECK-START-ARM64: void Main.checkInt2Float(int[], float[]) disassembly (after)
386*795d594fSAndroid Build Coastguard Worker   /// CHECK-IF:     hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true'
387*795d594fSAndroid Build Coastguard Worker   //
388*795d594fSAndroid Build Coastguard Worker   //      IntermediateAddressIndex is not supported for SVE.
389*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NOT:                                    IntermediateAddressIndex
390*795d594fSAndroid Build Coastguard Worker   //
391*795d594fSAndroid Build Coastguard Worker   /// CHECK-ELSE:
392*795d594fSAndroid Build Coastguard Worker   //
393*795d594fSAndroid Build Coastguard Worker   ///     CHECK:                                        IntermediateAddressIndex
394*795d594fSAndroid Build Coastguard Worker   ///     CHECK-NEXT:                                   add w{{[0-9]+}}, w{{[0-9]+}}, w{{[0-9]+}}, lsl #2
395*795d594fSAndroid Build Coastguard Worker   //
396*795d594fSAndroid Build Coastguard Worker   /// CHECK-FI:
checkInt2Float(int[] a, float[] b)397*795d594fSAndroid Build Coastguard Worker   public static void checkInt2Float(int[] a, float[] b) {
398*795d594fSAndroid Build Coastguard Worker     for (int i = 0; i < 128; i++) {
399*795d594fSAndroid Build Coastguard Worker       b[i] = (float) a[i];
400*795d594fSAndroid Build Coastguard Worker     }
401*795d594fSAndroid Build Coastguard Worker   }
402*795d594fSAndroid Build Coastguard Worker 
403*795d594fSAndroid Build Coastguard Worker   public static final int ARRAY_SIZE = 1024;
404*795d594fSAndroid Build Coastguard Worker 
calcArraySum(int[] a, byte[] b, float[] c)405*795d594fSAndroid Build Coastguard Worker   public static int calcArraySum(int[] a, byte[] b, float[] c) {
406*795d594fSAndroid Build Coastguard Worker     int sum = 0;
407*795d594fSAndroid Build Coastguard Worker     for (int i = 0; i < 128; i++) {
408*795d594fSAndroid Build Coastguard Worker       sum += a[i] + b[i] + (int) c[i];
409*795d594fSAndroid Build Coastguard Worker     }
410*795d594fSAndroid Build Coastguard Worker     return sum;
411*795d594fSAndroid Build Coastguard Worker   }
412*795d594fSAndroid Build Coastguard Worker 
main(String[] args)413*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) {
414*795d594fSAndroid Build Coastguard Worker     byte[] ba = new byte[ARRAY_SIZE];
415*795d594fSAndroid Build Coastguard Worker     int[] ia = new int[ARRAY_SIZE];
416*795d594fSAndroid Build Coastguard Worker     float[] fa = new float[ARRAY_SIZE];
417*795d594fSAndroid Build Coastguard Worker 
418*795d594fSAndroid Build Coastguard Worker     checkSingleAccess(ia);
419*795d594fSAndroid Build Coastguard Worker     checkIntCase(ia);
420*795d594fSAndroid Build Coastguard Worker     checkByteCase(ba);
421*795d594fSAndroid Build Coastguard Worker     checkInt2Float(ia, fa);
422*795d594fSAndroid Build Coastguard Worker 
423*795d594fSAndroid Build Coastguard Worker     assertIntEquals(3200, calcArraySum(ia, ba, fa));
424*795d594fSAndroid Build Coastguard Worker   }
425*795d594fSAndroid Build Coastguard Worker }
426