• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // clang-format off
2 // Generated file (from: max_pool_v1_2.mod.py). Do not edit
CreateModel_nhwc(Model * model)3 void CreateModel_nhwc(Model *model) {
4   OperandType type0(Type::BOOL, {});
5   OperandType type1(Type::TENSOR_FLOAT32, {1, 2, 2, 1});
6   OperandType type2(Type::INT32, {});
7   // Phase 1, operands
8   auto op1 = model->addOperand(&type1);
9   auto param = model->addOperand(&type2);
10   auto param1 = model->addOperand(&type2);
11   auto param2 = model->addOperand(&type2);
12   auto param3 = model->addOperand(&type2);
13   auto param4 = model->addOperand(&type2);
14   auto param5 = model->addOperand(&type2);
15   auto param6 = model->addOperand(&type2);
16   auto param7 = model->addOperand(&type2);
17   auto param8 = model->addOperand(&type2);
18   auto layout = model->addOperand(&type0);
19   auto op4 = model->addOperand(&type1);
20   // Phase 2, operations
21   static int32_t param_init[] = {0};
22   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
23   static int32_t param1_init[] = {0};
24   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
25   static int32_t param2_init[] = {0};
26   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
27   static int32_t param3_init[] = {0};
28   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
29   static int32_t param4_init[] = {1};
30   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
31   static int32_t param5_init[] = {1};
32   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
33   static int32_t param6_init[] = {1};
34   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
35   static int32_t param7_init[] = {1};
36   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
37   static int32_t param8_init[] = {0};
38   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
39   static bool8 layout_init[] = {false};
40   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
41   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
42   // Phase 3, inputs and outputs
43   model->identifyInputsAndOutputs(
44     {op1},
45     {op4});
46   assert(model->isValid());
47 }
48 
is_ignored_nhwc(int i)49 inline bool is_ignored_nhwc(int i) {
50   static std::set<int> ignore = {};
51   return ignore.find(i) != ignore.end();
52 }
53 
CreateModel_nhwc_relaxed(Model * model)54 void CreateModel_nhwc_relaxed(Model *model) {
55   OperandType type0(Type::BOOL, {});
56   OperandType type1(Type::TENSOR_FLOAT32, {1, 2, 2, 1});
57   OperandType type2(Type::INT32, {});
58   // Phase 1, operands
59   auto op1 = model->addOperand(&type1);
60   auto param = model->addOperand(&type2);
61   auto param1 = model->addOperand(&type2);
62   auto param2 = model->addOperand(&type2);
63   auto param3 = model->addOperand(&type2);
64   auto param4 = model->addOperand(&type2);
65   auto param5 = model->addOperand(&type2);
66   auto param6 = model->addOperand(&type2);
67   auto param7 = model->addOperand(&type2);
68   auto param8 = model->addOperand(&type2);
69   auto layout = model->addOperand(&type0);
70   auto op4 = model->addOperand(&type1);
71   // Phase 2, operations
72   static int32_t param_init[] = {0};
73   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
74   static int32_t param1_init[] = {0};
75   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
76   static int32_t param2_init[] = {0};
77   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
78   static int32_t param3_init[] = {0};
79   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
80   static int32_t param4_init[] = {1};
81   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
82   static int32_t param5_init[] = {1};
83   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
84   static int32_t param6_init[] = {1};
85   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
86   static int32_t param7_init[] = {1};
87   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
88   static int32_t param8_init[] = {0};
89   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
90   static bool8 layout_init[] = {false};
91   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
92   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
93   // Phase 3, inputs and outputs
94   model->identifyInputsAndOutputs(
95     {op1},
96     {op4});
97   // Phase 4: set relaxed execution
98   model->relaxComputationFloat32toFloat16(true);
99   assert(model->isValid());
100 }
101 
is_ignored_nhwc_relaxed(int i)102 inline bool is_ignored_nhwc_relaxed(int i) {
103   static std::set<int> ignore = {};
104   return ignore.find(i) != ignore.end();
105 }
106 
CreateModel_nhwc_quant8(Model * model)107 void CreateModel_nhwc_quant8(Model *model) {
108   OperandType type0(Type::BOOL, {});
109   OperandType type17(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.5f, 0);
110   OperandType type2(Type::INT32, {});
111   // Phase 1, operands
112   auto op1 = model->addOperand(&type17);
113   auto param = model->addOperand(&type2);
114   auto param1 = model->addOperand(&type2);
115   auto param2 = model->addOperand(&type2);
116   auto param3 = model->addOperand(&type2);
117   auto param4 = model->addOperand(&type2);
118   auto param5 = model->addOperand(&type2);
119   auto param6 = model->addOperand(&type2);
120   auto param7 = model->addOperand(&type2);
121   auto param8 = model->addOperand(&type2);
122   auto layout = model->addOperand(&type0);
123   auto op4 = model->addOperand(&type17);
124   // Phase 2, operations
125   static int32_t param_init[] = {0};
126   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
127   static int32_t param1_init[] = {0};
128   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
129   static int32_t param2_init[] = {0};
130   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
131   static int32_t param3_init[] = {0};
132   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
133   static int32_t param4_init[] = {1};
134   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
135   static int32_t param5_init[] = {1};
136   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
137   static int32_t param6_init[] = {1};
138   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
139   static int32_t param7_init[] = {1};
140   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
141   static int32_t param8_init[] = {0};
142   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
143   static bool8 layout_init[] = {false};
144   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
145   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
146   // Phase 3, inputs and outputs
147   model->identifyInputsAndOutputs(
148     {op1},
149     {op4});
150   assert(model->isValid());
151 }
152 
is_ignored_nhwc_quant8(int i)153 inline bool is_ignored_nhwc_quant8(int i) {
154   static std::set<int> ignore = {};
155   return ignore.find(i) != ignore.end();
156 }
157 
CreateModel_nhwc_float16(Model * model)158 void CreateModel_nhwc_float16(Model *model) {
159   OperandType type0(Type::BOOL, {});
160   OperandType type18(Type::TENSOR_FLOAT16, {1, 2, 2, 1});
161   OperandType type2(Type::INT32, {});
162   // Phase 1, operands
163   auto op1 = model->addOperand(&type18);
164   auto param = model->addOperand(&type2);
165   auto param1 = model->addOperand(&type2);
166   auto param2 = model->addOperand(&type2);
167   auto param3 = model->addOperand(&type2);
168   auto param4 = model->addOperand(&type2);
169   auto param5 = model->addOperand(&type2);
170   auto param6 = model->addOperand(&type2);
171   auto param7 = model->addOperand(&type2);
172   auto param8 = model->addOperand(&type2);
173   auto layout = model->addOperand(&type0);
174   auto op4 = model->addOperand(&type18);
175   // Phase 2, operations
176   static int32_t param_init[] = {0};
177   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
178   static int32_t param1_init[] = {0};
179   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
180   static int32_t param2_init[] = {0};
181   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
182   static int32_t param3_init[] = {0};
183   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
184   static int32_t param4_init[] = {1};
185   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
186   static int32_t param5_init[] = {1};
187   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
188   static int32_t param6_init[] = {1};
189   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
190   static int32_t param7_init[] = {1};
191   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
192   static int32_t param8_init[] = {0};
193   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
194   static bool8 layout_init[] = {false};
195   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
196   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
197   // Phase 3, inputs and outputs
198   model->identifyInputsAndOutputs(
199     {op1},
200     {op4});
201   assert(model->isValid());
202 }
203 
is_ignored_nhwc_float16(int i)204 inline bool is_ignored_nhwc_float16(int i) {
205   static std::set<int> ignore = {};
206   return ignore.find(i) != ignore.end();
207 }
208 
CreateModel_nchw(Model * model)209 void CreateModel_nchw(Model *model) {
210   OperandType type0(Type::BOOL, {});
211   OperandType type19(Type::TENSOR_FLOAT32, {1, 1, 2, 2});
212   OperandType type2(Type::INT32, {});
213   // Phase 1, operands
214   auto op1 = model->addOperand(&type19);
215   auto param = model->addOperand(&type2);
216   auto param1 = model->addOperand(&type2);
217   auto param2 = model->addOperand(&type2);
218   auto param3 = model->addOperand(&type2);
219   auto param4 = model->addOperand(&type2);
220   auto param5 = model->addOperand(&type2);
221   auto param6 = model->addOperand(&type2);
222   auto param7 = model->addOperand(&type2);
223   auto param8 = model->addOperand(&type2);
224   auto layout = model->addOperand(&type0);
225   auto op4 = model->addOperand(&type19);
226   // Phase 2, operations
227   static int32_t param_init[] = {0};
228   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
229   static int32_t param1_init[] = {0};
230   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
231   static int32_t param2_init[] = {0};
232   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
233   static int32_t param3_init[] = {0};
234   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
235   static int32_t param4_init[] = {1};
236   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
237   static int32_t param5_init[] = {1};
238   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
239   static int32_t param6_init[] = {1};
240   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
241   static int32_t param7_init[] = {1};
242   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
243   static int32_t param8_init[] = {0};
244   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
245   static bool8 layout_init[] = {true};
246   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
247   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
248   // Phase 3, inputs and outputs
249   model->identifyInputsAndOutputs(
250     {op1},
251     {op4});
252   assert(model->isValid());
253 }
254 
is_ignored_nchw(int i)255 inline bool is_ignored_nchw(int i) {
256   static std::set<int> ignore = {};
257   return ignore.find(i) != ignore.end();
258 }
259 
CreateModel_nchw_relaxed(Model * model)260 void CreateModel_nchw_relaxed(Model *model) {
261   OperandType type0(Type::BOOL, {});
262   OperandType type19(Type::TENSOR_FLOAT32, {1, 1, 2, 2});
263   OperandType type2(Type::INT32, {});
264   // Phase 1, operands
265   auto op1 = model->addOperand(&type19);
266   auto param = model->addOperand(&type2);
267   auto param1 = model->addOperand(&type2);
268   auto param2 = model->addOperand(&type2);
269   auto param3 = model->addOperand(&type2);
270   auto param4 = model->addOperand(&type2);
271   auto param5 = model->addOperand(&type2);
272   auto param6 = model->addOperand(&type2);
273   auto param7 = model->addOperand(&type2);
274   auto param8 = model->addOperand(&type2);
275   auto layout = model->addOperand(&type0);
276   auto op4 = model->addOperand(&type19);
277   // Phase 2, operations
278   static int32_t param_init[] = {0};
279   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
280   static int32_t param1_init[] = {0};
281   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
282   static int32_t param2_init[] = {0};
283   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
284   static int32_t param3_init[] = {0};
285   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
286   static int32_t param4_init[] = {1};
287   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
288   static int32_t param5_init[] = {1};
289   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
290   static int32_t param6_init[] = {1};
291   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
292   static int32_t param7_init[] = {1};
293   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
294   static int32_t param8_init[] = {0};
295   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
296   static bool8 layout_init[] = {true};
297   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
298   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
299   // Phase 3, inputs and outputs
300   model->identifyInputsAndOutputs(
301     {op1},
302     {op4});
303   // Phase 4: set relaxed execution
304   model->relaxComputationFloat32toFloat16(true);
305   assert(model->isValid());
306 }
307 
is_ignored_nchw_relaxed(int i)308 inline bool is_ignored_nchw_relaxed(int i) {
309   static std::set<int> ignore = {};
310   return ignore.find(i) != ignore.end();
311 }
312 
CreateModel_nchw_quant8(Model * model)313 void CreateModel_nchw_quant8(Model *model) {
314   OperandType type0(Type::BOOL, {});
315   OperandType type2(Type::INT32, {});
316   OperandType type20(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 2}, 0.5f, 0);
317   // Phase 1, operands
318   auto op1 = model->addOperand(&type20);
319   auto param = model->addOperand(&type2);
320   auto param1 = model->addOperand(&type2);
321   auto param2 = model->addOperand(&type2);
322   auto param3 = model->addOperand(&type2);
323   auto param4 = model->addOperand(&type2);
324   auto param5 = model->addOperand(&type2);
325   auto param6 = model->addOperand(&type2);
326   auto param7 = model->addOperand(&type2);
327   auto param8 = model->addOperand(&type2);
328   auto layout = model->addOperand(&type0);
329   auto op4 = model->addOperand(&type20);
330   // Phase 2, operations
331   static int32_t param_init[] = {0};
332   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
333   static int32_t param1_init[] = {0};
334   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
335   static int32_t param2_init[] = {0};
336   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
337   static int32_t param3_init[] = {0};
338   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
339   static int32_t param4_init[] = {1};
340   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
341   static int32_t param5_init[] = {1};
342   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
343   static int32_t param6_init[] = {1};
344   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
345   static int32_t param7_init[] = {1};
346   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
347   static int32_t param8_init[] = {0};
348   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
349   static bool8 layout_init[] = {true};
350   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
351   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
352   // Phase 3, inputs and outputs
353   model->identifyInputsAndOutputs(
354     {op1},
355     {op4});
356   assert(model->isValid());
357 }
358 
is_ignored_nchw_quant8(int i)359 inline bool is_ignored_nchw_quant8(int i) {
360   static std::set<int> ignore = {};
361   return ignore.find(i) != ignore.end();
362 }
363 
CreateModel_nchw_float16(Model * model)364 void CreateModel_nchw_float16(Model *model) {
365   OperandType type0(Type::BOOL, {});
366   OperandType type2(Type::INT32, {});
367   OperandType type21(Type::TENSOR_FLOAT16, {1, 1, 2, 2});
368   // Phase 1, operands
369   auto op1 = model->addOperand(&type21);
370   auto param = model->addOperand(&type2);
371   auto param1 = model->addOperand(&type2);
372   auto param2 = model->addOperand(&type2);
373   auto param3 = model->addOperand(&type2);
374   auto param4 = model->addOperand(&type2);
375   auto param5 = model->addOperand(&type2);
376   auto param6 = model->addOperand(&type2);
377   auto param7 = model->addOperand(&type2);
378   auto param8 = model->addOperand(&type2);
379   auto layout = model->addOperand(&type0);
380   auto op4 = model->addOperand(&type21);
381   // Phase 2, operations
382   static int32_t param_init[] = {0};
383   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
384   static int32_t param1_init[] = {0};
385   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
386   static int32_t param2_init[] = {0};
387   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
388   static int32_t param3_init[] = {0};
389   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
390   static int32_t param4_init[] = {1};
391   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
392   static int32_t param5_init[] = {1};
393   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
394   static int32_t param6_init[] = {1};
395   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
396   static int32_t param7_init[] = {1};
397   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
398   static int32_t param8_init[] = {0};
399   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
400   static bool8 layout_init[] = {true};
401   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
402   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
403   // Phase 3, inputs and outputs
404   model->identifyInputsAndOutputs(
405     {op1},
406     {op4});
407   assert(model->isValid());
408 }
409 
is_ignored_nchw_float16(int i)410 inline bool is_ignored_nchw_float16(int i) {
411   static std::set<int> ignore = {};
412   return ignore.find(i) != ignore.end();
413 }
414 
CreateModel_dynamic_output_shape_nhwc(Model * model)415 void CreateModel_dynamic_output_shape_nhwc(Model *model) {
416   OperandType type0(Type::BOOL, {});
417   OperandType type1(Type::TENSOR_FLOAT32, {1, 2, 2, 1});
418   OperandType type2(Type::INT32, {});
419   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
420   // Phase 1, operands
421   auto op1 = model->addOperand(&type1);
422   auto param = model->addOperand(&type2);
423   auto param1 = model->addOperand(&type2);
424   auto param2 = model->addOperand(&type2);
425   auto param3 = model->addOperand(&type2);
426   auto param4 = model->addOperand(&type2);
427   auto param5 = model->addOperand(&type2);
428   auto param6 = model->addOperand(&type2);
429   auto param7 = model->addOperand(&type2);
430   auto param8 = model->addOperand(&type2);
431   auto layout = model->addOperand(&type0);
432   auto op4 = model->addOperand(&type22);
433   // Phase 2, operations
434   static int32_t param_init[] = {0};
435   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
436   static int32_t param1_init[] = {0};
437   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
438   static int32_t param2_init[] = {0};
439   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
440   static int32_t param3_init[] = {0};
441   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
442   static int32_t param4_init[] = {1};
443   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
444   static int32_t param5_init[] = {1};
445   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
446   static int32_t param6_init[] = {1};
447   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
448   static int32_t param7_init[] = {1};
449   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
450   static int32_t param8_init[] = {0};
451   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
452   static bool8 layout_init[] = {false};
453   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
454   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
455   // Phase 3, inputs and outputs
456   model->identifyInputsAndOutputs(
457     {op1},
458     {op4});
459   assert(model->isValid());
460 }
461 
is_ignored_dynamic_output_shape_nhwc(int i)462 inline bool is_ignored_dynamic_output_shape_nhwc(int i) {
463   static std::set<int> ignore = {};
464   return ignore.find(i) != ignore.end();
465 }
466 
CreateModel_dynamic_output_shape_nhwc_relaxed(Model * model)467 void CreateModel_dynamic_output_shape_nhwc_relaxed(Model *model) {
468   OperandType type0(Type::BOOL, {});
469   OperandType type1(Type::TENSOR_FLOAT32, {1, 2, 2, 1});
470   OperandType type2(Type::INT32, {});
471   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
472   // Phase 1, operands
473   auto op1 = model->addOperand(&type1);
474   auto param = model->addOperand(&type2);
475   auto param1 = model->addOperand(&type2);
476   auto param2 = model->addOperand(&type2);
477   auto param3 = model->addOperand(&type2);
478   auto param4 = model->addOperand(&type2);
479   auto param5 = model->addOperand(&type2);
480   auto param6 = model->addOperand(&type2);
481   auto param7 = model->addOperand(&type2);
482   auto param8 = model->addOperand(&type2);
483   auto layout = model->addOperand(&type0);
484   auto op4 = model->addOperand(&type22);
485   // Phase 2, operations
486   static int32_t param_init[] = {0};
487   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
488   static int32_t param1_init[] = {0};
489   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
490   static int32_t param2_init[] = {0};
491   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
492   static int32_t param3_init[] = {0};
493   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
494   static int32_t param4_init[] = {1};
495   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
496   static int32_t param5_init[] = {1};
497   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
498   static int32_t param6_init[] = {1};
499   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
500   static int32_t param7_init[] = {1};
501   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
502   static int32_t param8_init[] = {0};
503   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
504   static bool8 layout_init[] = {false};
505   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
506   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
507   // Phase 3, inputs and outputs
508   model->identifyInputsAndOutputs(
509     {op1},
510     {op4});
511   // Phase 4: set relaxed execution
512   model->relaxComputationFloat32toFloat16(true);
513   assert(model->isValid());
514 }
515 
is_ignored_dynamic_output_shape_nhwc_relaxed(int i)516 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed(int i) {
517   static std::set<int> ignore = {};
518   return ignore.find(i) != ignore.end();
519 }
520 
CreateModel_dynamic_output_shape_nhwc_quant8(Model * model)521 void CreateModel_dynamic_output_shape_nhwc_quant8(Model *model) {
522   OperandType type0(Type::BOOL, {});
523   OperandType type17(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.5f, 0);
524   OperandType type2(Type::INT32, {});
525   OperandType type23(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
526   // Phase 1, operands
527   auto op1 = model->addOperand(&type17);
528   auto param = model->addOperand(&type2);
529   auto param1 = model->addOperand(&type2);
530   auto param2 = model->addOperand(&type2);
531   auto param3 = model->addOperand(&type2);
532   auto param4 = model->addOperand(&type2);
533   auto param5 = model->addOperand(&type2);
534   auto param6 = model->addOperand(&type2);
535   auto param7 = model->addOperand(&type2);
536   auto param8 = model->addOperand(&type2);
537   auto layout = model->addOperand(&type0);
538   auto op4 = model->addOperand(&type23);
539   // Phase 2, operations
540   static int32_t param_init[] = {0};
541   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
542   static int32_t param1_init[] = {0};
543   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
544   static int32_t param2_init[] = {0};
545   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
546   static int32_t param3_init[] = {0};
547   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
548   static int32_t param4_init[] = {1};
549   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
550   static int32_t param5_init[] = {1};
551   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
552   static int32_t param6_init[] = {1};
553   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
554   static int32_t param7_init[] = {1};
555   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
556   static int32_t param8_init[] = {0};
557   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
558   static bool8 layout_init[] = {false};
559   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
560   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
561   // Phase 3, inputs and outputs
562   model->identifyInputsAndOutputs(
563     {op1},
564     {op4});
565   assert(model->isValid());
566 }
567 
is_ignored_dynamic_output_shape_nhwc_quant8(int i)568 inline bool is_ignored_dynamic_output_shape_nhwc_quant8(int i) {
569   static std::set<int> ignore = {};
570   return ignore.find(i) != ignore.end();
571 }
572 
CreateModel_dynamic_output_shape_nhwc_float16(Model * model)573 void CreateModel_dynamic_output_shape_nhwc_float16(Model *model) {
574   OperandType type0(Type::BOOL, {});
575   OperandType type18(Type::TENSOR_FLOAT16, {1, 2, 2, 1});
576   OperandType type2(Type::INT32, {});
577   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
578   // Phase 1, operands
579   auto op1 = model->addOperand(&type18);
580   auto param = model->addOperand(&type2);
581   auto param1 = model->addOperand(&type2);
582   auto param2 = model->addOperand(&type2);
583   auto param3 = model->addOperand(&type2);
584   auto param4 = model->addOperand(&type2);
585   auto param5 = model->addOperand(&type2);
586   auto param6 = model->addOperand(&type2);
587   auto param7 = model->addOperand(&type2);
588   auto param8 = model->addOperand(&type2);
589   auto layout = model->addOperand(&type0);
590   auto op4 = model->addOperand(&type24);
591   // Phase 2, operations
592   static int32_t param_init[] = {0};
593   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
594   static int32_t param1_init[] = {0};
595   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
596   static int32_t param2_init[] = {0};
597   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
598   static int32_t param3_init[] = {0};
599   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
600   static int32_t param4_init[] = {1};
601   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
602   static int32_t param5_init[] = {1};
603   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
604   static int32_t param6_init[] = {1};
605   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
606   static int32_t param7_init[] = {1};
607   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
608   static int32_t param8_init[] = {0};
609   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
610   static bool8 layout_init[] = {false};
611   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
612   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
613   // Phase 3, inputs and outputs
614   model->identifyInputsAndOutputs(
615     {op1},
616     {op4});
617   assert(model->isValid());
618 }
619 
is_ignored_dynamic_output_shape_nhwc_float16(int i)620 inline bool is_ignored_dynamic_output_shape_nhwc_float16(int i) {
621   static std::set<int> ignore = {};
622   return ignore.find(i) != ignore.end();
623 }
624 
CreateModel_dynamic_output_shape_nchw(Model * model)625 void CreateModel_dynamic_output_shape_nchw(Model *model) {
626   OperandType type0(Type::BOOL, {});
627   OperandType type19(Type::TENSOR_FLOAT32, {1, 1, 2, 2});
628   OperandType type2(Type::INT32, {});
629   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
630   // Phase 1, operands
631   auto op1 = model->addOperand(&type19);
632   auto param = model->addOperand(&type2);
633   auto param1 = model->addOperand(&type2);
634   auto param2 = model->addOperand(&type2);
635   auto param3 = model->addOperand(&type2);
636   auto param4 = model->addOperand(&type2);
637   auto param5 = model->addOperand(&type2);
638   auto param6 = model->addOperand(&type2);
639   auto param7 = model->addOperand(&type2);
640   auto param8 = model->addOperand(&type2);
641   auto layout = model->addOperand(&type0);
642   auto op4 = model->addOperand(&type22);
643   // Phase 2, operations
644   static int32_t param_init[] = {0};
645   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
646   static int32_t param1_init[] = {0};
647   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
648   static int32_t param2_init[] = {0};
649   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
650   static int32_t param3_init[] = {0};
651   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
652   static int32_t param4_init[] = {1};
653   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
654   static int32_t param5_init[] = {1};
655   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
656   static int32_t param6_init[] = {1};
657   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
658   static int32_t param7_init[] = {1};
659   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
660   static int32_t param8_init[] = {0};
661   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
662   static bool8 layout_init[] = {true};
663   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
664   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
665   // Phase 3, inputs and outputs
666   model->identifyInputsAndOutputs(
667     {op1},
668     {op4});
669   assert(model->isValid());
670 }
671 
is_ignored_dynamic_output_shape_nchw(int i)672 inline bool is_ignored_dynamic_output_shape_nchw(int i) {
673   static std::set<int> ignore = {};
674   return ignore.find(i) != ignore.end();
675 }
676 
CreateModel_dynamic_output_shape_nchw_relaxed(Model * model)677 void CreateModel_dynamic_output_shape_nchw_relaxed(Model *model) {
678   OperandType type0(Type::BOOL, {});
679   OperandType type19(Type::TENSOR_FLOAT32, {1, 1, 2, 2});
680   OperandType type2(Type::INT32, {});
681   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
682   // Phase 1, operands
683   auto op1 = model->addOperand(&type19);
684   auto param = model->addOperand(&type2);
685   auto param1 = model->addOperand(&type2);
686   auto param2 = model->addOperand(&type2);
687   auto param3 = model->addOperand(&type2);
688   auto param4 = model->addOperand(&type2);
689   auto param5 = model->addOperand(&type2);
690   auto param6 = model->addOperand(&type2);
691   auto param7 = model->addOperand(&type2);
692   auto param8 = model->addOperand(&type2);
693   auto layout = model->addOperand(&type0);
694   auto op4 = model->addOperand(&type22);
695   // Phase 2, operations
696   static int32_t param_init[] = {0};
697   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
698   static int32_t param1_init[] = {0};
699   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
700   static int32_t param2_init[] = {0};
701   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
702   static int32_t param3_init[] = {0};
703   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
704   static int32_t param4_init[] = {1};
705   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
706   static int32_t param5_init[] = {1};
707   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
708   static int32_t param6_init[] = {1};
709   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
710   static int32_t param7_init[] = {1};
711   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
712   static int32_t param8_init[] = {0};
713   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
714   static bool8 layout_init[] = {true};
715   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
716   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
717   // Phase 3, inputs and outputs
718   model->identifyInputsAndOutputs(
719     {op1},
720     {op4});
721   // Phase 4: set relaxed execution
722   model->relaxComputationFloat32toFloat16(true);
723   assert(model->isValid());
724 }
725 
is_ignored_dynamic_output_shape_nchw_relaxed(int i)726 inline bool is_ignored_dynamic_output_shape_nchw_relaxed(int i) {
727   static std::set<int> ignore = {};
728   return ignore.find(i) != ignore.end();
729 }
730 
CreateModel_dynamic_output_shape_nchw_quant8(Model * model)731 void CreateModel_dynamic_output_shape_nchw_quant8(Model *model) {
732   OperandType type0(Type::BOOL, {});
733   OperandType type2(Type::INT32, {});
734   OperandType type20(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 2}, 0.5f, 0);
735   OperandType type23(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
736   // Phase 1, operands
737   auto op1 = model->addOperand(&type20);
738   auto param = model->addOperand(&type2);
739   auto param1 = model->addOperand(&type2);
740   auto param2 = model->addOperand(&type2);
741   auto param3 = model->addOperand(&type2);
742   auto param4 = model->addOperand(&type2);
743   auto param5 = model->addOperand(&type2);
744   auto param6 = model->addOperand(&type2);
745   auto param7 = model->addOperand(&type2);
746   auto param8 = model->addOperand(&type2);
747   auto layout = model->addOperand(&type0);
748   auto op4 = model->addOperand(&type23);
749   // Phase 2, operations
750   static int32_t param_init[] = {0};
751   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
752   static int32_t param1_init[] = {0};
753   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
754   static int32_t param2_init[] = {0};
755   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
756   static int32_t param3_init[] = {0};
757   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
758   static int32_t param4_init[] = {1};
759   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
760   static int32_t param5_init[] = {1};
761   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
762   static int32_t param6_init[] = {1};
763   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
764   static int32_t param7_init[] = {1};
765   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
766   static int32_t param8_init[] = {0};
767   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
768   static bool8 layout_init[] = {true};
769   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
770   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
771   // Phase 3, inputs and outputs
772   model->identifyInputsAndOutputs(
773     {op1},
774     {op4});
775   assert(model->isValid());
776 }
777 
is_ignored_dynamic_output_shape_nchw_quant8(int i)778 inline bool is_ignored_dynamic_output_shape_nchw_quant8(int i) {
779   static std::set<int> ignore = {};
780   return ignore.find(i) != ignore.end();
781 }
782 
CreateModel_dynamic_output_shape_nchw_float16(Model * model)783 void CreateModel_dynamic_output_shape_nchw_float16(Model *model) {
784   OperandType type0(Type::BOOL, {});
785   OperandType type2(Type::INT32, {});
786   OperandType type21(Type::TENSOR_FLOAT16, {1, 1, 2, 2});
787   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
788   // Phase 1, operands
789   auto op1 = model->addOperand(&type21);
790   auto param = model->addOperand(&type2);
791   auto param1 = model->addOperand(&type2);
792   auto param2 = model->addOperand(&type2);
793   auto param3 = model->addOperand(&type2);
794   auto param4 = model->addOperand(&type2);
795   auto param5 = model->addOperand(&type2);
796   auto param6 = model->addOperand(&type2);
797   auto param7 = model->addOperand(&type2);
798   auto param8 = model->addOperand(&type2);
799   auto layout = model->addOperand(&type0);
800   auto op4 = model->addOperand(&type24);
801   // Phase 2, operations
802   static int32_t param_init[] = {0};
803   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
804   static int32_t param1_init[] = {0};
805   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
806   static int32_t param2_init[] = {0};
807   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
808   static int32_t param3_init[] = {0};
809   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
810   static int32_t param4_init[] = {1};
811   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
812   static int32_t param5_init[] = {1};
813   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
814   static int32_t param6_init[] = {1};
815   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
816   static int32_t param7_init[] = {1};
817   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
818   static int32_t param8_init[] = {0};
819   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
820   static bool8 layout_init[] = {true};
821   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
822   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
823   // Phase 3, inputs and outputs
824   model->identifyInputsAndOutputs(
825     {op1},
826     {op4});
827   assert(model->isValid());
828 }
829 
is_ignored_dynamic_output_shape_nchw_float16(int i)830 inline bool is_ignored_dynamic_output_shape_nchw_float16(int i) {
831   static std::set<int> ignore = {};
832   return ignore.find(i) != ignore.end();
833 }
834 
CreateModel_nhwc_2(Model * model)835 void CreateModel_nhwc_2(Model *model) {
836   OperandType type0(Type::BOOL, {});
837   OperandType type2(Type::INT32, {});
838   OperandType type3(Type::TENSOR_FLOAT32, {5, 50, 70, 3});
839   OperandType type4(Type::TENSOR_FLOAT32, {5, 2, 3, 3});
840   // Phase 1, operands
841   auto op11 = model->addOperand(&type3);
842   auto param9 = model->addOperand(&type2);
843   auto param10 = model->addOperand(&type2);
844   auto param11 = model->addOperand(&type2);
845   auto param12 = model->addOperand(&type2);
846   auto param13 = model->addOperand(&type2);
847   auto param14 = model->addOperand(&type2);
848   auto param15 = model->addOperand(&type2);
849   auto param16 = model->addOperand(&type2);
850   auto param17 = model->addOperand(&type2);
851   auto layout = model->addOperand(&type0);
852   auto op41 = model->addOperand(&type4);
853   // Phase 2, operations
854   static int32_t param9_init[] = {0};
855   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
856   static int32_t param10_init[] = {0};
857   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
858   static int32_t param11_init[] = {0};
859   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
860   static int32_t param12_init[] = {0};
861   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
862   static int32_t param13_init[] = {20};
863   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
864   static int32_t param14_init[] = {20};
865   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
866   static int32_t param15_init[] = {20};
867   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
868   static int32_t param16_init[] = {20};
869   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
870   static int32_t param17_init[] = {0};
871   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
872   static bool8 layout_init[] = {false};
873   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
874   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
875   // Phase 3, inputs and outputs
876   model->identifyInputsAndOutputs(
877     {op11},
878     {op41});
879   assert(model->isValid());
880 }
881 
is_ignored_nhwc_2(int i)882 inline bool is_ignored_nhwc_2(int i) {
883   static std::set<int> ignore = {};
884   return ignore.find(i) != ignore.end();
885 }
886 
CreateModel_nhwc_relaxed_2(Model * model)887 void CreateModel_nhwc_relaxed_2(Model *model) {
888   OperandType type0(Type::BOOL, {});
889   OperandType type2(Type::INT32, {});
890   OperandType type3(Type::TENSOR_FLOAT32, {5, 50, 70, 3});
891   OperandType type4(Type::TENSOR_FLOAT32, {5, 2, 3, 3});
892   // Phase 1, operands
893   auto op11 = model->addOperand(&type3);
894   auto param9 = model->addOperand(&type2);
895   auto param10 = model->addOperand(&type2);
896   auto param11 = model->addOperand(&type2);
897   auto param12 = model->addOperand(&type2);
898   auto param13 = model->addOperand(&type2);
899   auto param14 = model->addOperand(&type2);
900   auto param15 = model->addOperand(&type2);
901   auto param16 = model->addOperand(&type2);
902   auto param17 = model->addOperand(&type2);
903   auto layout = model->addOperand(&type0);
904   auto op41 = model->addOperand(&type4);
905   // Phase 2, operations
906   static int32_t param9_init[] = {0};
907   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
908   static int32_t param10_init[] = {0};
909   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
910   static int32_t param11_init[] = {0};
911   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
912   static int32_t param12_init[] = {0};
913   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
914   static int32_t param13_init[] = {20};
915   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
916   static int32_t param14_init[] = {20};
917   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
918   static int32_t param15_init[] = {20};
919   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
920   static int32_t param16_init[] = {20};
921   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
922   static int32_t param17_init[] = {0};
923   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
924   static bool8 layout_init[] = {false};
925   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
926   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
927   // Phase 3, inputs and outputs
928   model->identifyInputsAndOutputs(
929     {op11},
930     {op41});
931   // Phase 4: set relaxed execution
932   model->relaxComputationFloat32toFloat16(true);
933   assert(model->isValid());
934 }
935 
is_ignored_nhwc_relaxed_2(int i)936 inline bool is_ignored_nhwc_relaxed_2(int i) {
937   static std::set<int> ignore = {};
938   return ignore.find(i) != ignore.end();
939 }
940 
CreateModel_nhwc_quant8_2(Model * model)941 void CreateModel_nhwc_quant8_2(Model *model) {
942   OperandType type0(Type::BOOL, {});
943   OperandType type2(Type::INT32, {});
944   OperandType type25(Type::TENSOR_QUANT8_ASYMM, {5, 50, 70, 3}, 0.5f, 0);
945   OperandType type26(Type::TENSOR_QUANT8_ASYMM, {5, 2, 3, 3}, 0.5f, 0);
946   // Phase 1, operands
947   auto op11 = model->addOperand(&type25);
948   auto param9 = model->addOperand(&type2);
949   auto param10 = model->addOperand(&type2);
950   auto param11 = model->addOperand(&type2);
951   auto param12 = model->addOperand(&type2);
952   auto param13 = model->addOperand(&type2);
953   auto param14 = model->addOperand(&type2);
954   auto param15 = model->addOperand(&type2);
955   auto param16 = model->addOperand(&type2);
956   auto param17 = model->addOperand(&type2);
957   auto layout = model->addOperand(&type0);
958   auto op41 = model->addOperand(&type26);
959   // Phase 2, operations
960   static int32_t param9_init[] = {0};
961   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
962   static int32_t param10_init[] = {0};
963   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
964   static int32_t param11_init[] = {0};
965   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
966   static int32_t param12_init[] = {0};
967   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
968   static int32_t param13_init[] = {20};
969   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
970   static int32_t param14_init[] = {20};
971   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
972   static int32_t param15_init[] = {20};
973   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
974   static int32_t param16_init[] = {20};
975   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
976   static int32_t param17_init[] = {0};
977   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
978   static bool8 layout_init[] = {false};
979   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
980   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
981   // Phase 3, inputs and outputs
982   model->identifyInputsAndOutputs(
983     {op11},
984     {op41});
985   assert(model->isValid());
986 }
987 
is_ignored_nhwc_quant8_2(int i)988 inline bool is_ignored_nhwc_quant8_2(int i) {
989   static std::set<int> ignore = {};
990   return ignore.find(i) != ignore.end();
991 }
992 
CreateModel_nhwc_float16_2(Model * model)993 void CreateModel_nhwc_float16_2(Model *model) {
994   OperandType type0(Type::BOOL, {});
995   OperandType type2(Type::INT32, {});
996   OperandType type27(Type::TENSOR_FLOAT16, {5, 50, 70, 3});
997   OperandType type28(Type::TENSOR_FLOAT16, {5, 2, 3, 3});
998   // Phase 1, operands
999   auto op11 = model->addOperand(&type27);
1000   auto param9 = model->addOperand(&type2);
1001   auto param10 = model->addOperand(&type2);
1002   auto param11 = model->addOperand(&type2);
1003   auto param12 = model->addOperand(&type2);
1004   auto param13 = model->addOperand(&type2);
1005   auto param14 = model->addOperand(&type2);
1006   auto param15 = model->addOperand(&type2);
1007   auto param16 = model->addOperand(&type2);
1008   auto param17 = model->addOperand(&type2);
1009   auto layout = model->addOperand(&type0);
1010   auto op41 = model->addOperand(&type28);
1011   // Phase 2, operations
1012   static int32_t param9_init[] = {0};
1013   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1014   static int32_t param10_init[] = {0};
1015   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1016   static int32_t param11_init[] = {0};
1017   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1018   static int32_t param12_init[] = {0};
1019   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1020   static int32_t param13_init[] = {20};
1021   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1022   static int32_t param14_init[] = {20};
1023   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1024   static int32_t param15_init[] = {20};
1025   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1026   static int32_t param16_init[] = {20};
1027   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1028   static int32_t param17_init[] = {0};
1029   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1030   static bool8 layout_init[] = {false};
1031   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1032   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1033   // Phase 3, inputs and outputs
1034   model->identifyInputsAndOutputs(
1035     {op11},
1036     {op41});
1037   assert(model->isValid());
1038 }
1039 
is_ignored_nhwc_float16_2(int i)1040 inline bool is_ignored_nhwc_float16_2(int i) {
1041   static std::set<int> ignore = {};
1042   return ignore.find(i) != ignore.end();
1043 }
1044 
CreateModel_nchw_2(Model * model)1045 void CreateModel_nchw_2(Model *model) {
1046   OperandType type0(Type::BOOL, {});
1047   OperandType type2(Type::INT32, {});
1048   OperandType type29(Type::TENSOR_FLOAT32, {5, 3, 50, 70});
1049   OperandType type30(Type::TENSOR_FLOAT32, {5, 3, 2, 3});
1050   // Phase 1, operands
1051   auto op11 = model->addOperand(&type29);
1052   auto param9 = model->addOperand(&type2);
1053   auto param10 = model->addOperand(&type2);
1054   auto param11 = model->addOperand(&type2);
1055   auto param12 = model->addOperand(&type2);
1056   auto param13 = model->addOperand(&type2);
1057   auto param14 = model->addOperand(&type2);
1058   auto param15 = model->addOperand(&type2);
1059   auto param16 = model->addOperand(&type2);
1060   auto param17 = model->addOperand(&type2);
1061   auto layout = model->addOperand(&type0);
1062   auto op41 = model->addOperand(&type30);
1063   // Phase 2, operations
1064   static int32_t param9_init[] = {0};
1065   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1066   static int32_t param10_init[] = {0};
1067   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1068   static int32_t param11_init[] = {0};
1069   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1070   static int32_t param12_init[] = {0};
1071   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1072   static int32_t param13_init[] = {20};
1073   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1074   static int32_t param14_init[] = {20};
1075   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1076   static int32_t param15_init[] = {20};
1077   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1078   static int32_t param16_init[] = {20};
1079   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1080   static int32_t param17_init[] = {0};
1081   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1082   static bool8 layout_init[] = {true};
1083   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1084   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1085   // Phase 3, inputs and outputs
1086   model->identifyInputsAndOutputs(
1087     {op11},
1088     {op41});
1089   assert(model->isValid());
1090 }
1091 
is_ignored_nchw_2(int i)1092 inline bool is_ignored_nchw_2(int i) {
1093   static std::set<int> ignore = {};
1094   return ignore.find(i) != ignore.end();
1095 }
1096 
CreateModel_nchw_relaxed_2(Model * model)1097 void CreateModel_nchw_relaxed_2(Model *model) {
1098   OperandType type0(Type::BOOL, {});
1099   OperandType type2(Type::INT32, {});
1100   OperandType type29(Type::TENSOR_FLOAT32, {5, 3, 50, 70});
1101   OperandType type30(Type::TENSOR_FLOAT32, {5, 3, 2, 3});
1102   // Phase 1, operands
1103   auto op11 = model->addOperand(&type29);
1104   auto param9 = model->addOperand(&type2);
1105   auto param10 = model->addOperand(&type2);
1106   auto param11 = model->addOperand(&type2);
1107   auto param12 = model->addOperand(&type2);
1108   auto param13 = model->addOperand(&type2);
1109   auto param14 = model->addOperand(&type2);
1110   auto param15 = model->addOperand(&type2);
1111   auto param16 = model->addOperand(&type2);
1112   auto param17 = model->addOperand(&type2);
1113   auto layout = model->addOperand(&type0);
1114   auto op41 = model->addOperand(&type30);
1115   // Phase 2, operations
1116   static int32_t param9_init[] = {0};
1117   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1118   static int32_t param10_init[] = {0};
1119   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1120   static int32_t param11_init[] = {0};
1121   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1122   static int32_t param12_init[] = {0};
1123   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1124   static int32_t param13_init[] = {20};
1125   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1126   static int32_t param14_init[] = {20};
1127   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1128   static int32_t param15_init[] = {20};
1129   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1130   static int32_t param16_init[] = {20};
1131   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1132   static int32_t param17_init[] = {0};
1133   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1134   static bool8 layout_init[] = {true};
1135   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1136   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1137   // Phase 3, inputs and outputs
1138   model->identifyInputsAndOutputs(
1139     {op11},
1140     {op41});
1141   // Phase 4: set relaxed execution
1142   model->relaxComputationFloat32toFloat16(true);
1143   assert(model->isValid());
1144 }
1145 
is_ignored_nchw_relaxed_2(int i)1146 inline bool is_ignored_nchw_relaxed_2(int i) {
1147   static std::set<int> ignore = {};
1148   return ignore.find(i) != ignore.end();
1149 }
1150 
CreateModel_nchw_quant8_2(Model * model)1151 void CreateModel_nchw_quant8_2(Model *model) {
1152   OperandType type0(Type::BOOL, {});
1153   OperandType type2(Type::INT32, {});
1154   OperandType type31(Type::TENSOR_QUANT8_ASYMM, {5, 3, 50, 70}, 0.5f, 0);
1155   OperandType type32(Type::TENSOR_QUANT8_ASYMM, {5, 3, 2, 3}, 0.5f, 0);
1156   // Phase 1, operands
1157   auto op11 = model->addOperand(&type31);
1158   auto param9 = model->addOperand(&type2);
1159   auto param10 = model->addOperand(&type2);
1160   auto param11 = model->addOperand(&type2);
1161   auto param12 = model->addOperand(&type2);
1162   auto param13 = model->addOperand(&type2);
1163   auto param14 = model->addOperand(&type2);
1164   auto param15 = model->addOperand(&type2);
1165   auto param16 = model->addOperand(&type2);
1166   auto param17 = model->addOperand(&type2);
1167   auto layout = model->addOperand(&type0);
1168   auto op41 = model->addOperand(&type32);
1169   // Phase 2, operations
1170   static int32_t param9_init[] = {0};
1171   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1172   static int32_t param10_init[] = {0};
1173   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1174   static int32_t param11_init[] = {0};
1175   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1176   static int32_t param12_init[] = {0};
1177   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1178   static int32_t param13_init[] = {20};
1179   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1180   static int32_t param14_init[] = {20};
1181   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1182   static int32_t param15_init[] = {20};
1183   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1184   static int32_t param16_init[] = {20};
1185   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1186   static int32_t param17_init[] = {0};
1187   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1188   static bool8 layout_init[] = {true};
1189   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1190   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1191   // Phase 3, inputs and outputs
1192   model->identifyInputsAndOutputs(
1193     {op11},
1194     {op41});
1195   assert(model->isValid());
1196 }
1197 
is_ignored_nchw_quant8_2(int i)1198 inline bool is_ignored_nchw_quant8_2(int i) {
1199   static std::set<int> ignore = {};
1200   return ignore.find(i) != ignore.end();
1201 }
1202 
CreateModel_nchw_float16_2(Model * model)1203 void CreateModel_nchw_float16_2(Model *model) {
1204   OperandType type0(Type::BOOL, {});
1205   OperandType type2(Type::INT32, {});
1206   OperandType type33(Type::TENSOR_FLOAT16, {5, 3, 50, 70});
1207   OperandType type34(Type::TENSOR_FLOAT16, {5, 3, 2, 3});
1208   // Phase 1, operands
1209   auto op11 = model->addOperand(&type33);
1210   auto param9 = model->addOperand(&type2);
1211   auto param10 = model->addOperand(&type2);
1212   auto param11 = model->addOperand(&type2);
1213   auto param12 = model->addOperand(&type2);
1214   auto param13 = model->addOperand(&type2);
1215   auto param14 = model->addOperand(&type2);
1216   auto param15 = model->addOperand(&type2);
1217   auto param16 = model->addOperand(&type2);
1218   auto param17 = model->addOperand(&type2);
1219   auto layout = model->addOperand(&type0);
1220   auto op41 = model->addOperand(&type34);
1221   // Phase 2, operations
1222   static int32_t param9_init[] = {0};
1223   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1224   static int32_t param10_init[] = {0};
1225   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1226   static int32_t param11_init[] = {0};
1227   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1228   static int32_t param12_init[] = {0};
1229   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1230   static int32_t param13_init[] = {20};
1231   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1232   static int32_t param14_init[] = {20};
1233   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1234   static int32_t param15_init[] = {20};
1235   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1236   static int32_t param16_init[] = {20};
1237   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1238   static int32_t param17_init[] = {0};
1239   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1240   static bool8 layout_init[] = {true};
1241   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1242   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1243   // Phase 3, inputs and outputs
1244   model->identifyInputsAndOutputs(
1245     {op11},
1246     {op41});
1247   assert(model->isValid());
1248 }
1249 
is_ignored_nchw_float16_2(int i)1250 inline bool is_ignored_nchw_float16_2(int i) {
1251   static std::set<int> ignore = {};
1252   return ignore.find(i) != ignore.end();
1253 }
1254 
CreateModel_dynamic_output_shape_nhwc_2(Model * model)1255 void CreateModel_dynamic_output_shape_nhwc_2(Model *model) {
1256   OperandType type0(Type::BOOL, {});
1257   OperandType type2(Type::INT32, {});
1258   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
1259   OperandType type3(Type::TENSOR_FLOAT32, {5, 50, 70, 3});
1260   // Phase 1, operands
1261   auto op11 = model->addOperand(&type3);
1262   auto param9 = model->addOperand(&type2);
1263   auto param10 = model->addOperand(&type2);
1264   auto param11 = model->addOperand(&type2);
1265   auto param12 = model->addOperand(&type2);
1266   auto param13 = model->addOperand(&type2);
1267   auto param14 = model->addOperand(&type2);
1268   auto param15 = model->addOperand(&type2);
1269   auto param16 = model->addOperand(&type2);
1270   auto param17 = model->addOperand(&type2);
1271   auto layout = model->addOperand(&type0);
1272   auto op41 = model->addOperand(&type22);
1273   // Phase 2, operations
1274   static int32_t param9_init[] = {0};
1275   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1276   static int32_t param10_init[] = {0};
1277   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1278   static int32_t param11_init[] = {0};
1279   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1280   static int32_t param12_init[] = {0};
1281   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1282   static int32_t param13_init[] = {20};
1283   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1284   static int32_t param14_init[] = {20};
1285   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1286   static int32_t param15_init[] = {20};
1287   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1288   static int32_t param16_init[] = {20};
1289   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1290   static int32_t param17_init[] = {0};
1291   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1292   static bool8 layout_init[] = {false};
1293   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1294   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1295   // Phase 3, inputs and outputs
1296   model->identifyInputsAndOutputs(
1297     {op11},
1298     {op41});
1299   assert(model->isValid());
1300 }
1301 
is_ignored_dynamic_output_shape_nhwc_2(int i)1302 inline bool is_ignored_dynamic_output_shape_nhwc_2(int i) {
1303   static std::set<int> ignore = {};
1304   return ignore.find(i) != ignore.end();
1305 }
1306 
CreateModel_dynamic_output_shape_nhwc_relaxed_2(Model * model)1307 void CreateModel_dynamic_output_shape_nhwc_relaxed_2(Model *model) {
1308   OperandType type0(Type::BOOL, {});
1309   OperandType type2(Type::INT32, {});
1310   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
1311   OperandType type3(Type::TENSOR_FLOAT32, {5, 50, 70, 3});
1312   // Phase 1, operands
1313   auto op11 = model->addOperand(&type3);
1314   auto param9 = model->addOperand(&type2);
1315   auto param10 = model->addOperand(&type2);
1316   auto param11 = model->addOperand(&type2);
1317   auto param12 = model->addOperand(&type2);
1318   auto param13 = model->addOperand(&type2);
1319   auto param14 = model->addOperand(&type2);
1320   auto param15 = model->addOperand(&type2);
1321   auto param16 = model->addOperand(&type2);
1322   auto param17 = model->addOperand(&type2);
1323   auto layout = model->addOperand(&type0);
1324   auto op41 = model->addOperand(&type22);
1325   // Phase 2, operations
1326   static int32_t param9_init[] = {0};
1327   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1328   static int32_t param10_init[] = {0};
1329   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1330   static int32_t param11_init[] = {0};
1331   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1332   static int32_t param12_init[] = {0};
1333   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1334   static int32_t param13_init[] = {20};
1335   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1336   static int32_t param14_init[] = {20};
1337   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1338   static int32_t param15_init[] = {20};
1339   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1340   static int32_t param16_init[] = {20};
1341   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1342   static int32_t param17_init[] = {0};
1343   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1344   static bool8 layout_init[] = {false};
1345   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1346   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1347   // Phase 3, inputs and outputs
1348   model->identifyInputsAndOutputs(
1349     {op11},
1350     {op41});
1351   // Phase 4: set relaxed execution
1352   model->relaxComputationFloat32toFloat16(true);
1353   assert(model->isValid());
1354 }
1355 
is_ignored_dynamic_output_shape_nhwc_relaxed_2(int i)1356 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_2(int i) {
1357   static std::set<int> ignore = {};
1358   return ignore.find(i) != ignore.end();
1359 }
1360 
CreateModel_dynamic_output_shape_nhwc_quant8_2(Model * model)1361 void CreateModel_dynamic_output_shape_nhwc_quant8_2(Model *model) {
1362   OperandType type0(Type::BOOL, {});
1363   OperandType type2(Type::INT32, {});
1364   OperandType type23(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
1365   OperandType type25(Type::TENSOR_QUANT8_ASYMM, {5, 50, 70, 3}, 0.5f, 0);
1366   // Phase 1, operands
1367   auto op11 = model->addOperand(&type25);
1368   auto param9 = model->addOperand(&type2);
1369   auto param10 = model->addOperand(&type2);
1370   auto param11 = model->addOperand(&type2);
1371   auto param12 = model->addOperand(&type2);
1372   auto param13 = model->addOperand(&type2);
1373   auto param14 = model->addOperand(&type2);
1374   auto param15 = model->addOperand(&type2);
1375   auto param16 = model->addOperand(&type2);
1376   auto param17 = model->addOperand(&type2);
1377   auto layout = model->addOperand(&type0);
1378   auto op41 = model->addOperand(&type23);
1379   // Phase 2, operations
1380   static int32_t param9_init[] = {0};
1381   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1382   static int32_t param10_init[] = {0};
1383   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1384   static int32_t param11_init[] = {0};
1385   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1386   static int32_t param12_init[] = {0};
1387   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1388   static int32_t param13_init[] = {20};
1389   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1390   static int32_t param14_init[] = {20};
1391   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1392   static int32_t param15_init[] = {20};
1393   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1394   static int32_t param16_init[] = {20};
1395   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1396   static int32_t param17_init[] = {0};
1397   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1398   static bool8 layout_init[] = {false};
1399   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1400   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1401   // Phase 3, inputs and outputs
1402   model->identifyInputsAndOutputs(
1403     {op11},
1404     {op41});
1405   assert(model->isValid());
1406 }
1407 
is_ignored_dynamic_output_shape_nhwc_quant8_2(int i)1408 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_2(int i) {
1409   static std::set<int> ignore = {};
1410   return ignore.find(i) != ignore.end();
1411 }
1412 
CreateModel_dynamic_output_shape_nhwc_float16_2(Model * model)1413 void CreateModel_dynamic_output_shape_nhwc_float16_2(Model *model) {
1414   OperandType type0(Type::BOOL, {});
1415   OperandType type2(Type::INT32, {});
1416   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
1417   OperandType type27(Type::TENSOR_FLOAT16, {5, 50, 70, 3});
1418   // Phase 1, operands
1419   auto op11 = model->addOperand(&type27);
1420   auto param9 = model->addOperand(&type2);
1421   auto param10 = model->addOperand(&type2);
1422   auto param11 = model->addOperand(&type2);
1423   auto param12 = model->addOperand(&type2);
1424   auto param13 = model->addOperand(&type2);
1425   auto param14 = model->addOperand(&type2);
1426   auto param15 = model->addOperand(&type2);
1427   auto param16 = model->addOperand(&type2);
1428   auto param17 = model->addOperand(&type2);
1429   auto layout = model->addOperand(&type0);
1430   auto op41 = model->addOperand(&type24);
1431   // Phase 2, operations
1432   static int32_t param9_init[] = {0};
1433   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1434   static int32_t param10_init[] = {0};
1435   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1436   static int32_t param11_init[] = {0};
1437   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1438   static int32_t param12_init[] = {0};
1439   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1440   static int32_t param13_init[] = {20};
1441   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1442   static int32_t param14_init[] = {20};
1443   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1444   static int32_t param15_init[] = {20};
1445   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1446   static int32_t param16_init[] = {20};
1447   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1448   static int32_t param17_init[] = {0};
1449   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1450   static bool8 layout_init[] = {false};
1451   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1452   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1453   // Phase 3, inputs and outputs
1454   model->identifyInputsAndOutputs(
1455     {op11},
1456     {op41});
1457   assert(model->isValid());
1458 }
1459 
is_ignored_dynamic_output_shape_nhwc_float16_2(int i)1460 inline bool is_ignored_dynamic_output_shape_nhwc_float16_2(int i) {
1461   static std::set<int> ignore = {};
1462   return ignore.find(i) != ignore.end();
1463 }
1464 
CreateModel_dynamic_output_shape_nchw_2(Model * model)1465 void CreateModel_dynamic_output_shape_nchw_2(Model *model) {
1466   OperandType type0(Type::BOOL, {});
1467   OperandType type2(Type::INT32, {});
1468   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
1469   OperandType type29(Type::TENSOR_FLOAT32, {5, 3, 50, 70});
1470   // Phase 1, operands
1471   auto op11 = model->addOperand(&type29);
1472   auto param9 = model->addOperand(&type2);
1473   auto param10 = model->addOperand(&type2);
1474   auto param11 = model->addOperand(&type2);
1475   auto param12 = model->addOperand(&type2);
1476   auto param13 = model->addOperand(&type2);
1477   auto param14 = model->addOperand(&type2);
1478   auto param15 = model->addOperand(&type2);
1479   auto param16 = model->addOperand(&type2);
1480   auto param17 = model->addOperand(&type2);
1481   auto layout = model->addOperand(&type0);
1482   auto op41 = model->addOperand(&type22);
1483   // Phase 2, operations
1484   static int32_t param9_init[] = {0};
1485   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1486   static int32_t param10_init[] = {0};
1487   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1488   static int32_t param11_init[] = {0};
1489   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1490   static int32_t param12_init[] = {0};
1491   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1492   static int32_t param13_init[] = {20};
1493   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1494   static int32_t param14_init[] = {20};
1495   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1496   static int32_t param15_init[] = {20};
1497   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1498   static int32_t param16_init[] = {20};
1499   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1500   static int32_t param17_init[] = {0};
1501   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1502   static bool8 layout_init[] = {true};
1503   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1504   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1505   // Phase 3, inputs and outputs
1506   model->identifyInputsAndOutputs(
1507     {op11},
1508     {op41});
1509   assert(model->isValid());
1510 }
1511 
is_ignored_dynamic_output_shape_nchw_2(int i)1512 inline bool is_ignored_dynamic_output_shape_nchw_2(int i) {
1513   static std::set<int> ignore = {};
1514   return ignore.find(i) != ignore.end();
1515 }
1516 
CreateModel_dynamic_output_shape_nchw_relaxed_2(Model * model)1517 void CreateModel_dynamic_output_shape_nchw_relaxed_2(Model *model) {
1518   OperandType type0(Type::BOOL, {});
1519   OperandType type2(Type::INT32, {});
1520   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
1521   OperandType type29(Type::TENSOR_FLOAT32, {5, 3, 50, 70});
1522   // Phase 1, operands
1523   auto op11 = model->addOperand(&type29);
1524   auto param9 = model->addOperand(&type2);
1525   auto param10 = model->addOperand(&type2);
1526   auto param11 = model->addOperand(&type2);
1527   auto param12 = model->addOperand(&type2);
1528   auto param13 = model->addOperand(&type2);
1529   auto param14 = model->addOperand(&type2);
1530   auto param15 = model->addOperand(&type2);
1531   auto param16 = model->addOperand(&type2);
1532   auto param17 = model->addOperand(&type2);
1533   auto layout = model->addOperand(&type0);
1534   auto op41 = model->addOperand(&type22);
1535   // Phase 2, operations
1536   static int32_t param9_init[] = {0};
1537   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1538   static int32_t param10_init[] = {0};
1539   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1540   static int32_t param11_init[] = {0};
1541   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1542   static int32_t param12_init[] = {0};
1543   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1544   static int32_t param13_init[] = {20};
1545   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1546   static int32_t param14_init[] = {20};
1547   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1548   static int32_t param15_init[] = {20};
1549   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1550   static int32_t param16_init[] = {20};
1551   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1552   static int32_t param17_init[] = {0};
1553   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1554   static bool8 layout_init[] = {true};
1555   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1556   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1557   // Phase 3, inputs and outputs
1558   model->identifyInputsAndOutputs(
1559     {op11},
1560     {op41});
1561   // Phase 4: set relaxed execution
1562   model->relaxComputationFloat32toFloat16(true);
1563   assert(model->isValid());
1564 }
1565 
is_ignored_dynamic_output_shape_nchw_relaxed_2(int i)1566 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_2(int i) {
1567   static std::set<int> ignore = {};
1568   return ignore.find(i) != ignore.end();
1569 }
1570 
CreateModel_dynamic_output_shape_nchw_quant8_2(Model * model)1571 void CreateModel_dynamic_output_shape_nchw_quant8_2(Model *model) {
1572   OperandType type0(Type::BOOL, {});
1573   OperandType type2(Type::INT32, {});
1574   OperandType type23(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
1575   OperandType type31(Type::TENSOR_QUANT8_ASYMM, {5, 3, 50, 70}, 0.5f, 0);
1576   // Phase 1, operands
1577   auto op11 = model->addOperand(&type31);
1578   auto param9 = model->addOperand(&type2);
1579   auto param10 = model->addOperand(&type2);
1580   auto param11 = model->addOperand(&type2);
1581   auto param12 = model->addOperand(&type2);
1582   auto param13 = model->addOperand(&type2);
1583   auto param14 = model->addOperand(&type2);
1584   auto param15 = model->addOperand(&type2);
1585   auto param16 = model->addOperand(&type2);
1586   auto param17 = model->addOperand(&type2);
1587   auto layout = model->addOperand(&type0);
1588   auto op41 = model->addOperand(&type23);
1589   // Phase 2, operations
1590   static int32_t param9_init[] = {0};
1591   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1592   static int32_t param10_init[] = {0};
1593   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1594   static int32_t param11_init[] = {0};
1595   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1596   static int32_t param12_init[] = {0};
1597   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1598   static int32_t param13_init[] = {20};
1599   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1600   static int32_t param14_init[] = {20};
1601   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1602   static int32_t param15_init[] = {20};
1603   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1604   static int32_t param16_init[] = {20};
1605   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1606   static int32_t param17_init[] = {0};
1607   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1608   static bool8 layout_init[] = {true};
1609   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1610   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1611   // Phase 3, inputs and outputs
1612   model->identifyInputsAndOutputs(
1613     {op11},
1614     {op41});
1615   assert(model->isValid());
1616 }
1617 
is_ignored_dynamic_output_shape_nchw_quant8_2(int i)1618 inline bool is_ignored_dynamic_output_shape_nchw_quant8_2(int i) {
1619   static std::set<int> ignore = {};
1620   return ignore.find(i) != ignore.end();
1621 }
1622 
CreateModel_dynamic_output_shape_nchw_float16_2(Model * model)1623 void CreateModel_dynamic_output_shape_nchw_float16_2(Model *model) {
1624   OperandType type0(Type::BOOL, {});
1625   OperandType type2(Type::INT32, {});
1626   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
1627   OperandType type33(Type::TENSOR_FLOAT16, {5, 3, 50, 70});
1628   // Phase 1, operands
1629   auto op11 = model->addOperand(&type33);
1630   auto param9 = model->addOperand(&type2);
1631   auto param10 = model->addOperand(&type2);
1632   auto param11 = model->addOperand(&type2);
1633   auto param12 = model->addOperand(&type2);
1634   auto param13 = model->addOperand(&type2);
1635   auto param14 = model->addOperand(&type2);
1636   auto param15 = model->addOperand(&type2);
1637   auto param16 = model->addOperand(&type2);
1638   auto param17 = model->addOperand(&type2);
1639   auto layout = model->addOperand(&type0);
1640   auto op41 = model->addOperand(&type24);
1641   // Phase 2, operations
1642   static int32_t param9_init[] = {0};
1643   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1644   static int32_t param10_init[] = {0};
1645   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1646   static int32_t param11_init[] = {0};
1647   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1648   static int32_t param12_init[] = {0};
1649   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1650   static int32_t param13_init[] = {20};
1651   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1652   static int32_t param14_init[] = {20};
1653   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1654   static int32_t param15_init[] = {20};
1655   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1656   static int32_t param16_init[] = {20};
1657   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1658   static int32_t param17_init[] = {0};
1659   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1660   static bool8 layout_init[] = {true};
1661   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1662   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1663   // Phase 3, inputs and outputs
1664   model->identifyInputsAndOutputs(
1665     {op11},
1666     {op41});
1667   assert(model->isValid());
1668 }
1669 
is_ignored_dynamic_output_shape_nchw_float16_2(int i)1670 inline bool is_ignored_dynamic_output_shape_nchw_float16_2(int i) {
1671   static std::set<int> ignore = {};
1672   return ignore.find(i) != ignore.end();
1673 }
1674 
CreateModel_nhwc_3(Model * model)1675 void CreateModel_nhwc_3(Model *model) {
1676   OperandType type0(Type::BOOL, {});
1677   OperandType type2(Type::INT32, {});
1678   OperandType type3(Type::TENSOR_FLOAT32, {5, 50, 70, 3});
1679   OperandType type4(Type::TENSOR_FLOAT32, {5, 2, 3, 3});
1680   // Phase 1, operands
1681   auto op12 = model->addOperand(&type3);
1682   auto param18 = model->addOperand(&type2);
1683   auto param19 = model->addOperand(&type2);
1684   auto param20 = model->addOperand(&type2);
1685   auto param21 = model->addOperand(&type2);
1686   auto param22 = model->addOperand(&type2);
1687   auto param23 = model->addOperand(&type2);
1688   auto param24 = model->addOperand(&type2);
1689   auto param25 = model->addOperand(&type2);
1690   auto param26 = model->addOperand(&type2);
1691   auto layout = model->addOperand(&type0);
1692   auto op42 = model->addOperand(&type4);
1693   // Phase 2, operations
1694   static int32_t param18_init[] = {0};
1695   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1696   static int32_t param19_init[] = {0};
1697   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1698   static int32_t param20_init[] = {0};
1699   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1700   static int32_t param21_init[] = {0};
1701   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1702   static int32_t param22_init[] = {20};
1703   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1704   static int32_t param23_init[] = {20};
1705   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1706   static int32_t param24_init[] = {20};
1707   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1708   static int32_t param25_init[] = {20};
1709   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1710   static int32_t param26_init[] = {3};
1711   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1712   static bool8 layout_init[] = {false};
1713   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1714   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1715   // Phase 3, inputs and outputs
1716   model->identifyInputsAndOutputs(
1717     {op12},
1718     {op42});
1719   assert(model->isValid());
1720 }
1721 
is_ignored_nhwc_3(int i)1722 inline bool is_ignored_nhwc_3(int i) {
1723   static std::set<int> ignore = {};
1724   return ignore.find(i) != ignore.end();
1725 }
1726 
CreateModel_nhwc_relaxed_3(Model * model)1727 void CreateModel_nhwc_relaxed_3(Model *model) {
1728   OperandType type0(Type::BOOL, {});
1729   OperandType type2(Type::INT32, {});
1730   OperandType type3(Type::TENSOR_FLOAT32, {5, 50, 70, 3});
1731   OperandType type4(Type::TENSOR_FLOAT32, {5, 2, 3, 3});
1732   // Phase 1, operands
1733   auto op12 = model->addOperand(&type3);
1734   auto param18 = model->addOperand(&type2);
1735   auto param19 = model->addOperand(&type2);
1736   auto param20 = model->addOperand(&type2);
1737   auto param21 = model->addOperand(&type2);
1738   auto param22 = model->addOperand(&type2);
1739   auto param23 = model->addOperand(&type2);
1740   auto param24 = model->addOperand(&type2);
1741   auto param25 = model->addOperand(&type2);
1742   auto param26 = model->addOperand(&type2);
1743   auto layout = model->addOperand(&type0);
1744   auto op42 = model->addOperand(&type4);
1745   // Phase 2, operations
1746   static int32_t param18_init[] = {0};
1747   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1748   static int32_t param19_init[] = {0};
1749   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1750   static int32_t param20_init[] = {0};
1751   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1752   static int32_t param21_init[] = {0};
1753   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1754   static int32_t param22_init[] = {20};
1755   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1756   static int32_t param23_init[] = {20};
1757   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1758   static int32_t param24_init[] = {20};
1759   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1760   static int32_t param25_init[] = {20};
1761   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1762   static int32_t param26_init[] = {3};
1763   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1764   static bool8 layout_init[] = {false};
1765   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1766   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1767   // Phase 3, inputs and outputs
1768   model->identifyInputsAndOutputs(
1769     {op12},
1770     {op42});
1771   // Phase 4: set relaxed execution
1772   model->relaxComputationFloat32toFloat16(true);
1773   assert(model->isValid());
1774 }
1775 
is_ignored_nhwc_relaxed_3(int i)1776 inline bool is_ignored_nhwc_relaxed_3(int i) {
1777   static std::set<int> ignore = {};
1778   return ignore.find(i) != ignore.end();
1779 }
1780 
CreateModel_nhwc_quant8_3(Model * model)1781 void CreateModel_nhwc_quant8_3(Model *model) {
1782   OperandType type0(Type::BOOL, {});
1783   OperandType type2(Type::INT32, {});
1784   OperandType type35(Type::TENSOR_QUANT8_ASYMM, {5, 50, 70, 3}, 0.25f, 0);
1785   OperandType type36(Type::TENSOR_QUANT8_ASYMM, {5, 2, 3, 3}, 0.25f, 0);
1786   // Phase 1, operands
1787   auto op12 = model->addOperand(&type35);
1788   auto param18 = model->addOperand(&type2);
1789   auto param19 = model->addOperand(&type2);
1790   auto param20 = model->addOperand(&type2);
1791   auto param21 = model->addOperand(&type2);
1792   auto param22 = model->addOperand(&type2);
1793   auto param23 = model->addOperand(&type2);
1794   auto param24 = model->addOperand(&type2);
1795   auto param25 = model->addOperand(&type2);
1796   auto param26 = model->addOperand(&type2);
1797   auto layout = model->addOperand(&type0);
1798   auto op42 = model->addOperand(&type36);
1799   // Phase 2, operations
1800   static int32_t param18_init[] = {0};
1801   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1802   static int32_t param19_init[] = {0};
1803   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1804   static int32_t param20_init[] = {0};
1805   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1806   static int32_t param21_init[] = {0};
1807   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1808   static int32_t param22_init[] = {20};
1809   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1810   static int32_t param23_init[] = {20};
1811   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1812   static int32_t param24_init[] = {20};
1813   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1814   static int32_t param25_init[] = {20};
1815   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1816   static int32_t param26_init[] = {3};
1817   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1818   static bool8 layout_init[] = {false};
1819   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1820   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1821   // Phase 3, inputs and outputs
1822   model->identifyInputsAndOutputs(
1823     {op12},
1824     {op42});
1825   assert(model->isValid());
1826 }
1827 
is_ignored_nhwc_quant8_3(int i)1828 inline bool is_ignored_nhwc_quant8_3(int i) {
1829   static std::set<int> ignore = {};
1830   return ignore.find(i) != ignore.end();
1831 }
1832 
CreateModel_nhwc_float16_3(Model * model)1833 void CreateModel_nhwc_float16_3(Model *model) {
1834   OperandType type0(Type::BOOL, {});
1835   OperandType type2(Type::INT32, {});
1836   OperandType type27(Type::TENSOR_FLOAT16, {5, 50, 70, 3});
1837   OperandType type28(Type::TENSOR_FLOAT16, {5, 2, 3, 3});
1838   // Phase 1, operands
1839   auto op12 = model->addOperand(&type27);
1840   auto param18 = model->addOperand(&type2);
1841   auto param19 = model->addOperand(&type2);
1842   auto param20 = model->addOperand(&type2);
1843   auto param21 = model->addOperand(&type2);
1844   auto param22 = model->addOperand(&type2);
1845   auto param23 = model->addOperand(&type2);
1846   auto param24 = model->addOperand(&type2);
1847   auto param25 = model->addOperand(&type2);
1848   auto param26 = model->addOperand(&type2);
1849   auto layout = model->addOperand(&type0);
1850   auto op42 = model->addOperand(&type28);
1851   // Phase 2, operations
1852   static int32_t param18_init[] = {0};
1853   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1854   static int32_t param19_init[] = {0};
1855   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1856   static int32_t param20_init[] = {0};
1857   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1858   static int32_t param21_init[] = {0};
1859   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1860   static int32_t param22_init[] = {20};
1861   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1862   static int32_t param23_init[] = {20};
1863   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1864   static int32_t param24_init[] = {20};
1865   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1866   static int32_t param25_init[] = {20};
1867   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1868   static int32_t param26_init[] = {3};
1869   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1870   static bool8 layout_init[] = {false};
1871   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1872   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1873   // Phase 3, inputs and outputs
1874   model->identifyInputsAndOutputs(
1875     {op12},
1876     {op42});
1877   assert(model->isValid());
1878 }
1879 
is_ignored_nhwc_float16_3(int i)1880 inline bool is_ignored_nhwc_float16_3(int i) {
1881   static std::set<int> ignore = {};
1882   return ignore.find(i) != ignore.end();
1883 }
1884 
CreateModel_nchw_3(Model * model)1885 void CreateModel_nchw_3(Model *model) {
1886   OperandType type0(Type::BOOL, {});
1887   OperandType type2(Type::INT32, {});
1888   OperandType type29(Type::TENSOR_FLOAT32, {5, 3, 50, 70});
1889   OperandType type30(Type::TENSOR_FLOAT32, {5, 3, 2, 3});
1890   // Phase 1, operands
1891   auto op12 = model->addOperand(&type29);
1892   auto param18 = model->addOperand(&type2);
1893   auto param19 = model->addOperand(&type2);
1894   auto param20 = model->addOperand(&type2);
1895   auto param21 = model->addOperand(&type2);
1896   auto param22 = model->addOperand(&type2);
1897   auto param23 = model->addOperand(&type2);
1898   auto param24 = model->addOperand(&type2);
1899   auto param25 = model->addOperand(&type2);
1900   auto param26 = model->addOperand(&type2);
1901   auto layout = model->addOperand(&type0);
1902   auto op42 = model->addOperand(&type30);
1903   // Phase 2, operations
1904   static int32_t param18_init[] = {0};
1905   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1906   static int32_t param19_init[] = {0};
1907   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1908   static int32_t param20_init[] = {0};
1909   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1910   static int32_t param21_init[] = {0};
1911   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1912   static int32_t param22_init[] = {20};
1913   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1914   static int32_t param23_init[] = {20};
1915   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1916   static int32_t param24_init[] = {20};
1917   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1918   static int32_t param25_init[] = {20};
1919   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1920   static int32_t param26_init[] = {3};
1921   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1922   static bool8 layout_init[] = {true};
1923   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1924   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1925   // Phase 3, inputs and outputs
1926   model->identifyInputsAndOutputs(
1927     {op12},
1928     {op42});
1929   assert(model->isValid());
1930 }
1931 
is_ignored_nchw_3(int i)1932 inline bool is_ignored_nchw_3(int i) {
1933   static std::set<int> ignore = {};
1934   return ignore.find(i) != ignore.end();
1935 }
1936 
CreateModel_nchw_relaxed_3(Model * model)1937 void CreateModel_nchw_relaxed_3(Model *model) {
1938   OperandType type0(Type::BOOL, {});
1939   OperandType type2(Type::INT32, {});
1940   OperandType type29(Type::TENSOR_FLOAT32, {5, 3, 50, 70});
1941   OperandType type30(Type::TENSOR_FLOAT32, {5, 3, 2, 3});
1942   // Phase 1, operands
1943   auto op12 = model->addOperand(&type29);
1944   auto param18 = model->addOperand(&type2);
1945   auto param19 = model->addOperand(&type2);
1946   auto param20 = model->addOperand(&type2);
1947   auto param21 = model->addOperand(&type2);
1948   auto param22 = model->addOperand(&type2);
1949   auto param23 = model->addOperand(&type2);
1950   auto param24 = model->addOperand(&type2);
1951   auto param25 = model->addOperand(&type2);
1952   auto param26 = model->addOperand(&type2);
1953   auto layout = model->addOperand(&type0);
1954   auto op42 = model->addOperand(&type30);
1955   // Phase 2, operations
1956   static int32_t param18_init[] = {0};
1957   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1958   static int32_t param19_init[] = {0};
1959   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1960   static int32_t param20_init[] = {0};
1961   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1962   static int32_t param21_init[] = {0};
1963   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1964   static int32_t param22_init[] = {20};
1965   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1966   static int32_t param23_init[] = {20};
1967   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1968   static int32_t param24_init[] = {20};
1969   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1970   static int32_t param25_init[] = {20};
1971   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1972   static int32_t param26_init[] = {3};
1973   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1974   static bool8 layout_init[] = {true};
1975   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1976   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1977   // Phase 3, inputs and outputs
1978   model->identifyInputsAndOutputs(
1979     {op12},
1980     {op42});
1981   // Phase 4: set relaxed execution
1982   model->relaxComputationFloat32toFloat16(true);
1983   assert(model->isValid());
1984 }
1985 
is_ignored_nchw_relaxed_3(int i)1986 inline bool is_ignored_nchw_relaxed_3(int i) {
1987   static std::set<int> ignore = {};
1988   return ignore.find(i) != ignore.end();
1989 }
1990 
CreateModel_nchw_quant8_3(Model * model)1991 void CreateModel_nchw_quant8_3(Model *model) {
1992   OperandType type0(Type::BOOL, {});
1993   OperandType type2(Type::INT32, {});
1994   OperandType type37(Type::TENSOR_QUANT8_ASYMM, {5, 3, 50, 70}, 0.25f, 0);
1995   OperandType type38(Type::TENSOR_QUANT8_ASYMM, {5, 3, 2, 3}, 0.25f, 0);
1996   // Phase 1, operands
1997   auto op12 = model->addOperand(&type37);
1998   auto param18 = model->addOperand(&type2);
1999   auto param19 = model->addOperand(&type2);
2000   auto param20 = model->addOperand(&type2);
2001   auto param21 = model->addOperand(&type2);
2002   auto param22 = model->addOperand(&type2);
2003   auto param23 = model->addOperand(&type2);
2004   auto param24 = model->addOperand(&type2);
2005   auto param25 = model->addOperand(&type2);
2006   auto param26 = model->addOperand(&type2);
2007   auto layout = model->addOperand(&type0);
2008   auto op42 = model->addOperand(&type38);
2009   // Phase 2, operations
2010   static int32_t param18_init[] = {0};
2011   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2012   static int32_t param19_init[] = {0};
2013   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2014   static int32_t param20_init[] = {0};
2015   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2016   static int32_t param21_init[] = {0};
2017   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2018   static int32_t param22_init[] = {20};
2019   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2020   static int32_t param23_init[] = {20};
2021   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2022   static int32_t param24_init[] = {20};
2023   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2024   static int32_t param25_init[] = {20};
2025   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2026   static int32_t param26_init[] = {3};
2027   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2028   static bool8 layout_init[] = {true};
2029   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2030   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2031   // Phase 3, inputs and outputs
2032   model->identifyInputsAndOutputs(
2033     {op12},
2034     {op42});
2035   assert(model->isValid());
2036 }
2037 
is_ignored_nchw_quant8_3(int i)2038 inline bool is_ignored_nchw_quant8_3(int i) {
2039   static std::set<int> ignore = {};
2040   return ignore.find(i) != ignore.end();
2041 }
2042 
CreateModel_nchw_float16_3(Model * model)2043 void CreateModel_nchw_float16_3(Model *model) {
2044   OperandType type0(Type::BOOL, {});
2045   OperandType type2(Type::INT32, {});
2046   OperandType type33(Type::TENSOR_FLOAT16, {5, 3, 50, 70});
2047   OperandType type34(Type::TENSOR_FLOAT16, {5, 3, 2, 3});
2048   // Phase 1, operands
2049   auto op12 = model->addOperand(&type33);
2050   auto param18 = model->addOperand(&type2);
2051   auto param19 = model->addOperand(&type2);
2052   auto param20 = model->addOperand(&type2);
2053   auto param21 = model->addOperand(&type2);
2054   auto param22 = model->addOperand(&type2);
2055   auto param23 = model->addOperand(&type2);
2056   auto param24 = model->addOperand(&type2);
2057   auto param25 = model->addOperand(&type2);
2058   auto param26 = model->addOperand(&type2);
2059   auto layout = model->addOperand(&type0);
2060   auto op42 = model->addOperand(&type34);
2061   // Phase 2, operations
2062   static int32_t param18_init[] = {0};
2063   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2064   static int32_t param19_init[] = {0};
2065   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2066   static int32_t param20_init[] = {0};
2067   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2068   static int32_t param21_init[] = {0};
2069   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2070   static int32_t param22_init[] = {20};
2071   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2072   static int32_t param23_init[] = {20};
2073   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2074   static int32_t param24_init[] = {20};
2075   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2076   static int32_t param25_init[] = {20};
2077   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2078   static int32_t param26_init[] = {3};
2079   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2080   static bool8 layout_init[] = {true};
2081   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2082   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2083   // Phase 3, inputs and outputs
2084   model->identifyInputsAndOutputs(
2085     {op12},
2086     {op42});
2087   assert(model->isValid());
2088 }
2089 
is_ignored_nchw_float16_3(int i)2090 inline bool is_ignored_nchw_float16_3(int i) {
2091   static std::set<int> ignore = {};
2092   return ignore.find(i) != ignore.end();
2093 }
2094 
CreateModel_dynamic_output_shape_nhwc_3(Model * model)2095 void CreateModel_dynamic_output_shape_nhwc_3(Model *model) {
2096   OperandType type0(Type::BOOL, {});
2097   OperandType type2(Type::INT32, {});
2098   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2099   OperandType type3(Type::TENSOR_FLOAT32, {5, 50, 70, 3});
2100   // Phase 1, operands
2101   auto op12 = model->addOperand(&type3);
2102   auto param18 = model->addOperand(&type2);
2103   auto param19 = model->addOperand(&type2);
2104   auto param20 = model->addOperand(&type2);
2105   auto param21 = model->addOperand(&type2);
2106   auto param22 = model->addOperand(&type2);
2107   auto param23 = model->addOperand(&type2);
2108   auto param24 = model->addOperand(&type2);
2109   auto param25 = model->addOperand(&type2);
2110   auto param26 = model->addOperand(&type2);
2111   auto layout = model->addOperand(&type0);
2112   auto op42 = model->addOperand(&type22);
2113   // Phase 2, operations
2114   static int32_t param18_init[] = {0};
2115   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2116   static int32_t param19_init[] = {0};
2117   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2118   static int32_t param20_init[] = {0};
2119   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2120   static int32_t param21_init[] = {0};
2121   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2122   static int32_t param22_init[] = {20};
2123   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2124   static int32_t param23_init[] = {20};
2125   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2126   static int32_t param24_init[] = {20};
2127   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2128   static int32_t param25_init[] = {20};
2129   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2130   static int32_t param26_init[] = {3};
2131   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2132   static bool8 layout_init[] = {false};
2133   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2134   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2135   // Phase 3, inputs and outputs
2136   model->identifyInputsAndOutputs(
2137     {op12},
2138     {op42});
2139   assert(model->isValid());
2140 }
2141 
is_ignored_dynamic_output_shape_nhwc_3(int i)2142 inline bool is_ignored_dynamic_output_shape_nhwc_3(int i) {
2143   static std::set<int> ignore = {};
2144   return ignore.find(i) != ignore.end();
2145 }
2146 
CreateModel_dynamic_output_shape_nhwc_relaxed_3(Model * model)2147 void CreateModel_dynamic_output_shape_nhwc_relaxed_3(Model *model) {
2148   OperandType type0(Type::BOOL, {});
2149   OperandType type2(Type::INT32, {});
2150   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2151   OperandType type3(Type::TENSOR_FLOAT32, {5, 50, 70, 3});
2152   // Phase 1, operands
2153   auto op12 = model->addOperand(&type3);
2154   auto param18 = model->addOperand(&type2);
2155   auto param19 = model->addOperand(&type2);
2156   auto param20 = model->addOperand(&type2);
2157   auto param21 = model->addOperand(&type2);
2158   auto param22 = model->addOperand(&type2);
2159   auto param23 = model->addOperand(&type2);
2160   auto param24 = model->addOperand(&type2);
2161   auto param25 = model->addOperand(&type2);
2162   auto param26 = model->addOperand(&type2);
2163   auto layout = model->addOperand(&type0);
2164   auto op42 = model->addOperand(&type22);
2165   // Phase 2, operations
2166   static int32_t param18_init[] = {0};
2167   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2168   static int32_t param19_init[] = {0};
2169   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2170   static int32_t param20_init[] = {0};
2171   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2172   static int32_t param21_init[] = {0};
2173   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2174   static int32_t param22_init[] = {20};
2175   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2176   static int32_t param23_init[] = {20};
2177   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2178   static int32_t param24_init[] = {20};
2179   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2180   static int32_t param25_init[] = {20};
2181   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2182   static int32_t param26_init[] = {3};
2183   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2184   static bool8 layout_init[] = {false};
2185   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2186   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2187   // Phase 3, inputs and outputs
2188   model->identifyInputsAndOutputs(
2189     {op12},
2190     {op42});
2191   // Phase 4: set relaxed execution
2192   model->relaxComputationFloat32toFloat16(true);
2193   assert(model->isValid());
2194 }
2195 
is_ignored_dynamic_output_shape_nhwc_relaxed_3(int i)2196 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_3(int i) {
2197   static std::set<int> ignore = {};
2198   return ignore.find(i) != ignore.end();
2199 }
2200 
CreateModel_dynamic_output_shape_nhwc_quant8_3(Model * model)2201 void CreateModel_dynamic_output_shape_nhwc_quant8_3(Model *model) {
2202   OperandType type0(Type::BOOL, {});
2203   OperandType type2(Type::INT32, {});
2204   OperandType type35(Type::TENSOR_QUANT8_ASYMM, {5, 50, 70, 3}, 0.25f, 0);
2205   OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.25f, 0);
2206   // Phase 1, operands
2207   auto op12 = model->addOperand(&type35);
2208   auto param18 = model->addOperand(&type2);
2209   auto param19 = model->addOperand(&type2);
2210   auto param20 = model->addOperand(&type2);
2211   auto param21 = model->addOperand(&type2);
2212   auto param22 = model->addOperand(&type2);
2213   auto param23 = model->addOperand(&type2);
2214   auto param24 = model->addOperand(&type2);
2215   auto param25 = model->addOperand(&type2);
2216   auto param26 = model->addOperand(&type2);
2217   auto layout = model->addOperand(&type0);
2218   auto op42 = model->addOperand(&type39);
2219   // Phase 2, operations
2220   static int32_t param18_init[] = {0};
2221   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2222   static int32_t param19_init[] = {0};
2223   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2224   static int32_t param20_init[] = {0};
2225   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2226   static int32_t param21_init[] = {0};
2227   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2228   static int32_t param22_init[] = {20};
2229   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2230   static int32_t param23_init[] = {20};
2231   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2232   static int32_t param24_init[] = {20};
2233   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2234   static int32_t param25_init[] = {20};
2235   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2236   static int32_t param26_init[] = {3};
2237   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2238   static bool8 layout_init[] = {false};
2239   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2240   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2241   // Phase 3, inputs and outputs
2242   model->identifyInputsAndOutputs(
2243     {op12},
2244     {op42});
2245   assert(model->isValid());
2246 }
2247 
is_ignored_dynamic_output_shape_nhwc_quant8_3(int i)2248 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_3(int i) {
2249   static std::set<int> ignore = {};
2250   return ignore.find(i) != ignore.end();
2251 }
2252 
CreateModel_dynamic_output_shape_nhwc_float16_3(Model * model)2253 void CreateModel_dynamic_output_shape_nhwc_float16_3(Model *model) {
2254   OperandType type0(Type::BOOL, {});
2255   OperandType type2(Type::INT32, {});
2256   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
2257   OperandType type27(Type::TENSOR_FLOAT16, {5, 50, 70, 3});
2258   // Phase 1, operands
2259   auto op12 = model->addOperand(&type27);
2260   auto param18 = model->addOperand(&type2);
2261   auto param19 = model->addOperand(&type2);
2262   auto param20 = model->addOperand(&type2);
2263   auto param21 = model->addOperand(&type2);
2264   auto param22 = model->addOperand(&type2);
2265   auto param23 = model->addOperand(&type2);
2266   auto param24 = model->addOperand(&type2);
2267   auto param25 = model->addOperand(&type2);
2268   auto param26 = model->addOperand(&type2);
2269   auto layout = model->addOperand(&type0);
2270   auto op42 = model->addOperand(&type24);
2271   // Phase 2, operations
2272   static int32_t param18_init[] = {0};
2273   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2274   static int32_t param19_init[] = {0};
2275   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2276   static int32_t param20_init[] = {0};
2277   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2278   static int32_t param21_init[] = {0};
2279   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2280   static int32_t param22_init[] = {20};
2281   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2282   static int32_t param23_init[] = {20};
2283   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2284   static int32_t param24_init[] = {20};
2285   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2286   static int32_t param25_init[] = {20};
2287   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2288   static int32_t param26_init[] = {3};
2289   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2290   static bool8 layout_init[] = {false};
2291   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2292   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2293   // Phase 3, inputs and outputs
2294   model->identifyInputsAndOutputs(
2295     {op12},
2296     {op42});
2297   assert(model->isValid());
2298 }
2299 
is_ignored_dynamic_output_shape_nhwc_float16_3(int i)2300 inline bool is_ignored_dynamic_output_shape_nhwc_float16_3(int i) {
2301   static std::set<int> ignore = {};
2302   return ignore.find(i) != ignore.end();
2303 }
2304 
CreateModel_dynamic_output_shape_nchw_3(Model * model)2305 void CreateModel_dynamic_output_shape_nchw_3(Model *model) {
2306   OperandType type0(Type::BOOL, {});
2307   OperandType type2(Type::INT32, {});
2308   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2309   OperandType type29(Type::TENSOR_FLOAT32, {5, 3, 50, 70});
2310   // Phase 1, operands
2311   auto op12 = model->addOperand(&type29);
2312   auto param18 = model->addOperand(&type2);
2313   auto param19 = model->addOperand(&type2);
2314   auto param20 = model->addOperand(&type2);
2315   auto param21 = model->addOperand(&type2);
2316   auto param22 = model->addOperand(&type2);
2317   auto param23 = model->addOperand(&type2);
2318   auto param24 = model->addOperand(&type2);
2319   auto param25 = model->addOperand(&type2);
2320   auto param26 = model->addOperand(&type2);
2321   auto layout = model->addOperand(&type0);
2322   auto op42 = model->addOperand(&type22);
2323   // Phase 2, operations
2324   static int32_t param18_init[] = {0};
2325   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2326   static int32_t param19_init[] = {0};
2327   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2328   static int32_t param20_init[] = {0};
2329   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2330   static int32_t param21_init[] = {0};
2331   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2332   static int32_t param22_init[] = {20};
2333   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2334   static int32_t param23_init[] = {20};
2335   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2336   static int32_t param24_init[] = {20};
2337   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2338   static int32_t param25_init[] = {20};
2339   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2340   static int32_t param26_init[] = {3};
2341   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2342   static bool8 layout_init[] = {true};
2343   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2344   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2345   // Phase 3, inputs and outputs
2346   model->identifyInputsAndOutputs(
2347     {op12},
2348     {op42});
2349   assert(model->isValid());
2350 }
2351 
is_ignored_dynamic_output_shape_nchw_3(int i)2352 inline bool is_ignored_dynamic_output_shape_nchw_3(int i) {
2353   static std::set<int> ignore = {};
2354   return ignore.find(i) != ignore.end();
2355 }
2356 
CreateModel_dynamic_output_shape_nchw_relaxed_3(Model * model)2357 void CreateModel_dynamic_output_shape_nchw_relaxed_3(Model *model) {
2358   OperandType type0(Type::BOOL, {});
2359   OperandType type2(Type::INT32, {});
2360   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2361   OperandType type29(Type::TENSOR_FLOAT32, {5, 3, 50, 70});
2362   // Phase 1, operands
2363   auto op12 = model->addOperand(&type29);
2364   auto param18 = model->addOperand(&type2);
2365   auto param19 = model->addOperand(&type2);
2366   auto param20 = model->addOperand(&type2);
2367   auto param21 = model->addOperand(&type2);
2368   auto param22 = model->addOperand(&type2);
2369   auto param23 = model->addOperand(&type2);
2370   auto param24 = model->addOperand(&type2);
2371   auto param25 = model->addOperand(&type2);
2372   auto param26 = model->addOperand(&type2);
2373   auto layout = model->addOperand(&type0);
2374   auto op42 = model->addOperand(&type22);
2375   // Phase 2, operations
2376   static int32_t param18_init[] = {0};
2377   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2378   static int32_t param19_init[] = {0};
2379   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2380   static int32_t param20_init[] = {0};
2381   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2382   static int32_t param21_init[] = {0};
2383   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2384   static int32_t param22_init[] = {20};
2385   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2386   static int32_t param23_init[] = {20};
2387   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2388   static int32_t param24_init[] = {20};
2389   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2390   static int32_t param25_init[] = {20};
2391   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2392   static int32_t param26_init[] = {3};
2393   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2394   static bool8 layout_init[] = {true};
2395   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2396   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2397   // Phase 3, inputs and outputs
2398   model->identifyInputsAndOutputs(
2399     {op12},
2400     {op42});
2401   // Phase 4: set relaxed execution
2402   model->relaxComputationFloat32toFloat16(true);
2403   assert(model->isValid());
2404 }
2405 
is_ignored_dynamic_output_shape_nchw_relaxed_3(int i)2406 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_3(int i) {
2407   static std::set<int> ignore = {};
2408   return ignore.find(i) != ignore.end();
2409 }
2410 
CreateModel_dynamic_output_shape_nchw_quant8_3(Model * model)2411 void CreateModel_dynamic_output_shape_nchw_quant8_3(Model *model) {
2412   OperandType type0(Type::BOOL, {});
2413   OperandType type2(Type::INT32, {});
2414   OperandType type37(Type::TENSOR_QUANT8_ASYMM, {5, 3, 50, 70}, 0.25f, 0);
2415   OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.25f, 0);
2416   // Phase 1, operands
2417   auto op12 = model->addOperand(&type37);
2418   auto param18 = model->addOperand(&type2);
2419   auto param19 = model->addOperand(&type2);
2420   auto param20 = model->addOperand(&type2);
2421   auto param21 = model->addOperand(&type2);
2422   auto param22 = model->addOperand(&type2);
2423   auto param23 = model->addOperand(&type2);
2424   auto param24 = model->addOperand(&type2);
2425   auto param25 = model->addOperand(&type2);
2426   auto param26 = model->addOperand(&type2);
2427   auto layout = model->addOperand(&type0);
2428   auto op42 = model->addOperand(&type39);
2429   // Phase 2, operations
2430   static int32_t param18_init[] = {0};
2431   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2432   static int32_t param19_init[] = {0};
2433   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2434   static int32_t param20_init[] = {0};
2435   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2436   static int32_t param21_init[] = {0};
2437   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2438   static int32_t param22_init[] = {20};
2439   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2440   static int32_t param23_init[] = {20};
2441   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2442   static int32_t param24_init[] = {20};
2443   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2444   static int32_t param25_init[] = {20};
2445   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2446   static int32_t param26_init[] = {3};
2447   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2448   static bool8 layout_init[] = {true};
2449   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2450   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2451   // Phase 3, inputs and outputs
2452   model->identifyInputsAndOutputs(
2453     {op12},
2454     {op42});
2455   assert(model->isValid());
2456 }
2457 
is_ignored_dynamic_output_shape_nchw_quant8_3(int i)2458 inline bool is_ignored_dynamic_output_shape_nchw_quant8_3(int i) {
2459   static std::set<int> ignore = {};
2460   return ignore.find(i) != ignore.end();
2461 }
2462 
CreateModel_dynamic_output_shape_nchw_float16_3(Model * model)2463 void CreateModel_dynamic_output_shape_nchw_float16_3(Model *model) {
2464   OperandType type0(Type::BOOL, {});
2465   OperandType type2(Type::INT32, {});
2466   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
2467   OperandType type33(Type::TENSOR_FLOAT16, {5, 3, 50, 70});
2468   // Phase 1, operands
2469   auto op12 = model->addOperand(&type33);
2470   auto param18 = model->addOperand(&type2);
2471   auto param19 = model->addOperand(&type2);
2472   auto param20 = model->addOperand(&type2);
2473   auto param21 = model->addOperand(&type2);
2474   auto param22 = model->addOperand(&type2);
2475   auto param23 = model->addOperand(&type2);
2476   auto param24 = model->addOperand(&type2);
2477   auto param25 = model->addOperand(&type2);
2478   auto param26 = model->addOperand(&type2);
2479   auto layout = model->addOperand(&type0);
2480   auto op42 = model->addOperand(&type24);
2481   // Phase 2, operations
2482   static int32_t param18_init[] = {0};
2483   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2484   static int32_t param19_init[] = {0};
2485   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2486   static int32_t param20_init[] = {0};
2487   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2488   static int32_t param21_init[] = {0};
2489   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2490   static int32_t param22_init[] = {20};
2491   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2492   static int32_t param23_init[] = {20};
2493   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2494   static int32_t param24_init[] = {20};
2495   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2496   static int32_t param25_init[] = {20};
2497   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2498   static int32_t param26_init[] = {3};
2499   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2500   static bool8 layout_init[] = {true};
2501   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2502   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2503   // Phase 3, inputs and outputs
2504   model->identifyInputsAndOutputs(
2505     {op12},
2506     {op42});
2507   assert(model->isValid());
2508 }
2509 
is_ignored_dynamic_output_shape_nchw_float16_3(int i)2510 inline bool is_ignored_dynamic_output_shape_nchw_float16_3(int i) {
2511   static std::set<int> ignore = {};
2512   return ignore.find(i) != ignore.end();
2513 }
2514 
CreateModel_nhwc_4(Model * model)2515 void CreateModel_nhwc_4(Model *model) {
2516   OperandType type0(Type::BOOL, {});
2517   OperandType type2(Type::INT32, {});
2518   OperandType type5(Type::TENSOR_FLOAT32, {1, 2, 4, 1});
2519   OperandType type6(Type::TENSOR_FLOAT32, {1, 1, 2, 1});
2520   // Phase 1, operands
2521   auto op13 = model->addOperand(&type5);
2522   auto param27 = model->addOperand(&type2);
2523   auto param28 = model->addOperand(&type2);
2524   auto param29 = model->addOperand(&type2);
2525   auto param30 = model->addOperand(&type2);
2526   auto param31 = model->addOperand(&type2);
2527   auto param32 = model->addOperand(&type2);
2528   auto layout = model->addOperand(&type0);
2529   auto op43 = model->addOperand(&type6);
2530   // Phase 2, operations
2531   static int32_t param27_init[] = {1};
2532   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2533   static int32_t param28_init[] = {2};
2534   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2535   static int32_t param29_init[] = {2};
2536   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2537   static int32_t param30_init[] = {2};
2538   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2539   static int32_t param31_init[] = {2};
2540   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2541   static int32_t param32_init[] = {0};
2542   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2543   static bool8 layout_init[] = {false};
2544   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2545   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2546   // Phase 3, inputs and outputs
2547   model->identifyInputsAndOutputs(
2548     {op13},
2549     {op43});
2550   assert(model->isValid());
2551 }
2552 
is_ignored_nhwc_4(int i)2553 inline bool is_ignored_nhwc_4(int i) {
2554   static std::set<int> ignore = {};
2555   return ignore.find(i) != ignore.end();
2556 }
2557 
CreateModel_nhwc_relaxed_4(Model * model)2558 void CreateModel_nhwc_relaxed_4(Model *model) {
2559   OperandType type0(Type::BOOL, {});
2560   OperandType type2(Type::INT32, {});
2561   OperandType type5(Type::TENSOR_FLOAT32, {1, 2, 4, 1});
2562   OperandType type6(Type::TENSOR_FLOAT32, {1, 1, 2, 1});
2563   // Phase 1, operands
2564   auto op13 = model->addOperand(&type5);
2565   auto param27 = model->addOperand(&type2);
2566   auto param28 = model->addOperand(&type2);
2567   auto param29 = model->addOperand(&type2);
2568   auto param30 = model->addOperand(&type2);
2569   auto param31 = model->addOperand(&type2);
2570   auto param32 = model->addOperand(&type2);
2571   auto layout = model->addOperand(&type0);
2572   auto op43 = model->addOperand(&type6);
2573   // Phase 2, operations
2574   static int32_t param27_init[] = {1};
2575   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2576   static int32_t param28_init[] = {2};
2577   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2578   static int32_t param29_init[] = {2};
2579   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2580   static int32_t param30_init[] = {2};
2581   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2582   static int32_t param31_init[] = {2};
2583   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2584   static int32_t param32_init[] = {0};
2585   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2586   static bool8 layout_init[] = {false};
2587   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2588   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2589   // Phase 3, inputs and outputs
2590   model->identifyInputsAndOutputs(
2591     {op13},
2592     {op43});
2593   // Phase 4: set relaxed execution
2594   model->relaxComputationFloat32toFloat16(true);
2595   assert(model->isValid());
2596 }
2597 
is_ignored_nhwc_relaxed_4(int i)2598 inline bool is_ignored_nhwc_relaxed_4(int i) {
2599   static std::set<int> ignore = {};
2600   return ignore.find(i) != ignore.end();
2601 }
2602 
CreateModel_nhwc_quant8_4(Model * model)2603 void CreateModel_nhwc_quant8_4(Model *model) {
2604   OperandType type0(Type::BOOL, {});
2605   OperandType type2(Type::INT32, {});
2606   OperandType type40(Type::TENSOR_QUANT8_ASYMM, {1, 2, 4, 1}, 0.25f, 0);
2607   OperandType type41(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 1}, 0.25f, 0);
2608   // Phase 1, operands
2609   auto op13 = model->addOperand(&type40);
2610   auto param27 = model->addOperand(&type2);
2611   auto param28 = model->addOperand(&type2);
2612   auto param29 = model->addOperand(&type2);
2613   auto param30 = model->addOperand(&type2);
2614   auto param31 = model->addOperand(&type2);
2615   auto param32 = model->addOperand(&type2);
2616   auto layout = model->addOperand(&type0);
2617   auto op43 = model->addOperand(&type41);
2618   // Phase 2, operations
2619   static int32_t param27_init[] = {1};
2620   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2621   static int32_t param28_init[] = {2};
2622   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2623   static int32_t param29_init[] = {2};
2624   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2625   static int32_t param30_init[] = {2};
2626   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2627   static int32_t param31_init[] = {2};
2628   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2629   static int32_t param32_init[] = {0};
2630   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2631   static bool8 layout_init[] = {false};
2632   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2633   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2634   // Phase 3, inputs and outputs
2635   model->identifyInputsAndOutputs(
2636     {op13},
2637     {op43});
2638   assert(model->isValid());
2639 }
2640 
is_ignored_nhwc_quant8_4(int i)2641 inline bool is_ignored_nhwc_quant8_4(int i) {
2642   static std::set<int> ignore = {};
2643   return ignore.find(i) != ignore.end();
2644 }
2645 
CreateModel_nhwc_float16_4(Model * model)2646 void CreateModel_nhwc_float16_4(Model *model) {
2647   OperandType type0(Type::BOOL, {});
2648   OperandType type2(Type::INT32, {});
2649   OperandType type42(Type::TENSOR_FLOAT16, {1, 2, 4, 1});
2650   OperandType type43(Type::TENSOR_FLOAT16, {1, 1, 2, 1});
2651   // Phase 1, operands
2652   auto op13 = model->addOperand(&type42);
2653   auto param27 = model->addOperand(&type2);
2654   auto param28 = model->addOperand(&type2);
2655   auto param29 = model->addOperand(&type2);
2656   auto param30 = model->addOperand(&type2);
2657   auto param31 = model->addOperand(&type2);
2658   auto param32 = model->addOperand(&type2);
2659   auto layout = model->addOperand(&type0);
2660   auto op43 = model->addOperand(&type43);
2661   // Phase 2, operations
2662   static int32_t param27_init[] = {1};
2663   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2664   static int32_t param28_init[] = {2};
2665   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2666   static int32_t param29_init[] = {2};
2667   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2668   static int32_t param30_init[] = {2};
2669   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2670   static int32_t param31_init[] = {2};
2671   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2672   static int32_t param32_init[] = {0};
2673   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2674   static bool8 layout_init[] = {false};
2675   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2676   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2677   // Phase 3, inputs and outputs
2678   model->identifyInputsAndOutputs(
2679     {op13},
2680     {op43});
2681   assert(model->isValid());
2682 }
2683 
is_ignored_nhwc_float16_4(int i)2684 inline bool is_ignored_nhwc_float16_4(int i) {
2685   static std::set<int> ignore = {};
2686   return ignore.find(i) != ignore.end();
2687 }
2688 
CreateModel_nchw_4(Model * model)2689 void CreateModel_nchw_4(Model *model) {
2690   OperandType type0(Type::BOOL, {});
2691   OperandType type2(Type::INT32, {});
2692   OperandType type44(Type::TENSOR_FLOAT32, {1, 1, 2, 4});
2693   OperandType type45(Type::TENSOR_FLOAT32, {1, 1, 1, 2});
2694   // Phase 1, operands
2695   auto op13 = model->addOperand(&type44);
2696   auto param27 = model->addOperand(&type2);
2697   auto param28 = model->addOperand(&type2);
2698   auto param29 = model->addOperand(&type2);
2699   auto param30 = model->addOperand(&type2);
2700   auto param31 = model->addOperand(&type2);
2701   auto param32 = model->addOperand(&type2);
2702   auto layout = model->addOperand(&type0);
2703   auto op43 = model->addOperand(&type45);
2704   // Phase 2, operations
2705   static int32_t param27_init[] = {1};
2706   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2707   static int32_t param28_init[] = {2};
2708   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2709   static int32_t param29_init[] = {2};
2710   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2711   static int32_t param30_init[] = {2};
2712   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2713   static int32_t param31_init[] = {2};
2714   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2715   static int32_t param32_init[] = {0};
2716   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2717   static bool8 layout_init[] = {true};
2718   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2719   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2720   // Phase 3, inputs and outputs
2721   model->identifyInputsAndOutputs(
2722     {op13},
2723     {op43});
2724   assert(model->isValid());
2725 }
2726 
is_ignored_nchw_4(int i)2727 inline bool is_ignored_nchw_4(int i) {
2728   static std::set<int> ignore = {};
2729   return ignore.find(i) != ignore.end();
2730 }
2731 
CreateModel_nchw_relaxed_4(Model * model)2732 void CreateModel_nchw_relaxed_4(Model *model) {
2733   OperandType type0(Type::BOOL, {});
2734   OperandType type2(Type::INT32, {});
2735   OperandType type44(Type::TENSOR_FLOAT32, {1, 1, 2, 4});
2736   OperandType type45(Type::TENSOR_FLOAT32, {1, 1, 1, 2});
2737   // Phase 1, operands
2738   auto op13 = model->addOperand(&type44);
2739   auto param27 = model->addOperand(&type2);
2740   auto param28 = model->addOperand(&type2);
2741   auto param29 = model->addOperand(&type2);
2742   auto param30 = model->addOperand(&type2);
2743   auto param31 = model->addOperand(&type2);
2744   auto param32 = model->addOperand(&type2);
2745   auto layout = model->addOperand(&type0);
2746   auto op43 = model->addOperand(&type45);
2747   // Phase 2, operations
2748   static int32_t param27_init[] = {1};
2749   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2750   static int32_t param28_init[] = {2};
2751   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2752   static int32_t param29_init[] = {2};
2753   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2754   static int32_t param30_init[] = {2};
2755   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2756   static int32_t param31_init[] = {2};
2757   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2758   static int32_t param32_init[] = {0};
2759   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2760   static bool8 layout_init[] = {true};
2761   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2762   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2763   // Phase 3, inputs and outputs
2764   model->identifyInputsAndOutputs(
2765     {op13},
2766     {op43});
2767   // Phase 4: set relaxed execution
2768   model->relaxComputationFloat32toFloat16(true);
2769   assert(model->isValid());
2770 }
2771 
is_ignored_nchw_relaxed_4(int i)2772 inline bool is_ignored_nchw_relaxed_4(int i) {
2773   static std::set<int> ignore = {};
2774   return ignore.find(i) != ignore.end();
2775 }
2776 
CreateModel_nchw_quant8_4(Model * model)2777 void CreateModel_nchw_quant8_4(Model *model) {
2778   OperandType type0(Type::BOOL, {});
2779   OperandType type2(Type::INT32, {});
2780   OperandType type46(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 4}, 0.25f, 0);
2781   OperandType type47(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 2}, 0.25f, 0);
2782   // Phase 1, operands
2783   auto op13 = model->addOperand(&type46);
2784   auto param27 = model->addOperand(&type2);
2785   auto param28 = model->addOperand(&type2);
2786   auto param29 = model->addOperand(&type2);
2787   auto param30 = model->addOperand(&type2);
2788   auto param31 = model->addOperand(&type2);
2789   auto param32 = model->addOperand(&type2);
2790   auto layout = model->addOperand(&type0);
2791   auto op43 = model->addOperand(&type47);
2792   // Phase 2, operations
2793   static int32_t param27_init[] = {1};
2794   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2795   static int32_t param28_init[] = {2};
2796   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2797   static int32_t param29_init[] = {2};
2798   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2799   static int32_t param30_init[] = {2};
2800   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2801   static int32_t param31_init[] = {2};
2802   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2803   static int32_t param32_init[] = {0};
2804   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2805   static bool8 layout_init[] = {true};
2806   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2807   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2808   // Phase 3, inputs and outputs
2809   model->identifyInputsAndOutputs(
2810     {op13},
2811     {op43});
2812   assert(model->isValid());
2813 }
2814 
is_ignored_nchw_quant8_4(int i)2815 inline bool is_ignored_nchw_quant8_4(int i) {
2816   static std::set<int> ignore = {};
2817   return ignore.find(i) != ignore.end();
2818 }
2819 
CreateModel_nchw_float16_4(Model * model)2820 void CreateModel_nchw_float16_4(Model *model) {
2821   OperandType type0(Type::BOOL, {});
2822   OperandType type2(Type::INT32, {});
2823   OperandType type48(Type::TENSOR_FLOAT16, {1, 1, 2, 4});
2824   OperandType type49(Type::TENSOR_FLOAT16, {1, 1, 1, 2});
2825   // Phase 1, operands
2826   auto op13 = model->addOperand(&type48);
2827   auto param27 = model->addOperand(&type2);
2828   auto param28 = model->addOperand(&type2);
2829   auto param29 = model->addOperand(&type2);
2830   auto param30 = model->addOperand(&type2);
2831   auto param31 = model->addOperand(&type2);
2832   auto param32 = model->addOperand(&type2);
2833   auto layout = model->addOperand(&type0);
2834   auto op43 = model->addOperand(&type49);
2835   // Phase 2, operations
2836   static int32_t param27_init[] = {1};
2837   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2838   static int32_t param28_init[] = {2};
2839   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2840   static int32_t param29_init[] = {2};
2841   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2842   static int32_t param30_init[] = {2};
2843   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2844   static int32_t param31_init[] = {2};
2845   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2846   static int32_t param32_init[] = {0};
2847   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2848   static bool8 layout_init[] = {true};
2849   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2850   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2851   // Phase 3, inputs and outputs
2852   model->identifyInputsAndOutputs(
2853     {op13},
2854     {op43});
2855   assert(model->isValid());
2856 }
2857 
is_ignored_nchw_float16_4(int i)2858 inline bool is_ignored_nchw_float16_4(int i) {
2859   static std::set<int> ignore = {};
2860   return ignore.find(i) != ignore.end();
2861 }
2862 
CreateModel_dynamic_output_shape_nhwc_4(Model * model)2863 void CreateModel_dynamic_output_shape_nhwc_4(Model *model) {
2864   OperandType type0(Type::BOOL, {});
2865   OperandType type2(Type::INT32, {});
2866   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2867   OperandType type5(Type::TENSOR_FLOAT32, {1, 2, 4, 1});
2868   // Phase 1, operands
2869   auto op13 = model->addOperand(&type5);
2870   auto param27 = model->addOperand(&type2);
2871   auto param28 = model->addOperand(&type2);
2872   auto param29 = model->addOperand(&type2);
2873   auto param30 = model->addOperand(&type2);
2874   auto param31 = model->addOperand(&type2);
2875   auto param32 = model->addOperand(&type2);
2876   auto layout = model->addOperand(&type0);
2877   auto op43 = model->addOperand(&type22);
2878   // Phase 2, operations
2879   static int32_t param27_init[] = {1};
2880   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2881   static int32_t param28_init[] = {2};
2882   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2883   static int32_t param29_init[] = {2};
2884   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2885   static int32_t param30_init[] = {2};
2886   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2887   static int32_t param31_init[] = {2};
2888   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2889   static int32_t param32_init[] = {0};
2890   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2891   static bool8 layout_init[] = {false};
2892   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2893   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2894   // Phase 3, inputs and outputs
2895   model->identifyInputsAndOutputs(
2896     {op13},
2897     {op43});
2898   assert(model->isValid());
2899 }
2900 
is_ignored_dynamic_output_shape_nhwc_4(int i)2901 inline bool is_ignored_dynamic_output_shape_nhwc_4(int i) {
2902   static std::set<int> ignore = {};
2903   return ignore.find(i) != ignore.end();
2904 }
2905 
CreateModel_dynamic_output_shape_nhwc_relaxed_4(Model * model)2906 void CreateModel_dynamic_output_shape_nhwc_relaxed_4(Model *model) {
2907   OperandType type0(Type::BOOL, {});
2908   OperandType type2(Type::INT32, {});
2909   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2910   OperandType type5(Type::TENSOR_FLOAT32, {1, 2, 4, 1});
2911   // Phase 1, operands
2912   auto op13 = model->addOperand(&type5);
2913   auto param27 = model->addOperand(&type2);
2914   auto param28 = model->addOperand(&type2);
2915   auto param29 = model->addOperand(&type2);
2916   auto param30 = model->addOperand(&type2);
2917   auto param31 = model->addOperand(&type2);
2918   auto param32 = model->addOperand(&type2);
2919   auto layout = model->addOperand(&type0);
2920   auto op43 = model->addOperand(&type22);
2921   // Phase 2, operations
2922   static int32_t param27_init[] = {1};
2923   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2924   static int32_t param28_init[] = {2};
2925   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2926   static int32_t param29_init[] = {2};
2927   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2928   static int32_t param30_init[] = {2};
2929   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2930   static int32_t param31_init[] = {2};
2931   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2932   static int32_t param32_init[] = {0};
2933   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2934   static bool8 layout_init[] = {false};
2935   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2936   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2937   // Phase 3, inputs and outputs
2938   model->identifyInputsAndOutputs(
2939     {op13},
2940     {op43});
2941   // Phase 4: set relaxed execution
2942   model->relaxComputationFloat32toFloat16(true);
2943   assert(model->isValid());
2944 }
2945 
is_ignored_dynamic_output_shape_nhwc_relaxed_4(int i)2946 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_4(int i) {
2947   static std::set<int> ignore = {};
2948   return ignore.find(i) != ignore.end();
2949 }
2950 
CreateModel_dynamic_output_shape_nhwc_quant8_4(Model * model)2951 void CreateModel_dynamic_output_shape_nhwc_quant8_4(Model *model) {
2952   OperandType type0(Type::BOOL, {});
2953   OperandType type2(Type::INT32, {});
2954   OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.25f, 0);
2955   OperandType type40(Type::TENSOR_QUANT8_ASYMM, {1, 2, 4, 1}, 0.25f, 0);
2956   // Phase 1, operands
2957   auto op13 = model->addOperand(&type40);
2958   auto param27 = model->addOperand(&type2);
2959   auto param28 = model->addOperand(&type2);
2960   auto param29 = model->addOperand(&type2);
2961   auto param30 = model->addOperand(&type2);
2962   auto param31 = model->addOperand(&type2);
2963   auto param32 = model->addOperand(&type2);
2964   auto layout = model->addOperand(&type0);
2965   auto op43 = model->addOperand(&type39);
2966   // Phase 2, operations
2967   static int32_t param27_init[] = {1};
2968   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2969   static int32_t param28_init[] = {2};
2970   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2971   static int32_t param29_init[] = {2};
2972   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2973   static int32_t param30_init[] = {2};
2974   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2975   static int32_t param31_init[] = {2};
2976   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2977   static int32_t param32_init[] = {0};
2978   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2979   static bool8 layout_init[] = {false};
2980   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2981   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
2982   // Phase 3, inputs and outputs
2983   model->identifyInputsAndOutputs(
2984     {op13},
2985     {op43});
2986   assert(model->isValid());
2987 }
2988 
is_ignored_dynamic_output_shape_nhwc_quant8_4(int i)2989 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_4(int i) {
2990   static std::set<int> ignore = {};
2991   return ignore.find(i) != ignore.end();
2992 }
2993 
CreateModel_dynamic_output_shape_nhwc_float16_4(Model * model)2994 void CreateModel_dynamic_output_shape_nhwc_float16_4(Model *model) {
2995   OperandType type0(Type::BOOL, {});
2996   OperandType type2(Type::INT32, {});
2997   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
2998   OperandType type42(Type::TENSOR_FLOAT16, {1, 2, 4, 1});
2999   // Phase 1, operands
3000   auto op13 = model->addOperand(&type42);
3001   auto param27 = model->addOperand(&type2);
3002   auto param28 = model->addOperand(&type2);
3003   auto param29 = model->addOperand(&type2);
3004   auto param30 = model->addOperand(&type2);
3005   auto param31 = model->addOperand(&type2);
3006   auto param32 = model->addOperand(&type2);
3007   auto layout = model->addOperand(&type0);
3008   auto op43 = model->addOperand(&type24);
3009   // Phase 2, operations
3010   static int32_t param27_init[] = {1};
3011   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3012   static int32_t param28_init[] = {2};
3013   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3014   static int32_t param29_init[] = {2};
3015   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3016   static int32_t param30_init[] = {2};
3017   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3018   static int32_t param31_init[] = {2};
3019   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3020   static int32_t param32_init[] = {0};
3021   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3022   static bool8 layout_init[] = {false};
3023   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3024   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
3025   // Phase 3, inputs and outputs
3026   model->identifyInputsAndOutputs(
3027     {op13},
3028     {op43});
3029   assert(model->isValid());
3030 }
3031 
is_ignored_dynamic_output_shape_nhwc_float16_4(int i)3032 inline bool is_ignored_dynamic_output_shape_nhwc_float16_4(int i) {
3033   static std::set<int> ignore = {};
3034   return ignore.find(i) != ignore.end();
3035 }
3036 
CreateModel_dynamic_output_shape_nchw_4(Model * model)3037 void CreateModel_dynamic_output_shape_nchw_4(Model *model) {
3038   OperandType type0(Type::BOOL, {});
3039   OperandType type2(Type::INT32, {});
3040   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
3041   OperandType type44(Type::TENSOR_FLOAT32, {1, 1, 2, 4});
3042   // Phase 1, operands
3043   auto op13 = model->addOperand(&type44);
3044   auto param27 = model->addOperand(&type2);
3045   auto param28 = model->addOperand(&type2);
3046   auto param29 = model->addOperand(&type2);
3047   auto param30 = model->addOperand(&type2);
3048   auto param31 = model->addOperand(&type2);
3049   auto param32 = model->addOperand(&type2);
3050   auto layout = model->addOperand(&type0);
3051   auto op43 = model->addOperand(&type22);
3052   // Phase 2, operations
3053   static int32_t param27_init[] = {1};
3054   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3055   static int32_t param28_init[] = {2};
3056   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3057   static int32_t param29_init[] = {2};
3058   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3059   static int32_t param30_init[] = {2};
3060   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3061   static int32_t param31_init[] = {2};
3062   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3063   static int32_t param32_init[] = {0};
3064   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3065   static bool8 layout_init[] = {true};
3066   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3067   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
3068   // Phase 3, inputs and outputs
3069   model->identifyInputsAndOutputs(
3070     {op13},
3071     {op43});
3072   assert(model->isValid());
3073 }
3074 
is_ignored_dynamic_output_shape_nchw_4(int i)3075 inline bool is_ignored_dynamic_output_shape_nchw_4(int i) {
3076   static std::set<int> ignore = {};
3077   return ignore.find(i) != ignore.end();
3078 }
3079 
CreateModel_dynamic_output_shape_nchw_relaxed_4(Model * model)3080 void CreateModel_dynamic_output_shape_nchw_relaxed_4(Model *model) {
3081   OperandType type0(Type::BOOL, {});
3082   OperandType type2(Type::INT32, {});
3083   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
3084   OperandType type44(Type::TENSOR_FLOAT32, {1, 1, 2, 4});
3085   // Phase 1, operands
3086   auto op13 = model->addOperand(&type44);
3087   auto param27 = model->addOperand(&type2);
3088   auto param28 = model->addOperand(&type2);
3089   auto param29 = model->addOperand(&type2);
3090   auto param30 = model->addOperand(&type2);
3091   auto param31 = model->addOperand(&type2);
3092   auto param32 = model->addOperand(&type2);
3093   auto layout = model->addOperand(&type0);
3094   auto op43 = model->addOperand(&type22);
3095   // Phase 2, operations
3096   static int32_t param27_init[] = {1};
3097   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3098   static int32_t param28_init[] = {2};
3099   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3100   static int32_t param29_init[] = {2};
3101   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3102   static int32_t param30_init[] = {2};
3103   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3104   static int32_t param31_init[] = {2};
3105   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3106   static int32_t param32_init[] = {0};
3107   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3108   static bool8 layout_init[] = {true};
3109   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3110   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
3111   // Phase 3, inputs and outputs
3112   model->identifyInputsAndOutputs(
3113     {op13},
3114     {op43});
3115   // Phase 4: set relaxed execution
3116   model->relaxComputationFloat32toFloat16(true);
3117   assert(model->isValid());
3118 }
3119 
is_ignored_dynamic_output_shape_nchw_relaxed_4(int i)3120 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_4(int i) {
3121   static std::set<int> ignore = {};
3122   return ignore.find(i) != ignore.end();
3123 }
3124 
CreateModel_dynamic_output_shape_nchw_quant8_4(Model * model)3125 void CreateModel_dynamic_output_shape_nchw_quant8_4(Model *model) {
3126   OperandType type0(Type::BOOL, {});
3127   OperandType type2(Type::INT32, {});
3128   OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.25f, 0);
3129   OperandType type46(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 4}, 0.25f, 0);
3130   // Phase 1, operands
3131   auto op13 = model->addOperand(&type46);
3132   auto param27 = model->addOperand(&type2);
3133   auto param28 = model->addOperand(&type2);
3134   auto param29 = model->addOperand(&type2);
3135   auto param30 = model->addOperand(&type2);
3136   auto param31 = model->addOperand(&type2);
3137   auto param32 = model->addOperand(&type2);
3138   auto layout = model->addOperand(&type0);
3139   auto op43 = model->addOperand(&type39);
3140   // Phase 2, operations
3141   static int32_t param27_init[] = {1};
3142   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3143   static int32_t param28_init[] = {2};
3144   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3145   static int32_t param29_init[] = {2};
3146   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3147   static int32_t param30_init[] = {2};
3148   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3149   static int32_t param31_init[] = {2};
3150   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3151   static int32_t param32_init[] = {0};
3152   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3153   static bool8 layout_init[] = {true};
3154   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3155   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
3156   // Phase 3, inputs and outputs
3157   model->identifyInputsAndOutputs(
3158     {op13},
3159     {op43});
3160   assert(model->isValid());
3161 }
3162 
is_ignored_dynamic_output_shape_nchw_quant8_4(int i)3163 inline bool is_ignored_dynamic_output_shape_nchw_quant8_4(int i) {
3164   static std::set<int> ignore = {};
3165   return ignore.find(i) != ignore.end();
3166 }
3167 
CreateModel_dynamic_output_shape_nchw_float16_4(Model * model)3168 void CreateModel_dynamic_output_shape_nchw_float16_4(Model *model) {
3169   OperandType type0(Type::BOOL, {});
3170   OperandType type2(Type::INT32, {});
3171   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
3172   OperandType type48(Type::TENSOR_FLOAT16, {1, 1, 2, 4});
3173   // Phase 1, operands
3174   auto op13 = model->addOperand(&type48);
3175   auto param27 = model->addOperand(&type2);
3176   auto param28 = model->addOperand(&type2);
3177   auto param29 = model->addOperand(&type2);
3178   auto param30 = model->addOperand(&type2);
3179   auto param31 = model->addOperand(&type2);
3180   auto param32 = model->addOperand(&type2);
3181   auto layout = model->addOperand(&type0);
3182   auto op43 = model->addOperand(&type24);
3183   // Phase 2, operations
3184   static int32_t param27_init[] = {1};
3185   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3186   static int32_t param28_init[] = {2};
3187   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3188   static int32_t param29_init[] = {2};
3189   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3190   static int32_t param30_init[] = {2};
3191   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3192   static int32_t param31_init[] = {2};
3193   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3194   static int32_t param32_init[] = {0};
3195   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3196   static bool8 layout_init[] = {true};
3197   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3198   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, layout}, {op43});
3199   // Phase 3, inputs and outputs
3200   model->identifyInputsAndOutputs(
3201     {op13},
3202     {op43});
3203   assert(model->isValid());
3204 }
3205 
is_ignored_dynamic_output_shape_nchw_float16_4(int i)3206 inline bool is_ignored_dynamic_output_shape_nchw_float16_4(int i) {
3207   static std::set<int> ignore = {};
3208   return ignore.find(i) != ignore.end();
3209 }
3210 
CreateModel_zero_sized_nhwc(Model * model)3211 void CreateModel_zero_sized_nhwc(Model *model) {
3212   OperandType type0(Type::BOOL, {});
3213   OperandType type10(Type::TENSOR_INT32, {0});
3214   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
3215   OperandType type12(Type::TENSOR_INT32, {1});
3216   OperandType type13(Type::FLOAT32, {});
3217   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
3218   OperandType type15(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
3219   OperandType type16(Type::TENSOR_FLOAT32, {0, 1, 1, 1});
3220   OperandType type2(Type::INT32, {});
3221   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
3222   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
3223   OperandType type9(Type::TENSOR_FLOAT32, {0});
3224   // Phase 1, operands
3225   auto scores = model->addOperand(&type7);
3226   auto roi = model->addOperand(&type8);
3227   auto param33 = model->addOperand(&type12);
3228   auto param34 = model->addOperand(&type13);
3229   auto param35 = model->addOperand(&type2);
3230   auto param36 = model->addOperand(&type2);
3231   auto param37 = model->addOperand(&type13);
3232   auto param38 = model->addOperand(&type13);
3233   auto param39 = model->addOperand(&type13);
3234   auto scoresOut = model->addOperand(&type9);
3235   auto roiOut = model->addOperand(&type11);
3236   auto classesOut = model->addOperand(&type10);
3237   auto batchSplitOut = model->addOperand(&type10);
3238   auto in = model->addOperand(&type14);
3239   auto param40 = model->addOperand(&type2);
3240   auto param41 = model->addOperand(&type2);
3241   auto param42 = model->addOperand(&type13);
3242   auto param43 = model->addOperand(&type13);
3243   auto param44 = model->addOperand(&type2);
3244   auto param45 = model->addOperand(&type2);
3245   auto layout = model->addOperand(&type0);
3246   auto featureMap = model->addOperand(&type15);
3247   auto param46 = model->addOperand(&type2);
3248   auto param47 = model->addOperand(&type2);
3249   auto param48 = model->addOperand(&type2);
3250   auto param49 = model->addOperand(&type2);
3251   auto param50 = model->addOperand(&type2);
3252   auto param51 = model->addOperand(&type2);
3253   auto param52 = model->addOperand(&type2);
3254   auto param53 = model->addOperand(&type2);
3255   auto param54 = model->addOperand(&type2);
3256   auto out = model->addOperand(&type16);
3257   // Phase 2, operations
3258   static float scores_init[] = {0.9f, 0.1f};
3259   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
3260   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
3261   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
3262   static int32_t param33_init[] = {0};
3263   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3264   static float param34_init[] = {0.3f};
3265   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
3266   static int32_t param35_init[] = {-1};
3267   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3268   static int32_t param36_init[] = {0};
3269   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3270   static float param37_init[] = {0.4f};
3271   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
3272   static float param38_init[] = {1.0f};
3273   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
3274   static float param39_init[] = {0.3f};
3275   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
3276   static int32_t param40_init[] = {2};
3277   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3278   static int32_t param41_init[] = {2};
3279   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3280   static float param42_init[] = {2.0f};
3281   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
3282   static float param43_init[] = {2.0f};
3283   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
3284   static int32_t param44_init[] = {4};
3285   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
3286   static int32_t param45_init[] = {4};
3287   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
3288   static bool8 layout_init[] = {false};
3289   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3290   static int32_t param46_init[] = {0};
3291   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
3292   static int32_t param47_init[] = {0};
3293   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
3294   static int32_t param48_init[] = {0};
3295   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
3296   static int32_t param49_init[] = {0};
3297   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
3298   static int32_t param50_init[] = {1};
3299   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
3300   static int32_t param51_init[] = {1};
3301   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
3302   static int32_t param52_init[] = {2};
3303   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
3304   static int32_t param53_init[] = {2};
3305   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
3306   static int32_t param54_init[] = {0};
3307   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
3308   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
3309   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
3310   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
3311   // Phase 3, inputs and outputs
3312   model->identifyInputsAndOutputs(
3313     {in},
3314     {scoresOut, classesOut, out});
3315   assert(model->isValid());
3316 }
3317 
is_ignored_zero_sized_nhwc(int i)3318 inline bool is_ignored_zero_sized_nhwc(int i) {
3319   static std::set<int> ignore = {};
3320   return ignore.find(i) != ignore.end();
3321 }
3322 
CreateModel_zero_sized_nhwc_relaxed(Model * model)3323 void CreateModel_zero_sized_nhwc_relaxed(Model *model) {
3324   OperandType type0(Type::BOOL, {});
3325   OperandType type10(Type::TENSOR_INT32, {0});
3326   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
3327   OperandType type12(Type::TENSOR_INT32, {1});
3328   OperandType type13(Type::FLOAT32, {});
3329   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
3330   OperandType type15(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
3331   OperandType type16(Type::TENSOR_FLOAT32, {0, 1, 1, 1});
3332   OperandType type2(Type::INT32, {});
3333   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
3334   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
3335   OperandType type9(Type::TENSOR_FLOAT32, {0});
3336   // Phase 1, operands
3337   auto scores = model->addOperand(&type7);
3338   auto roi = model->addOperand(&type8);
3339   auto param33 = model->addOperand(&type12);
3340   auto param34 = model->addOperand(&type13);
3341   auto param35 = model->addOperand(&type2);
3342   auto param36 = model->addOperand(&type2);
3343   auto param37 = model->addOperand(&type13);
3344   auto param38 = model->addOperand(&type13);
3345   auto param39 = model->addOperand(&type13);
3346   auto scoresOut = model->addOperand(&type9);
3347   auto roiOut = model->addOperand(&type11);
3348   auto classesOut = model->addOperand(&type10);
3349   auto batchSplitOut = model->addOperand(&type10);
3350   auto in = model->addOperand(&type14);
3351   auto param40 = model->addOperand(&type2);
3352   auto param41 = model->addOperand(&type2);
3353   auto param42 = model->addOperand(&type13);
3354   auto param43 = model->addOperand(&type13);
3355   auto param44 = model->addOperand(&type2);
3356   auto param45 = model->addOperand(&type2);
3357   auto layout = model->addOperand(&type0);
3358   auto featureMap = model->addOperand(&type15);
3359   auto param46 = model->addOperand(&type2);
3360   auto param47 = model->addOperand(&type2);
3361   auto param48 = model->addOperand(&type2);
3362   auto param49 = model->addOperand(&type2);
3363   auto param50 = model->addOperand(&type2);
3364   auto param51 = model->addOperand(&type2);
3365   auto param52 = model->addOperand(&type2);
3366   auto param53 = model->addOperand(&type2);
3367   auto param54 = model->addOperand(&type2);
3368   auto out = model->addOperand(&type16);
3369   // Phase 2, operations
3370   static float scores_init[] = {0.9f, 0.1f};
3371   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
3372   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
3373   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
3374   static int32_t param33_init[] = {0};
3375   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3376   static float param34_init[] = {0.3f};
3377   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
3378   static int32_t param35_init[] = {-1};
3379   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3380   static int32_t param36_init[] = {0};
3381   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3382   static float param37_init[] = {0.4f};
3383   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
3384   static float param38_init[] = {1.0f};
3385   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
3386   static float param39_init[] = {0.3f};
3387   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
3388   static int32_t param40_init[] = {2};
3389   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3390   static int32_t param41_init[] = {2};
3391   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3392   static float param42_init[] = {2.0f};
3393   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
3394   static float param43_init[] = {2.0f};
3395   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
3396   static int32_t param44_init[] = {4};
3397   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
3398   static int32_t param45_init[] = {4};
3399   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
3400   static bool8 layout_init[] = {false};
3401   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3402   static int32_t param46_init[] = {0};
3403   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
3404   static int32_t param47_init[] = {0};
3405   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
3406   static int32_t param48_init[] = {0};
3407   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
3408   static int32_t param49_init[] = {0};
3409   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
3410   static int32_t param50_init[] = {1};
3411   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
3412   static int32_t param51_init[] = {1};
3413   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
3414   static int32_t param52_init[] = {2};
3415   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
3416   static int32_t param53_init[] = {2};
3417   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
3418   static int32_t param54_init[] = {0};
3419   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
3420   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
3421   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
3422   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
3423   // Phase 3, inputs and outputs
3424   model->identifyInputsAndOutputs(
3425     {in},
3426     {scoresOut, classesOut, out});
3427   // Phase 4: set relaxed execution
3428   model->relaxComputationFloat32toFloat16(true);
3429   assert(model->isValid());
3430 }
3431 
is_ignored_zero_sized_nhwc_relaxed(int i)3432 inline bool is_ignored_zero_sized_nhwc_relaxed(int i) {
3433   static std::set<int> ignore = {};
3434   return ignore.find(i) != ignore.end();
3435 }
3436 
CreateModel_zero_sized_nhwc_quant8(Model * model)3437 void CreateModel_zero_sized_nhwc_quant8(Model *model) {
3438   OperandType type0(Type::BOOL, {});
3439   OperandType type10(Type::TENSOR_INT32, {0});
3440   OperandType type12(Type::TENSOR_INT32, {1});
3441   OperandType type13(Type::FLOAT32, {});
3442   OperandType type2(Type::INT32, {});
3443   OperandType type50(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 1}, 0.1f, 128);
3444   OperandType type51(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
3445   OperandType type52(Type::TENSOR_QUANT8_ASYMM, {0, 1, 1, 1}, 0.1f, 128);
3446   OperandType type53(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
3447   OperandType type54(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
3448   OperandType type55(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
3449   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
3450   // Phase 1, operands
3451   auto scores = model->addOperand(&type55);
3452   auto roi = model->addOperand(&type53);
3453   auto param33 = model->addOperand(&type12);
3454   auto param34 = model->addOperand(&type13);
3455   auto param35 = model->addOperand(&type2);
3456   auto param36 = model->addOperand(&type2);
3457   auto param37 = model->addOperand(&type13);
3458   auto param38 = model->addOperand(&type13);
3459   auto param39 = model->addOperand(&type13);
3460   auto scoresOut = model->addOperand(&type56);
3461   auto roiOut = model->addOperand(&type54);
3462   auto classesOut = model->addOperand(&type10);
3463   auto batchSplitOut = model->addOperand(&type10);
3464   auto in = model->addOperand(&type51);
3465   auto param40 = model->addOperand(&type2);
3466   auto param41 = model->addOperand(&type2);
3467   auto param42 = model->addOperand(&type13);
3468   auto param43 = model->addOperand(&type13);
3469   auto param44 = model->addOperand(&type2);
3470   auto param45 = model->addOperand(&type2);
3471   auto layout = model->addOperand(&type0);
3472   auto featureMap = model->addOperand(&type50);
3473   auto param46 = model->addOperand(&type2);
3474   auto param47 = model->addOperand(&type2);
3475   auto param48 = model->addOperand(&type2);
3476   auto param49 = model->addOperand(&type2);
3477   auto param50 = model->addOperand(&type2);
3478   auto param51 = model->addOperand(&type2);
3479   auto param52 = model->addOperand(&type2);
3480   auto param53 = model->addOperand(&type2);
3481   auto param54 = model->addOperand(&type2);
3482   auto out = model->addOperand(&type52);
3483   // Phase 2, operations
3484   static uint8_t scores_init[] = {137, 129};
3485   model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2);
3486   static uint16_t roi_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
3487   model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8);
3488   static int32_t param33_init[] = {0};
3489   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3490   static float param34_init[] = {0.3f};
3491   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
3492   static int32_t param35_init[] = {-1};
3493   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3494   static int32_t param36_init[] = {0};
3495   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3496   static float param37_init[] = {0.4f};
3497   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
3498   static float param38_init[] = {1.0f};
3499   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
3500   static float param39_init[] = {0.3f};
3501   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
3502   static int32_t param40_init[] = {2};
3503   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3504   static int32_t param41_init[] = {2};
3505   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3506   static float param42_init[] = {2.0f};
3507   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
3508   static float param43_init[] = {2.0f};
3509   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
3510   static int32_t param44_init[] = {4};
3511   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
3512   static int32_t param45_init[] = {4};
3513   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
3514   static bool8 layout_init[] = {false};
3515   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3516   static int32_t param46_init[] = {0};
3517   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
3518   static int32_t param47_init[] = {0};
3519   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
3520   static int32_t param48_init[] = {0};
3521   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
3522   static int32_t param49_init[] = {0};
3523   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
3524   static int32_t param50_init[] = {1};
3525   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
3526   static int32_t param51_init[] = {1};
3527   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
3528   static int32_t param52_init[] = {2};
3529   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
3530   static int32_t param53_init[] = {2};
3531   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
3532   static int32_t param54_init[] = {0};
3533   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
3534   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
3535   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
3536   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
3537   // Phase 3, inputs and outputs
3538   model->identifyInputsAndOutputs(
3539     {in},
3540     {scoresOut, classesOut, out});
3541   assert(model->isValid());
3542 }
3543 
is_ignored_zero_sized_nhwc_quant8(int i)3544 inline bool is_ignored_zero_sized_nhwc_quant8(int i) {
3545   static std::set<int> ignore = {};
3546   return ignore.find(i) != ignore.end();
3547 }
3548 
CreateModel_zero_sized_nhwc_float16(Model * model)3549 void CreateModel_zero_sized_nhwc_float16(Model *model) {
3550   OperandType type0(Type::BOOL, {});
3551   OperandType type10(Type::TENSOR_INT32, {0});
3552   OperandType type12(Type::TENSOR_INT32, {1});
3553   OperandType type2(Type::INT32, {});
3554   OperandType type57(Type::TENSOR_FLOAT16, {0, 2, 2, 1});
3555   OperandType type58(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
3556   OperandType type59(Type::TENSOR_FLOAT16, {0, 1, 1, 1});
3557   OperandType type60(Type::FLOAT16, {});
3558   OperandType type61(Type::TENSOR_FLOAT16, {1, 8});
3559   OperandType type62(Type::TENSOR_FLOAT16, {0, 4});
3560   OperandType type63(Type::TENSOR_FLOAT16, {1, 2});
3561   OperandType type64(Type::TENSOR_FLOAT16, {0});
3562   // Phase 1, operands
3563   auto scores = model->addOperand(&type63);
3564   auto roi = model->addOperand(&type61);
3565   auto param33 = model->addOperand(&type12);
3566   auto param34 = model->addOperand(&type60);
3567   auto param35 = model->addOperand(&type2);
3568   auto param36 = model->addOperand(&type2);
3569   auto param37 = model->addOperand(&type60);
3570   auto param38 = model->addOperand(&type60);
3571   auto param39 = model->addOperand(&type60);
3572   auto scoresOut = model->addOperand(&type64);
3573   auto roiOut = model->addOperand(&type62);
3574   auto classesOut = model->addOperand(&type10);
3575   auto batchSplitOut = model->addOperand(&type10);
3576   auto in = model->addOperand(&type58);
3577   auto param40 = model->addOperand(&type2);
3578   auto param41 = model->addOperand(&type2);
3579   auto param42 = model->addOperand(&type60);
3580   auto param43 = model->addOperand(&type60);
3581   auto param44 = model->addOperand(&type2);
3582   auto param45 = model->addOperand(&type2);
3583   auto layout = model->addOperand(&type0);
3584   auto featureMap = model->addOperand(&type57);
3585   auto param46 = model->addOperand(&type2);
3586   auto param47 = model->addOperand(&type2);
3587   auto param48 = model->addOperand(&type2);
3588   auto param49 = model->addOperand(&type2);
3589   auto param50 = model->addOperand(&type2);
3590   auto param51 = model->addOperand(&type2);
3591   auto param52 = model->addOperand(&type2);
3592   auto param53 = model->addOperand(&type2);
3593   auto param54 = model->addOperand(&type2);
3594   auto out = model->addOperand(&type59);
3595   // Phase 2, operations
3596   static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f};
3597   model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2);
3598   static _Float16 roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
3599   model->setOperandValue(roi, roi_init, sizeof(_Float16) * 8);
3600   static int32_t param33_init[] = {0};
3601   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3602   static _Float16 param34_init[] = {0.30000001192092896f};
3603   model->setOperandValue(param34, param34_init, sizeof(_Float16) * 1);
3604   static int32_t param35_init[] = {-1};
3605   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3606   static int32_t param36_init[] = {0};
3607   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3608   static _Float16 param37_init[] = {0.4000000059604645f};
3609   model->setOperandValue(param37, param37_init, sizeof(_Float16) * 1);
3610   static _Float16 param38_init[] = {1.0f};
3611   model->setOperandValue(param38, param38_init, sizeof(_Float16) * 1);
3612   static _Float16 param39_init[] = {0.30000001192092896f};
3613   model->setOperandValue(param39, param39_init, sizeof(_Float16) * 1);
3614   static int32_t param40_init[] = {2};
3615   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3616   static int32_t param41_init[] = {2};
3617   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3618   static _Float16 param42_init[] = {2.0f};
3619   model->setOperandValue(param42, param42_init, sizeof(_Float16) * 1);
3620   static _Float16 param43_init[] = {2.0f};
3621   model->setOperandValue(param43, param43_init, sizeof(_Float16) * 1);
3622   static int32_t param44_init[] = {4};
3623   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
3624   static int32_t param45_init[] = {4};
3625   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
3626   static bool8 layout_init[] = {false};
3627   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3628   static int32_t param46_init[] = {0};
3629   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
3630   static int32_t param47_init[] = {0};
3631   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
3632   static int32_t param48_init[] = {0};
3633   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
3634   static int32_t param49_init[] = {0};
3635   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
3636   static int32_t param50_init[] = {1};
3637   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
3638   static int32_t param51_init[] = {1};
3639   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
3640   static int32_t param52_init[] = {2};
3641   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
3642   static int32_t param53_init[] = {2};
3643   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
3644   static int32_t param54_init[] = {0};
3645   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
3646   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
3647   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
3648   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
3649   // Phase 3, inputs and outputs
3650   model->identifyInputsAndOutputs(
3651     {in},
3652     {scoresOut, classesOut, out});
3653   assert(model->isValid());
3654 }
3655 
is_ignored_zero_sized_nhwc_float16(int i)3656 inline bool is_ignored_zero_sized_nhwc_float16(int i) {
3657   static std::set<int> ignore = {};
3658   return ignore.find(i) != ignore.end();
3659 }
3660 
CreateModel_zero_sized_nchw(Model * model)3661 void CreateModel_zero_sized_nchw(Model *model) {
3662   OperandType type0(Type::BOOL, {});
3663   OperandType type10(Type::TENSOR_INT32, {0});
3664   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
3665   OperandType type12(Type::TENSOR_INT32, {1});
3666   OperandType type13(Type::FLOAT32, {});
3667   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
3668   OperandType type16(Type::TENSOR_FLOAT32, {0, 1, 1, 1});
3669   OperandType type2(Type::INT32, {});
3670   OperandType type65(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
3671   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
3672   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
3673   OperandType type9(Type::TENSOR_FLOAT32, {0});
3674   // Phase 1, operands
3675   auto scores = model->addOperand(&type7);
3676   auto roi = model->addOperand(&type8);
3677   auto param33 = model->addOperand(&type12);
3678   auto param34 = model->addOperand(&type13);
3679   auto param35 = model->addOperand(&type2);
3680   auto param36 = model->addOperand(&type2);
3681   auto param37 = model->addOperand(&type13);
3682   auto param38 = model->addOperand(&type13);
3683   auto param39 = model->addOperand(&type13);
3684   auto scoresOut = model->addOperand(&type9);
3685   auto roiOut = model->addOperand(&type11);
3686   auto classesOut = model->addOperand(&type10);
3687   auto batchSplitOut = model->addOperand(&type10);
3688   auto in = model->addOperand(&type14);
3689   auto param40 = model->addOperand(&type2);
3690   auto param41 = model->addOperand(&type2);
3691   auto param42 = model->addOperand(&type13);
3692   auto param43 = model->addOperand(&type13);
3693   auto param44 = model->addOperand(&type2);
3694   auto param45 = model->addOperand(&type2);
3695   auto layout = model->addOperand(&type0);
3696   auto featureMap = model->addOperand(&type65);
3697   auto param46 = model->addOperand(&type2);
3698   auto param47 = model->addOperand(&type2);
3699   auto param48 = model->addOperand(&type2);
3700   auto param49 = model->addOperand(&type2);
3701   auto param50 = model->addOperand(&type2);
3702   auto param51 = model->addOperand(&type2);
3703   auto param52 = model->addOperand(&type2);
3704   auto param53 = model->addOperand(&type2);
3705   auto param54 = model->addOperand(&type2);
3706   auto out = model->addOperand(&type16);
3707   // Phase 2, operations
3708   static float scores_init[] = {0.9f, 0.1f};
3709   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
3710   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
3711   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
3712   static int32_t param33_init[] = {0};
3713   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3714   static float param34_init[] = {0.3f};
3715   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
3716   static int32_t param35_init[] = {-1};
3717   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3718   static int32_t param36_init[] = {0};
3719   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3720   static float param37_init[] = {0.4f};
3721   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
3722   static float param38_init[] = {1.0f};
3723   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
3724   static float param39_init[] = {0.3f};
3725   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
3726   static int32_t param40_init[] = {2};
3727   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3728   static int32_t param41_init[] = {2};
3729   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3730   static float param42_init[] = {2.0f};
3731   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
3732   static float param43_init[] = {2.0f};
3733   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
3734   static int32_t param44_init[] = {4};
3735   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
3736   static int32_t param45_init[] = {4};
3737   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
3738   static bool8 layout_init[] = {true};
3739   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3740   static int32_t param46_init[] = {0};
3741   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
3742   static int32_t param47_init[] = {0};
3743   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
3744   static int32_t param48_init[] = {0};
3745   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
3746   static int32_t param49_init[] = {0};
3747   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
3748   static int32_t param50_init[] = {1};
3749   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
3750   static int32_t param51_init[] = {1};
3751   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
3752   static int32_t param52_init[] = {2};
3753   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
3754   static int32_t param53_init[] = {2};
3755   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
3756   static int32_t param54_init[] = {0};
3757   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
3758   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
3759   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
3760   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
3761   // Phase 3, inputs and outputs
3762   model->identifyInputsAndOutputs(
3763     {in},
3764     {scoresOut, classesOut, out});
3765   assert(model->isValid());
3766 }
3767 
is_ignored_zero_sized_nchw(int i)3768 inline bool is_ignored_zero_sized_nchw(int i) {
3769   static std::set<int> ignore = {};
3770   return ignore.find(i) != ignore.end();
3771 }
3772 
CreateModel_zero_sized_nchw_relaxed(Model * model)3773 void CreateModel_zero_sized_nchw_relaxed(Model *model) {
3774   OperandType type0(Type::BOOL, {});
3775   OperandType type10(Type::TENSOR_INT32, {0});
3776   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
3777   OperandType type12(Type::TENSOR_INT32, {1});
3778   OperandType type13(Type::FLOAT32, {});
3779   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
3780   OperandType type16(Type::TENSOR_FLOAT32, {0, 1, 1, 1});
3781   OperandType type2(Type::INT32, {});
3782   OperandType type65(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
3783   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
3784   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
3785   OperandType type9(Type::TENSOR_FLOAT32, {0});
3786   // Phase 1, operands
3787   auto scores = model->addOperand(&type7);
3788   auto roi = model->addOperand(&type8);
3789   auto param33 = model->addOperand(&type12);
3790   auto param34 = model->addOperand(&type13);
3791   auto param35 = model->addOperand(&type2);
3792   auto param36 = model->addOperand(&type2);
3793   auto param37 = model->addOperand(&type13);
3794   auto param38 = model->addOperand(&type13);
3795   auto param39 = model->addOperand(&type13);
3796   auto scoresOut = model->addOperand(&type9);
3797   auto roiOut = model->addOperand(&type11);
3798   auto classesOut = model->addOperand(&type10);
3799   auto batchSplitOut = model->addOperand(&type10);
3800   auto in = model->addOperand(&type14);
3801   auto param40 = model->addOperand(&type2);
3802   auto param41 = model->addOperand(&type2);
3803   auto param42 = model->addOperand(&type13);
3804   auto param43 = model->addOperand(&type13);
3805   auto param44 = model->addOperand(&type2);
3806   auto param45 = model->addOperand(&type2);
3807   auto layout = model->addOperand(&type0);
3808   auto featureMap = model->addOperand(&type65);
3809   auto param46 = model->addOperand(&type2);
3810   auto param47 = model->addOperand(&type2);
3811   auto param48 = model->addOperand(&type2);
3812   auto param49 = model->addOperand(&type2);
3813   auto param50 = model->addOperand(&type2);
3814   auto param51 = model->addOperand(&type2);
3815   auto param52 = model->addOperand(&type2);
3816   auto param53 = model->addOperand(&type2);
3817   auto param54 = model->addOperand(&type2);
3818   auto out = model->addOperand(&type16);
3819   // Phase 2, operations
3820   static float scores_init[] = {0.9f, 0.1f};
3821   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
3822   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
3823   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
3824   static int32_t param33_init[] = {0};
3825   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3826   static float param34_init[] = {0.3f};
3827   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
3828   static int32_t param35_init[] = {-1};
3829   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3830   static int32_t param36_init[] = {0};
3831   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3832   static float param37_init[] = {0.4f};
3833   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
3834   static float param38_init[] = {1.0f};
3835   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
3836   static float param39_init[] = {0.3f};
3837   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
3838   static int32_t param40_init[] = {2};
3839   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3840   static int32_t param41_init[] = {2};
3841   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3842   static float param42_init[] = {2.0f};
3843   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
3844   static float param43_init[] = {2.0f};
3845   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
3846   static int32_t param44_init[] = {4};
3847   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
3848   static int32_t param45_init[] = {4};
3849   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
3850   static bool8 layout_init[] = {true};
3851   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3852   static int32_t param46_init[] = {0};
3853   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
3854   static int32_t param47_init[] = {0};
3855   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
3856   static int32_t param48_init[] = {0};
3857   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
3858   static int32_t param49_init[] = {0};
3859   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
3860   static int32_t param50_init[] = {1};
3861   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
3862   static int32_t param51_init[] = {1};
3863   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
3864   static int32_t param52_init[] = {2};
3865   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
3866   static int32_t param53_init[] = {2};
3867   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
3868   static int32_t param54_init[] = {0};
3869   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
3870   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
3871   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
3872   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
3873   // Phase 3, inputs and outputs
3874   model->identifyInputsAndOutputs(
3875     {in},
3876     {scoresOut, classesOut, out});
3877   // Phase 4: set relaxed execution
3878   model->relaxComputationFloat32toFloat16(true);
3879   assert(model->isValid());
3880 }
3881 
is_ignored_zero_sized_nchw_relaxed(int i)3882 inline bool is_ignored_zero_sized_nchw_relaxed(int i) {
3883   static std::set<int> ignore = {};
3884   return ignore.find(i) != ignore.end();
3885 }
3886 
CreateModel_zero_sized_nchw_quant8(Model * model)3887 void CreateModel_zero_sized_nchw_quant8(Model *model) {
3888   OperandType type0(Type::BOOL, {});
3889   OperandType type10(Type::TENSOR_INT32, {0});
3890   OperandType type12(Type::TENSOR_INT32, {1});
3891   OperandType type13(Type::FLOAT32, {});
3892   OperandType type2(Type::INT32, {});
3893   OperandType type51(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
3894   OperandType type52(Type::TENSOR_QUANT8_ASYMM, {0, 1, 1, 1}, 0.1f, 128);
3895   OperandType type53(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
3896   OperandType type54(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
3897   OperandType type55(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
3898   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
3899   OperandType type66(Type::TENSOR_QUANT8_ASYMM, {0, 1, 2, 2}, 0.1f, 128);
3900   // Phase 1, operands
3901   auto scores = model->addOperand(&type55);
3902   auto roi = model->addOperand(&type53);
3903   auto param33 = model->addOperand(&type12);
3904   auto param34 = model->addOperand(&type13);
3905   auto param35 = model->addOperand(&type2);
3906   auto param36 = model->addOperand(&type2);
3907   auto param37 = model->addOperand(&type13);
3908   auto param38 = model->addOperand(&type13);
3909   auto param39 = model->addOperand(&type13);
3910   auto scoresOut = model->addOperand(&type56);
3911   auto roiOut = model->addOperand(&type54);
3912   auto classesOut = model->addOperand(&type10);
3913   auto batchSplitOut = model->addOperand(&type10);
3914   auto in = model->addOperand(&type51);
3915   auto param40 = model->addOperand(&type2);
3916   auto param41 = model->addOperand(&type2);
3917   auto param42 = model->addOperand(&type13);
3918   auto param43 = model->addOperand(&type13);
3919   auto param44 = model->addOperand(&type2);
3920   auto param45 = model->addOperand(&type2);
3921   auto layout = model->addOperand(&type0);
3922   auto featureMap = model->addOperand(&type66);
3923   auto param46 = model->addOperand(&type2);
3924   auto param47 = model->addOperand(&type2);
3925   auto param48 = model->addOperand(&type2);
3926   auto param49 = model->addOperand(&type2);
3927   auto param50 = model->addOperand(&type2);
3928   auto param51 = model->addOperand(&type2);
3929   auto param52 = model->addOperand(&type2);
3930   auto param53 = model->addOperand(&type2);
3931   auto param54 = model->addOperand(&type2);
3932   auto out = model->addOperand(&type52);
3933   // Phase 2, operations
3934   static uint8_t scores_init[] = {137, 129};
3935   model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2);
3936   static uint16_t roi_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
3937   model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8);
3938   static int32_t param33_init[] = {0};
3939   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3940   static float param34_init[] = {0.3f};
3941   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
3942   static int32_t param35_init[] = {-1};
3943   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3944   static int32_t param36_init[] = {0};
3945   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3946   static float param37_init[] = {0.4f};
3947   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
3948   static float param38_init[] = {1.0f};
3949   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
3950   static float param39_init[] = {0.3f};
3951   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
3952   static int32_t param40_init[] = {2};
3953   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3954   static int32_t param41_init[] = {2};
3955   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3956   static float param42_init[] = {2.0f};
3957   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
3958   static float param43_init[] = {2.0f};
3959   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
3960   static int32_t param44_init[] = {4};
3961   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
3962   static int32_t param45_init[] = {4};
3963   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
3964   static bool8 layout_init[] = {true};
3965   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3966   static int32_t param46_init[] = {0};
3967   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
3968   static int32_t param47_init[] = {0};
3969   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
3970   static int32_t param48_init[] = {0};
3971   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
3972   static int32_t param49_init[] = {0};
3973   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
3974   static int32_t param50_init[] = {1};
3975   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
3976   static int32_t param51_init[] = {1};
3977   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
3978   static int32_t param52_init[] = {2};
3979   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
3980   static int32_t param53_init[] = {2};
3981   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
3982   static int32_t param54_init[] = {0};
3983   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
3984   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
3985   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
3986   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
3987   // Phase 3, inputs and outputs
3988   model->identifyInputsAndOutputs(
3989     {in},
3990     {scoresOut, classesOut, out});
3991   assert(model->isValid());
3992 }
3993 
is_ignored_zero_sized_nchw_quant8(int i)3994 inline bool is_ignored_zero_sized_nchw_quant8(int i) {
3995   static std::set<int> ignore = {};
3996   return ignore.find(i) != ignore.end();
3997 }
3998 
CreateModel_zero_sized_nchw_float16(Model * model)3999 void CreateModel_zero_sized_nchw_float16(Model *model) {
4000   OperandType type0(Type::BOOL, {});
4001   OperandType type10(Type::TENSOR_INT32, {0});
4002   OperandType type12(Type::TENSOR_INT32, {1});
4003   OperandType type2(Type::INT32, {});
4004   OperandType type58(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
4005   OperandType type59(Type::TENSOR_FLOAT16, {0, 1, 1, 1});
4006   OperandType type60(Type::FLOAT16, {});
4007   OperandType type61(Type::TENSOR_FLOAT16, {1, 8});
4008   OperandType type62(Type::TENSOR_FLOAT16, {0, 4});
4009   OperandType type63(Type::TENSOR_FLOAT16, {1, 2});
4010   OperandType type64(Type::TENSOR_FLOAT16, {0});
4011   OperandType type67(Type::TENSOR_FLOAT16, {0, 1, 2, 2});
4012   // Phase 1, operands
4013   auto scores = model->addOperand(&type63);
4014   auto roi = model->addOperand(&type61);
4015   auto param33 = model->addOperand(&type12);
4016   auto param34 = model->addOperand(&type60);
4017   auto param35 = model->addOperand(&type2);
4018   auto param36 = model->addOperand(&type2);
4019   auto param37 = model->addOperand(&type60);
4020   auto param38 = model->addOperand(&type60);
4021   auto param39 = model->addOperand(&type60);
4022   auto scoresOut = model->addOperand(&type64);
4023   auto roiOut = model->addOperand(&type62);
4024   auto classesOut = model->addOperand(&type10);
4025   auto batchSplitOut = model->addOperand(&type10);
4026   auto in = model->addOperand(&type58);
4027   auto param40 = model->addOperand(&type2);
4028   auto param41 = model->addOperand(&type2);
4029   auto param42 = model->addOperand(&type60);
4030   auto param43 = model->addOperand(&type60);
4031   auto param44 = model->addOperand(&type2);
4032   auto param45 = model->addOperand(&type2);
4033   auto layout = model->addOperand(&type0);
4034   auto featureMap = model->addOperand(&type67);
4035   auto param46 = model->addOperand(&type2);
4036   auto param47 = model->addOperand(&type2);
4037   auto param48 = model->addOperand(&type2);
4038   auto param49 = model->addOperand(&type2);
4039   auto param50 = model->addOperand(&type2);
4040   auto param51 = model->addOperand(&type2);
4041   auto param52 = model->addOperand(&type2);
4042   auto param53 = model->addOperand(&type2);
4043   auto param54 = model->addOperand(&type2);
4044   auto out = model->addOperand(&type59);
4045   // Phase 2, operations
4046   static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f};
4047   model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2);
4048   static _Float16 roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4049   model->setOperandValue(roi, roi_init, sizeof(_Float16) * 8);
4050   static int32_t param33_init[] = {0};
4051   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
4052   static _Float16 param34_init[] = {0.30000001192092896f};
4053   model->setOperandValue(param34, param34_init, sizeof(_Float16) * 1);
4054   static int32_t param35_init[] = {-1};
4055   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
4056   static int32_t param36_init[] = {0};
4057   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4058   static _Float16 param37_init[] = {0.4000000059604645f};
4059   model->setOperandValue(param37, param37_init, sizeof(_Float16) * 1);
4060   static _Float16 param38_init[] = {1.0f};
4061   model->setOperandValue(param38, param38_init, sizeof(_Float16) * 1);
4062   static _Float16 param39_init[] = {0.30000001192092896f};
4063   model->setOperandValue(param39, param39_init, sizeof(_Float16) * 1);
4064   static int32_t param40_init[] = {2};
4065   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4066   static int32_t param41_init[] = {2};
4067   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4068   static _Float16 param42_init[] = {2.0f};
4069   model->setOperandValue(param42, param42_init, sizeof(_Float16) * 1);
4070   static _Float16 param43_init[] = {2.0f};
4071   model->setOperandValue(param43, param43_init, sizeof(_Float16) * 1);
4072   static int32_t param44_init[] = {4};
4073   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4074   static int32_t param45_init[] = {4};
4075   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4076   static bool8 layout_init[] = {true};
4077   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4078   static int32_t param46_init[] = {0};
4079   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
4080   static int32_t param47_init[] = {0};
4081   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
4082   static int32_t param48_init[] = {0};
4083   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
4084   static int32_t param49_init[] = {0};
4085   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4086   static int32_t param50_init[] = {1};
4087   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4088   static int32_t param51_init[] = {1};
4089   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
4090   static int32_t param52_init[] = {2};
4091   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
4092   static int32_t param53_init[] = {2};
4093   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4094   static int32_t param54_init[] = {0};
4095   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4096   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
4097   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
4098   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
4099   // Phase 3, inputs and outputs
4100   model->identifyInputsAndOutputs(
4101     {in},
4102     {scoresOut, classesOut, out});
4103   assert(model->isValid());
4104 }
4105 
is_ignored_zero_sized_nchw_float16(int i)4106 inline bool is_ignored_zero_sized_nchw_float16(int i) {
4107   static std::set<int> ignore = {};
4108   return ignore.find(i) != ignore.end();
4109 }
4110 
CreateModel_zero_sized_dynamic_output_shape_nhwc(Model * model)4111 void CreateModel_zero_sized_dynamic_output_shape_nhwc(Model *model) {
4112   OperandType type0(Type::BOOL, {});
4113   OperandType type10(Type::TENSOR_INT32, {0});
4114   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
4115   OperandType type12(Type::TENSOR_INT32, {1});
4116   OperandType type13(Type::FLOAT32, {});
4117   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
4118   OperandType type15(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
4119   OperandType type2(Type::INT32, {});
4120   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
4121   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
4122   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
4123   OperandType type9(Type::TENSOR_FLOAT32, {0});
4124   // Phase 1, operands
4125   auto scores = model->addOperand(&type7);
4126   auto roi = model->addOperand(&type8);
4127   auto param33 = model->addOperand(&type12);
4128   auto param34 = model->addOperand(&type13);
4129   auto param35 = model->addOperand(&type2);
4130   auto param36 = model->addOperand(&type2);
4131   auto param37 = model->addOperand(&type13);
4132   auto param38 = model->addOperand(&type13);
4133   auto param39 = model->addOperand(&type13);
4134   auto scoresOut = model->addOperand(&type9);
4135   auto roiOut = model->addOperand(&type11);
4136   auto classesOut = model->addOperand(&type10);
4137   auto batchSplitOut = model->addOperand(&type10);
4138   auto in = model->addOperand(&type14);
4139   auto param40 = model->addOperand(&type2);
4140   auto param41 = model->addOperand(&type2);
4141   auto param42 = model->addOperand(&type13);
4142   auto param43 = model->addOperand(&type13);
4143   auto param44 = model->addOperand(&type2);
4144   auto param45 = model->addOperand(&type2);
4145   auto layout = model->addOperand(&type0);
4146   auto featureMap = model->addOperand(&type15);
4147   auto param46 = model->addOperand(&type2);
4148   auto param47 = model->addOperand(&type2);
4149   auto param48 = model->addOperand(&type2);
4150   auto param49 = model->addOperand(&type2);
4151   auto param50 = model->addOperand(&type2);
4152   auto param51 = model->addOperand(&type2);
4153   auto param52 = model->addOperand(&type2);
4154   auto param53 = model->addOperand(&type2);
4155   auto param54 = model->addOperand(&type2);
4156   auto out = model->addOperand(&type22);
4157   // Phase 2, operations
4158   static float scores_init[] = {0.9f, 0.1f};
4159   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
4160   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4161   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
4162   static int32_t param33_init[] = {0};
4163   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
4164   static float param34_init[] = {0.3f};
4165   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
4166   static int32_t param35_init[] = {-1};
4167   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
4168   static int32_t param36_init[] = {0};
4169   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4170   static float param37_init[] = {0.4f};
4171   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
4172   static float param38_init[] = {1.0f};
4173   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
4174   static float param39_init[] = {0.3f};
4175   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
4176   static int32_t param40_init[] = {2};
4177   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4178   static int32_t param41_init[] = {2};
4179   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4180   static float param42_init[] = {2.0f};
4181   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
4182   static float param43_init[] = {2.0f};
4183   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4184   static int32_t param44_init[] = {4};
4185   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4186   static int32_t param45_init[] = {4};
4187   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4188   static bool8 layout_init[] = {false};
4189   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4190   static int32_t param46_init[] = {0};
4191   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
4192   static int32_t param47_init[] = {0};
4193   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
4194   static int32_t param48_init[] = {0};
4195   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
4196   static int32_t param49_init[] = {0};
4197   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4198   static int32_t param50_init[] = {1};
4199   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4200   static int32_t param51_init[] = {1};
4201   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
4202   static int32_t param52_init[] = {2};
4203   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
4204   static int32_t param53_init[] = {2};
4205   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4206   static int32_t param54_init[] = {0};
4207   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4208   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
4209   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
4210   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
4211   // Phase 3, inputs and outputs
4212   model->identifyInputsAndOutputs(
4213     {in},
4214     {scoresOut, classesOut, out});
4215   assert(model->isValid());
4216 }
4217 
is_ignored_zero_sized_dynamic_output_shape_nhwc(int i)4218 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc(int i) {
4219   static std::set<int> ignore = {};
4220   return ignore.find(i) != ignore.end();
4221 }
4222 
CreateModel_zero_sized_dynamic_output_shape_nhwc_relaxed(Model * model)4223 void CreateModel_zero_sized_dynamic_output_shape_nhwc_relaxed(Model *model) {
4224   OperandType type0(Type::BOOL, {});
4225   OperandType type10(Type::TENSOR_INT32, {0});
4226   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
4227   OperandType type12(Type::TENSOR_INT32, {1});
4228   OperandType type13(Type::FLOAT32, {});
4229   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
4230   OperandType type15(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
4231   OperandType type2(Type::INT32, {});
4232   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
4233   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
4234   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
4235   OperandType type9(Type::TENSOR_FLOAT32, {0});
4236   // Phase 1, operands
4237   auto scores = model->addOperand(&type7);
4238   auto roi = model->addOperand(&type8);
4239   auto param33 = model->addOperand(&type12);
4240   auto param34 = model->addOperand(&type13);
4241   auto param35 = model->addOperand(&type2);
4242   auto param36 = model->addOperand(&type2);
4243   auto param37 = model->addOperand(&type13);
4244   auto param38 = model->addOperand(&type13);
4245   auto param39 = model->addOperand(&type13);
4246   auto scoresOut = model->addOperand(&type9);
4247   auto roiOut = model->addOperand(&type11);
4248   auto classesOut = model->addOperand(&type10);
4249   auto batchSplitOut = model->addOperand(&type10);
4250   auto in = model->addOperand(&type14);
4251   auto param40 = model->addOperand(&type2);
4252   auto param41 = model->addOperand(&type2);
4253   auto param42 = model->addOperand(&type13);
4254   auto param43 = model->addOperand(&type13);
4255   auto param44 = model->addOperand(&type2);
4256   auto param45 = model->addOperand(&type2);
4257   auto layout = model->addOperand(&type0);
4258   auto featureMap = model->addOperand(&type15);
4259   auto param46 = model->addOperand(&type2);
4260   auto param47 = model->addOperand(&type2);
4261   auto param48 = model->addOperand(&type2);
4262   auto param49 = model->addOperand(&type2);
4263   auto param50 = model->addOperand(&type2);
4264   auto param51 = model->addOperand(&type2);
4265   auto param52 = model->addOperand(&type2);
4266   auto param53 = model->addOperand(&type2);
4267   auto param54 = model->addOperand(&type2);
4268   auto out = model->addOperand(&type22);
4269   // Phase 2, operations
4270   static float scores_init[] = {0.9f, 0.1f};
4271   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
4272   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4273   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
4274   static int32_t param33_init[] = {0};
4275   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
4276   static float param34_init[] = {0.3f};
4277   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
4278   static int32_t param35_init[] = {-1};
4279   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
4280   static int32_t param36_init[] = {0};
4281   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4282   static float param37_init[] = {0.4f};
4283   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
4284   static float param38_init[] = {1.0f};
4285   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
4286   static float param39_init[] = {0.3f};
4287   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
4288   static int32_t param40_init[] = {2};
4289   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4290   static int32_t param41_init[] = {2};
4291   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4292   static float param42_init[] = {2.0f};
4293   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
4294   static float param43_init[] = {2.0f};
4295   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4296   static int32_t param44_init[] = {4};
4297   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4298   static int32_t param45_init[] = {4};
4299   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4300   static bool8 layout_init[] = {false};
4301   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4302   static int32_t param46_init[] = {0};
4303   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
4304   static int32_t param47_init[] = {0};
4305   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
4306   static int32_t param48_init[] = {0};
4307   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
4308   static int32_t param49_init[] = {0};
4309   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4310   static int32_t param50_init[] = {1};
4311   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4312   static int32_t param51_init[] = {1};
4313   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
4314   static int32_t param52_init[] = {2};
4315   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
4316   static int32_t param53_init[] = {2};
4317   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4318   static int32_t param54_init[] = {0};
4319   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4320   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
4321   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
4322   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
4323   // Phase 3, inputs and outputs
4324   model->identifyInputsAndOutputs(
4325     {in},
4326     {scoresOut, classesOut, out});
4327   // Phase 4: set relaxed execution
4328   model->relaxComputationFloat32toFloat16(true);
4329   assert(model->isValid());
4330 }
4331 
is_ignored_zero_sized_dynamic_output_shape_nhwc_relaxed(int i)4332 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_relaxed(int i) {
4333   static std::set<int> ignore = {};
4334   return ignore.find(i) != ignore.end();
4335 }
4336 
CreateModel_zero_sized_dynamic_output_shape_nhwc_quant8(Model * model)4337 void CreateModel_zero_sized_dynamic_output_shape_nhwc_quant8(Model *model) {
4338   OperandType type0(Type::BOOL, {});
4339   OperandType type10(Type::TENSOR_INT32, {0});
4340   OperandType type12(Type::TENSOR_INT32, {1});
4341   OperandType type13(Type::FLOAT32, {});
4342   OperandType type2(Type::INT32, {});
4343   OperandType type50(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 1}, 0.1f, 128);
4344   OperandType type51(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
4345   OperandType type53(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
4346   OperandType type54(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
4347   OperandType type55(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
4348   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
4349   OperandType type68(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128);
4350   // Phase 1, operands
4351   auto scores = model->addOperand(&type55);
4352   auto roi = model->addOperand(&type53);
4353   auto param33 = model->addOperand(&type12);
4354   auto param34 = model->addOperand(&type13);
4355   auto param35 = model->addOperand(&type2);
4356   auto param36 = model->addOperand(&type2);
4357   auto param37 = model->addOperand(&type13);
4358   auto param38 = model->addOperand(&type13);
4359   auto param39 = model->addOperand(&type13);
4360   auto scoresOut = model->addOperand(&type56);
4361   auto roiOut = model->addOperand(&type54);
4362   auto classesOut = model->addOperand(&type10);
4363   auto batchSplitOut = model->addOperand(&type10);
4364   auto in = model->addOperand(&type51);
4365   auto param40 = model->addOperand(&type2);
4366   auto param41 = model->addOperand(&type2);
4367   auto param42 = model->addOperand(&type13);
4368   auto param43 = model->addOperand(&type13);
4369   auto param44 = model->addOperand(&type2);
4370   auto param45 = model->addOperand(&type2);
4371   auto layout = model->addOperand(&type0);
4372   auto featureMap = model->addOperand(&type50);
4373   auto param46 = model->addOperand(&type2);
4374   auto param47 = model->addOperand(&type2);
4375   auto param48 = model->addOperand(&type2);
4376   auto param49 = model->addOperand(&type2);
4377   auto param50 = model->addOperand(&type2);
4378   auto param51 = model->addOperand(&type2);
4379   auto param52 = model->addOperand(&type2);
4380   auto param53 = model->addOperand(&type2);
4381   auto param54 = model->addOperand(&type2);
4382   auto out = model->addOperand(&type68);
4383   // Phase 2, operations
4384   static uint8_t scores_init[] = {137, 129};
4385   model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2);
4386   static uint16_t roi_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
4387   model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8);
4388   static int32_t param33_init[] = {0};
4389   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
4390   static float param34_init[] = {0.3f};
4391   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
4392   static int32_t param35_init[] = {-1};
4393   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
4394   static int32_t param36_init[] = {0};
4395   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4396   static float param37_init[] = {0.4f};
4397   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
4398   static float param38_init[] = {1.0f};
4399   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
4400   static float param39_init[] = {0.3f};
4401   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
4402   static int32_t param40_init[] = {2};
4403   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4404   static int32_t param41_init[] = {2};
4405   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4406   static float param42_init[] = {2.0f};
4407   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
4408   static float param43_init[] = {2.0f};
4409   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4410   static int32_t param44_init[] = {4};
4411   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4412   static int32_t param45_init[] = {4};
4413   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4414   static bool8 layout_init[] = {false};
4415   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4416   static int32_t param46_init[] = {0};
4417   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
4418   static int32_t param47_init[] = {0};
4419   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
4420   static int32_t param48_init[] = {0};
4421   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
4422   static int32_t param49_init[] = {0};
4423   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4424   static int32_t param50_init[] = {1};
4425   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4426   static int32_t param51_init[] = {1};
4427   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
4428   static int32_t param52_init[] = {2};
4429   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
4430   static int32_t param53_init[] = {2};
4431   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4432   static int32_t param54_init[] = {0};
4433   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4434   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
4435   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
4436   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
4437   // Phase 3, inputs and outputs
4438   model->identifyInputsAndOutputs(
4439     {in},
4440     {scoresOut, classesOut, out});
4441   assert(model->isValid());
4442 }
4443 
is_ignored_zero_sized_dynamic_output_shape_nhwc_quant8(int i)4444 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_quant8(int i) {
4445   static std::set<int> ignore = {};
4446   return ignore.find(i) != ignore.end();
4447 }
4448 
CreateModel_zero_sized_dynamic_output_shape_nhwc_float16(Model * model)4449 void CreateModel_zero_sized_dynamic_output_shape_nhwc_float16(Model *model) {
4450   OperandType type0(Type::BOOL, {});
4451   OperandType type10(Type::TENSOR_INT32, {0});
4452   OperandType type12(Type::TENSOR_INT32, {1});
4453   OperandType type2(Type::INT32, {});
4454   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
4455   OperandType type57(Type::TENSOR_FLOAT16, {0, 2, 2, 1});
4456   OperandType type58(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
4457   OperandType type60(Type::FLOAT16, {});
4458   OperandType type61(Type::TENSOR_FLOAT16, {1, 8});
4459   OperandType type62(Type::TENSOR_FLOAT16, {0, 4});
4460   OperandType type63(Type::TENSOR_FLOAT16, {1, 2});
4461   OperandType type69(Type::TENSOR_FLOAT16, {0});
4462   // Phase 1, operands
4463   auto scores = model->addOperand(&type63);
4464   auto roi = model->addOperand(&type61);
4465   auto param33 = model->addOperand(&type12);
4466   auto param34 = model->addOperand(&type60);
4467   auto param35 = model->addOperand(&type2);
4468   auto param36 = model->addOperand(&type2);
4469   auto param37 = model->addOperand(&type60);
4470   auto param38 = model->addOperand(&type60);
4471   auto param39 = model->addOperand(&type60);
4472   auto scoresOut = model->addOperand(&type69);
4473   auto roiOut = model->addOperand(&type62);
4474   auto classesOut = model->addOperand(&type10);
4475   auto batchSplitOut = model->addOperand(&type10);
4476   auto in = model->addOperand(&type58);
4477   auto param40 = model->addOperand(&type2);
4478   auto param41 = model->addOperand(&type2);
4479   auto param42 = model->addOperand(&type60);
4480   auto param43 = model->addOperand(&type60);
4481   auto param44 = model->addOperand(&type2);
4482   auto param45 = model->addOperand(&type2);
4483   auto layout = model->addOperand(&type0);
4484   auto featureMap = model->addOperand(&type57);
4485   auto param46 = model->addOperand(&type2);
4486   auto param47 = model->addOperand(&type2);
4487   auto param48 = model->addOperand(&type2);
4488   auto param49 = model->addOperand(&type2);
4489   auto param50 = model->addOperand(&type2);
4490   auto param51 = model->addOperand(&type2);
4491   auto param52 = model->addOperand(&type2);
4492   auto param53 = model->addOperand(&type2);
4493   auto param54 = model->addOperand(&type2);
4494   auto out = model->addOperand(&type24);
4495   // Phase 2, operations
4496   static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f};
4497   model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2);
4498   static _Float16 roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4499   model->setOperandValue(roi, roi_init, sizeof(_Float16) * 8);
4500   static int32_t param33_init[] = {0};
4501   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
4502   static _Float16 param34_init[] = {0.30000001192092896f};
4503   model->setOperandValue(param34, param34_init, sizeof(_Float16) * 1);
4504   static int32_t param35_init[] = {-1};
4505   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
4506   static int32_t param36_init[] = {0};
4507   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4508   static _Float16 param37_init[] = {0.4000000059604645f};
4509   model->setOperandValue(param37, param37_init, sizeof(_Float16) * 1);
4510   static _Float16 param38_init[] = {1.0f};
4511   model->setOperandValue(param38, param38_init, sizeof(_Float16) * 1);
4512   static _Float16 param39_init[] = {0.30000001192092896f};
4513   model->setOperandValue(param39, param39_init, sizeof(_Float16) * 1);
4514   static int32_t param40_init[] = {2};
4515   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4516   static int32_t param41_init[] = {2};
4517   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4518   static _Float16 param42_init[] = {2.0f};
4519   model->setOperandValue(param42, param42_init, sizeof(_Float16) * 1);
4520   static _Float16 param43_init[] = {2.0f};
4521   model->setOperandValue(param43, param43_init, sizeof(_Float16) * 1);
4522   static int32_t param44_init[] = {4};
4523   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4524   static int32_t param45_init[] = {4};
4525   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4526   static bool8 layout_init[] = {false};
4527   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4528   static int32_t param46_init[] = {0};
4529   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
4530   static int32_t param47_init[] = {0};
4531   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
4532   static int32_t param48_init[] = {0};
4533   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
4534   static int32_t param49_init[] = {0};
4535   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4536   static int32_t param50_init[] = {1};
4537   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4538   static int32_t param51_init[] = {1};
4539   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
4540   static int32_t param52_init[] = {2};
4541   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
4542   static int32_t param53_init[] = {2};
4543   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4544   static int32_t param54_init[] = {0};
4545   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4546   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
4547   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
4548   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
4549   // Phase 3, inputs and outputs
4550   model->identifyInputsAndOutputs(
4551     {in},
4552     {scoresOut, classesOut, out});
4553   assert(model->isValid());
4554 }
4555 
is_ignored_zero_sized_dynamic_output_shape_nhwc_float16(int i)4556 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_float16(int i) {
4557   static std::set<int> ignore = {};
4558   return ignore.find(i) != ignore.end();
4559 }
4560 
CreateModel_zero_sized_dynamic_output_shape_nchw(Model * model)4561 void CreateModel_zero_sized_dynamic_output_shape_nchw(Model *model) {
4562   OperandType type0(Type::BOOL, {});
4563   OperandType type10(Type::TENSOR_INT32, {0});
4564   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
4565   OperandType type12(Type::TENSOR_INT32, {1});
4566   OperandType type13(Type::FLOAT32, {});
4567   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
4568   OperandType type2(Type::INT32, {});
4569   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
4570   OperandType type65(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
4571   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
4572   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
4573   OperandType type9(Type::TENSOR_FLOAT32, {0});
4574   // Phase 1, operands
4575   auto scores = model->addOperand(&type7);
4576   auto roi = model->addOperand(&type8);
4577   auto param33 = model->addOperand(&type12);
4578   auto param34 = model->addOperand(&type13);
4579   auto param35 = model->addOperand(&type2);
4580   auto param36 = model->addOperand(&type2);
4581   auto param37 = model->addOperand(&type13);
4582   auto param38 = model->addOperand(&type13);
4583   auto param39 = model->addOperand(&type13);
4584   auto scoresOut = model->addOperand(&type9);
4585   auto roiOut = model->addOperand(&type11);
4586   auto classesOut = model->addOperand(&type10);
4587   auto batchSplitOut = model->addOperand(&type10);
4588   auto in = model->addOperand(&type14);
4589   auto param40 = model->addOperand(&type2);
4590   auto param41 = model->addOperand(&type2);
4591   auto param42 = model->addOperand(&type13);
4592   auto param43 = model->addOperand(&type13);
4593   auto param44 = model->addOperand(&type2);
4594   auto param45 = model->addOperand(&type2);
4595   auto layout = model->addOperand(&type0);
4596   auto featureMap = model->addOperand(&type65);
4597   auto param46 = model->addOperand(&type2);
4598   auto param47 = model->addOperand(&type2);
4599   auto param48 = model->addOperand(&type2);
4600   auto param49 = model->addOperand(&type2);
4601   auto param50 = model->addOperand(&type2);
4602   auto param51 = model->addOperand(&type2);
4603   auto param52 = model->addOperand(&type2);
4604   auto param53 = model->addOperand(&type2);
4605   auto param54 = model->addOperand(&type2);
4606   auto out = model->addOperand(&type22);
4607   // Phase 2, operations
4608   static float scores_init[] = {0.9f, 0.1f};
4609   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
4610   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4611   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
4612   static int32_t param33_init[] = {0};
4613   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
4614   static float param34_init[] = {0.3f};
4615   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
4616   static int32_t param35_init[] = {-1};
4617   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
4618   static int32_t param36_init[] = {0};
4619   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4620   static float param37_init[] = {0.4f};
4621   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
4622   static float param38_init[] = {1.0f};
4623   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
4624   static float param39_init[] = {0.3f};
4625   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
4626   static int32_t param40_init[] = {2};
4627   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4628   static int32_t param41_init[] = {2};
4629   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4630   static float param42_init[] = {2.0f};
4631   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
4632   static float param43_init[] = {2.0f};
4633   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4634   static int32_t param44_init[] = {4};
4635   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4636   static int32_t param45_init[] = {4};
4637   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4638   static bool8 layout_init[] = {true};
4639   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4640   static int32_t param46_init[] = {0};
4641   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
4642   static int32_t param47_init[] = {0};
4643   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
4644   static int32_t param48_init[] = {0};
4645   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
4646   static int32_t param49_init[] = {0};
4647   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4648   static int32_t param50_init[] = {1};
4649   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4650   static int32_t param51_init[] = {1};
4651   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
4652   static int32_t param52_init[] = {2};
4653   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
4654   static int32_t param53_init[] = {2};
4655   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4656   static int32_t param54_init[] = {0};
4657   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4658   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
4659   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
4660   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
4661   // Phase 3, inputs and outputs
4662   model->identifyInputsAndOutputs(
4663     {in},
4664     {scoresOut, classesOut, out});
4665   assert(model->isValid());
4666 }
4667 
is_ignored_zero_sized_dynamic_output_shape_nchw(int i)4668 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw(int i) {
4669   static std::set<int> ignore = {};
4670   return ignore.find(i) != ignore.end();
4671 }
4672 
CreateModel_zero_sized_dynamic_output_shape_nchw_relaxed(Model * model)4673 void CreateModel_zero_sized_dynamic_output_shape_nchw_relaxed(Model *model) {
4674   OperandType type0(Type::BOOL, {});
4675   OperandType type10(Type::TENSOR_INT32, {0});
4676   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
4677   OperandType type12(Type::TENSOR_INT32, {1});
4678   OperandType type13(Type::FLOAT32, {});
4679   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
4680   OperandType type2(Type::INT32, {});
4681   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
4682   OperandType type65(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
4683   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
4684   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
4685   OperandType type9(Type::TENSOR_FLOAT32, {0});
4686   // Phase 1, operands
4687   auto scores = model->addOperand(&type7);
4688   auto roi = model->addOperand(&type8);
4689   auto param33 = model->addOperand(&type12);
4690   auto param34 = model->addOperand(&type13);
4691   auto param35 = model->addOperand(&type2);
4692   auto param36 = model->addOperand(&type2);
4693   auto param37 = model->addOperand(&type13);
4694   auto param38 = model->addOperand(&type13);
4695   auto param39 = model->addOperand(&type13);
4696   auto scoresOut = model->addOperand(&type9);
4697   auto roiOut = model->addOperand(&type11);
4698   auto classesOut = model->addOperand(&type10);
4699   auto batchSplitOut = model->addOperand(&type10);
4700   auto in = model->addOperand(&type14);
4701   auto param40 = model->addOperand(&type2);
4702   auto param41 = model->addOperand(&type2);
4703   auto param42 = model->addOperand(&type13);
4704   auto param43 = model->addOperand(&type13);
4705   auto param44 = model->addOperand(&type2);
4706   auto param45 = model->addOperand(&type2);
4707   auto layout = model->addOperand(&type0);
4708   auto featureMap = model->addOperand(&type65);
4709   auto param46 = model->addOperand(&type2);
4710   auto param47 = model->addOperand(&type2);
4711   auto param48 = model->addOperand(&type2);
4712   auto param49 = model->addOperand(&type2);
4713   auto param50 = model->addOperand(&type2);
4714   auto param51 = model->addOperand(&type2);
4715   auto param52 = model->addOperand(&type2);
4716   auto param53 = model->addOperand(&type2);
4717   auto param54 = model->addOperand(&type2);
4718   auto out = model->addOperand(&type22);
4719   // Phase 2, operations
4720   static float scores_init[] = {0.9f, 0.1f};
4721   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
4722   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4723   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
4724   static int32_t param33_init[] = {0};
4725   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
4726   static float param34_init[] = {0.3f};
4727   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
4728   static int32_t param35_init[] = {-1};
4729   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
4730   static int32_t param36_init[] = {0};
4731   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4732   static float param37_init[] = {0.4f};
4733   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
4734   static float param38_init[] = {1.0f};
4735   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
4736   static float param39_init[] = {0.3f};
4737   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
4738   static int32_t param40_init[] = {2};
4739   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4740   static int32_t param41_init[] = {2};
4741   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4742   static float param42_init[] = {2.0f};
4743   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
4744   static float param43_init[] = {2.0f};
4745   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4746   static int32_t param44_init[] = {4};
4747   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4748   static int32_t param45_init[] = {4};
4749   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4750   static bool8 layout_init[] = {true};
4751   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4752   static int32_t param46_init[] = {0};
4753   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
4754   static int32_t param47_init[] = {0};
4755   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
4756   static int32_t param48_init[] = {0};
4757   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
4758   static int32_t param49_init[] = {0};
4759   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4760   static int32_t param50_init[] = {1};
4761   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4762   static int32_t param51_init[] = {1};
4763   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
4764   static int32_t param52_init[] = {2};
4765   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
4766   static int32_t param53_init[] = {2};
4767   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4768   static int32_t param54_init[] = {0};
4769   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4770   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
4771   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
4772   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
4773   // Phase 3, inputs and outputs
4774   model->identifyInputsAndOutputs(
4775     {in},
4776     {scoresOut, classesOut, out});
4777   // Phase 4: set relaxed execution
4778   model->relaxComputationFloat32toFloat16(true);
4779   assert(model->isValid());
4780 }
4781 
is_ignored_zero_sized_dynamic_output_shape_nchw_relaxed(int i)4782 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_relaxed(int i) {
4783   static std::set<int> ignore = {};
4784   return ignore.find(i) != ignore.end();
4785 }
4786 
CreateModel_zero_sized_dynamic_output_shape_nchw_quant8(Model * model)4787 void CreateModel_zero_sized_dynamic_output_shape_nchw_quant8(Model *model) {
4788   OperandType type0(Type::BOOL, {});
4789   OperandType type10(Type::TENSOR_INT32, {0});
4790   OperandType type12(Type::TENSOR_INT32, {1});
4791   OperandType type13(Type::FLOAT32, {});
4792   OperandType type2(Type::INT32, {});
4793   OperandType type51(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
4794   OperandType type53(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
4795   OperandType type54(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
4796   OperandType type55(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
4797   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
4798   OperandType type66(Type::TENSOR_QUANT8_ASYMM, {0, 1, 2, 2}, 0.1f, 128);
4799   OperandType type68(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128);
4800   // Phase 1, operands
4801   auto scores = model->addOperand(&type55);
4802   auto roi = model->addOperand(&type53);
4803   auto param33 = model->addOperand(&type12);
4804   auto param34 = model->addOperand(&type13);
4805   auto param35 = model->addOperand(&type2);
4806   auto param36 = model->addOperand(&type2);
4807   auto param37 = model->addOperand(&type13);
4808   auto param38 = model->addOperand(&type13);
4809   auto param39 = model->addOperand(&type13);
4810   auto scoresOut = model->addOperand(&type56);
4811   auto roiOut = model->addOperand(&type54);
4812   auto classesOut = model->addOperand(&type10);
4813   auto batchSplitOut = model->addOperand(&type10);
4814   auto in = model->addOperand(&type51);
4815   auto param40 = model->addOperand(&type2);
4816   auto param41 = model->addOperand(&type2);
4817   auto param42 = model->addOperand(&type13);
4818   auto param43 = model->addOperand(&type13);
4819   auto param44 = model->addOperand(&type2);
4820   auto param45 = model->addOperand(&type2);
4821   auto layout = model->addOperand(&type0);
4822   auto featureMap = model->addOperand(&type66);
4823   auto param46 = model->addOperand(&type2);
4824   auto param47 = model->addOperand(&type2);
4825   auto param48 = model->addOperand(&type2);
4826   auto param49 = model->addOperand(&type2);
4827   auto param50 = model->addOperand(&type2);
4828   auto param51 = model->addOperand(&type2);
4829   auto param52 = model->addOperand(&type2);
4830   auto param53 = model->addOperand(&type2);
4831   auto param54 = model->addOperand(&type2);
4832   auto out = model->addOperand(&type68);
4833   // Phase 2, operations
4834   static uint8_t scores_init[] = {137, 129};
4835   model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2);
4836   static uint16_t roi_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
4837   model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8);
4838   static int32_t param33_init[] = {0};
4839   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
4840   static float param34_init[] = {0.3f};
4841   model->setOperandValue(param34, param34_init, sizeof(float) * 1);
4842   static int32_t param35_init[] = {-1};
4843   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
4844   static int32_t param36_init[] = {0};
4845   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4846   static float param37_init[] = {0.4f};
4847   model->setOperandValue(param37, param37_init, sizeof(float) * 1);
4848   static float param38_init[] = {1.0f};
4849   model->setOperandValue(param38, param38_init, sizeof(float) * 1);
4850   static float param39_init[] = {0.3f};
4851   model->setOperandValue(param39, param39_init, sizeof(float) * 1);
4852   static int32_t param40_init[] = {2};
4853   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4854   static int32_t param41_init[] = {2};
4855   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4856   static float param42_init[] = {2.0f};
4857   model->setOperandValue(param42, param42_init, sizeof(float) * 1);
4858   static float param43_init[] = {2.0f};
4859   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4860   static int32_t param44_init[] = {4};
4861   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4862   static int32_t param45_init[] = {4};
4863   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4864   static bool8 layout_init[] = {true};
4865   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4866   static int32_t param46_init[] = {0};
4867   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
4868   static int32_t param47_init[] = {0};
4869   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
4870   static int32_t param48_init[] = {0};
4871   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
4872   static int32_t param49_init[] = {0};
4873   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4874   static int32_t param50_init[] = {1};
4875   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4876   static int32_t param51_init[] = {1};
4877   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
4878   static int32_t param52_init[] = {2};
4879   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
4880   static int32_t param53_init[] = {2};
4881   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4882   static int32_t param54_init[] = {0};
4883   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4884   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
4885   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
4886   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
4887   // Phase 3, inputs and outputs
4888   model->identifyInputsAndOutputs(
4889     {in},
4890     {scoresOut, classesOut, out});
4891   assert(model->isValid());
4892 }
4893 
is_ignored_zero_sized_dynamic_output_shape_nchw_quant8(int i)4894 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_quant8(int i) {
4895   static std::set<int> ignore = {};
4896   return ignore.find(i) != ignore.end();
4897 }
4898 
CreateModel_zero_sized_dynamic_output_shape_nchw_float16(Model * model)4899 void CreateModel_zero_sized_dynamic_output_shape_nchw_float16(Model *model) {
4900   OperandType type0(Type::BOOL, {});
4901   OperandType type10(Type::TENSOR_INT32, {0});
4902   OperandType type12(Type::TENSOR_INT32, {1});
4903   OperandType type2(Type::INT32, {});
4904   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
4905   OperandType type58(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
4906   OperandType type60(Type::FLOAT16, {});
4907   OperandType type61(Type::TENSOR_FLOAT16, {1, 8});
4908   OperandType type62(Type::TENSOR_FLOAT16, {0, 4});
4909   OperandType type63(Type::TENSOR_FLOAT16, {1, 2});
4910   OperandType type67(Type::TENSOR_FLOAT16, {0, 1, 2, 2});
4911   OperandType type69(Type::TENSOR_FLOAT16, {0});
4912   // Phase 1, operands
4913   auto scores = model->addOperand(&type63);
4914   auto roi = model->addOperand(&type61);
4915   auto param33 = model->addOperand(&type12);
4916   auto param34 = model->addOperand(&type60);
4917   auto param35 = model->addOperand(&type2);
4918   auto param36 = model->addOperand(&type2);
4919   auto param37 = model->addOperand(&type60);
4920   auto param38 = model->addOperand(&type60);
4921   auto param39 = model->addOperand(&type60);
4922   auto scoresOut = model->addOperand(&type69);
4923   auto roiOut = model->addOperand(&type62);
4924   auto classesOut = model->addOperand(&type10);
4925   auto batchSplitOut = model->addOperand(&type10);
4926   auto in = model->addOperand(&type58);
4927   auto param40 = model->addOperand(&type2);
4928   auto param41 = model->addOperand(&type2);
4929   auto param42 = model->addOperand(&type60);
4930   auto param43 = model->addOperand(&type60);
4931   auto param44 = model->addOperand(&type2);
4932   auto param45 = model->addOperand(&type2);
4933   auto layout = model->addOperand(&type0);
4934   auto featureMap = model->addOperand(&type67);
4935   auto param46 = model->addOperand(&type2);
4936   auto param47 = model->addOperand(&type2);
4937   auto param48 = model->addOperand(&type2);
4938   auto param49 = model->addOperand(&type2);
4939   auto param50 = model->addOperand(&type2);
4940   auto param51 = model->addOperand(&type2);
4941   auto param52 = model->addOperand(&type2);
4942   auto param53 = model->addOperand(&type2);
4943   auto param54 = model->addOperand(&type2);
4944   auto out = model->addOperand(&type24);
4945   // Phase 2, operations
4946   static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f};
4947   model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2);
4948   static _Float16 roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4949   model->setOperandValue(roi, roi_init, sizeof(_Float16) * 8);
4950   static int32_t param33_init[] = {0};
4951   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
4952   static _Float16 param34_init[] = {0.30000001192092896f};
4953   model->setOperandValue(param34, param34_init, sizeof(_Float16) * 1);
4954   static int32_t param35_init[] = {-1};
4955   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
4956   static int32_t param36_init[] = {0};
4957   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4958   static _Float16 param37_init[] = {0.4000000059604645f};
4959   model->setOperandValue(param37, param37_init, sizeof(_Float16) * 1);
4960   static _Float16 param38_init[] = {1.0f};
4961   model->setOperandValue(param38, param38_init, sizeof(_Float16) * 1);
4962   static _Float16 param39_init[] = {0.30000001192092896f};
4963   model->setOperandValue(param39, param39_init, sizeof(_Float16) * 1);
4964   static int32_t param40_init[] = {2};
4965   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4966   static int32_t param41_init[] = {2};
4967   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4968   static _Float16 param42_init[] = {2.0f};
4969   model->setOperandValue(param42, param42_init, sizeof(_Float16) * 1);
4970   static _Float16 param43_init[] = {2.0f};
4971   model->setOperandValue(param43, param43_init, sizeof(_Float16) * 1);
4972   static int32_t param44_init[] = {4};
4973   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4974   static int32_t param45_init[] = {4};
4975   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4976   static bool8 layout_init[] = {true};
4977   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4978   static int32_t param46_init[] = {0};
4979   model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1);
4980   static int32_t param47_init[] = {0};
4981   model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1);
4982   static int32_t param48_init[] = {0};
4983   model->setOperandValue(param48, param48_init, sizeof(int32_t) * 1);
4984   static int32_t param49_init[] = {0};
4985   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4986   static int32_t param50_init[] = {1};
4987   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4988   static int32_t param51_init[] = {1};
4989   model->setOperandValue(param51, param51_init, sizeof(int32_t) * 1);
4990   static int32_t param52_init[] = {2};
4991   model->setOperandValue(param52, param52_init, sizeof(int32_t) * 1);
4992   static int32_t param53_init[] = {2};
4993   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4994   static int32_t param54_init[] = {0};
4995   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4996   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param33, param34, param35, param36, param37, param38, param39}, {scoresOut, roiOut, classesOut, batchSplitOut});
4997   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param40, param41, param42, param43, param44, param45, layout}, {featureMap});
4998   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap, param46, param47, param48, param49, param50, param51, param52, param53, param54, layout}, {out});
4999   // Phase 3, inputs and outputs
5000   model->identifyInputsAndOutputs(
5001     {in},
5002     {scoresOut, classesOut, out});
5003   assert(model->isValid());
5004 }
5005 
is_ignored_zero_sized_dynamic_output_shape_nchw_float16(int i)5006 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_float16(int i) {
5007   static std::set<int> ignore = {};
5008   return ignore.find(i) != ignore.end();
5009 }
5010 
CreateModel_zero_sized_nhwc_2(Model * model)5011 void CreateModel_zero_sized_nhwc_2(Model *model) {
5012   OperandType type0(Type::BOOL, {});
5013   OperandType type10(Type::TENSOR_INT32, {0});
5014   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
5015   OperandType type12(Type::TENSOR_INT32, {1});
5016   OperandType type13(Type::FLOAT32, {});
5017   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5018   OperandType type15(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
5019   OperandType type2(Type::INT32, {});
5020   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
5021   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
5022   OperandType type9(Type::TENSOR_FLOAT32, {0});
5023   // Phase 1, operands
5024   auto scores1 = model->addOperand(&type7);
5025   auto roi1 = model->addOperand(&type8);
5026   auto param55 = model->addOperand(&type12);
5027   auto param56 = model->addOperand(&type13);
5028   auto param57 = model->addOperand(&type2);
5029   auto param58 = model->addOperand(&type2);
5030   auto param59 = model->addOperand(&type13);
5031   auto param60 = model->addOperand(&type13);
5032   auto param61 = model->addOperand(&type13);
5033   auto scoresOut1 = model->addOperand(&type9);
5034   auto roiOut1 = model->addOperand(&type11);
5035   auto classesOut1 = model->addOperand(&type10);
5036   auto batchSplitOut1 = model->addOperand(&type10);
5037   auto in1 = model->addOperand(&type14);
5038   auto param62 = model->addOperand(&type2);
5039   auto param63 = model->addOperand(&type2);
5040   auto param64 = model->addOperand(&type13);
5041   auto param65 = model->addOperand(&type13);
5042   auto param66 = model->addOperand(&type2);
5043   auto param67 = model->addOperand(&type2);
5044   auto layout = model->addOperand(&type0);
5045   auto featureMap1 = model->addOperand(&type15);
5046   auto param68 = model->addOperand(&type2);
5047   auto param69 = model->addOperand(&type2);
5048   auto param70 = model->addOperand(&type2);
5049   auto param71 = model->addOperand(&type2);
5050   auto param72 = model->addOperand(&type2);
5051   auto param73 = model->addOperand(&type2);
5052   auto out1 = model->addOperand(&type15);
5053   // Phase 2, operations
5054   static float scores1_init[] = {0.9f, 0.1f};
5055   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
5056   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5057   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
5058   static int32_t param55_init[] = {0};
5059   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5060   static float param56_init[] = {0.3f};
5061   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
5062   static int32_t param57_init[] = {-1};
5063   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5064   static int32_t param58_init[] = {0};
5065   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5066   static float param59_init[] = {0.4f};
5067   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
5068   static float param60_init[] = {1.0f};
5069   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
5070   static float param61_init[] = {0.3f};
5071   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
5072   static int32_t param62_init[] = {2};
5073   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5074   static int32_t param63_init[] = {2};
5075   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5076   static float param64_init[] = {2.0f};
5077   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
5078   static float param65_init[] = {2.0f};
5079   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
5080   static int32_t param66_init[] = {4};
5081   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5082   static int32_t param67_init[] = {4};
5083   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5084   static bool8 layout_init[] = {false};
5085   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5086   static int32_t param68_init[] = {1};
5087   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
5088   static int32_t param69_init[] = {1};
5089   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
5090   static int32_t param70_init[] = {1};
5091   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
5092   static int32_t param71_init[] = {2};
5093   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5094   static int32_t param72_init[] = {2};
5095   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5096   static int32_t param73_init[] = {0};
5097   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
5098   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5099   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
5100   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
5101   // Phase 3, inputs and outputs
5102   model->identifyInputsAndOutputs(
5103     {in1},
5104     {scoresOut1, classesOut1, out1});
5105   assert(model->isValid());
5106 }
5107 
is_ignored_zero_sized_nhwc_2(int i)5108 inline bool is_ignored_zero_sized_nhwc_2(int i) {
5109   static std::set<int> ignore = {};
5110   return ignore.find(i) != ignore.end();
5111 }
5112 
CreateModel_zero_sized_nhwc_relaxed_2(Model * model)5113 void CreateModel_zero_sized_nhwc_relaxed_2(Model *model) {
5114   OperandType type0(Type::BOOL, {});
5115   OperandType type10(Type::TENSOR_INT32, {0});
5116   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
5117   OperandType type12(Type::TENSOR_INT32, {1});
5118   OperandType type13(Type::FLOAT32, {});
5119   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5120   OperandType type15(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
5121   OperandType type2(Type::INT32, {});
5122   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
5123   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
5124   OperandType type9(Type::TENSOR_FLOAT32, {0});
5125   // Phase 1, operands
5126   auto scores1 = model->addOperand(&type7);
5127   auto roi1 = model->addOperand(&type8);
5128   auto param55 = model->addOperand(&type12);
5129   auto param56 = model->addOperand(&type13);
5130   auto param57 = model->addOperand(&type2);
5131   auto param58 = model->addOperand(&type2);
5132   auto param59 = model->addOperand(&type13);
5133   auto param60 = model->addOperand(&type13);
5134   auto param61 = model->addOperand(&type13);
5135   auto scoresOut1 = model->addOperand(&type9);
5136   auto roiOut1 = model->addOperand(&type11);
5137   auto classesOut1 = model->addOperand(&type10);
5138   auto batchSplitOut1 = model->addOperand(&type10);
5139   auto in1 = model->addOperand(&type14);
5140   auto param62 = model->addOperand(&type2);
5141   auto param63 = model->addOperand(&type2);
5142   auto param64 = model->addOperand(&type13);
5143   auto param65 = model->addOperand(&type13);
5144   auto param66 = model->addOperand(&type2);
5145   auto param67 = model->addOperand(&type2);
5146   auto layout = model->addOperand(&type0);
5147   auto featureMap1 = model->addOperand(&type15);
5148   auto param68 = model->addOperand(&type2);
5149   auto param69 = model->addOperand(&type2);
5150   auto param70 = model->addOperand(&type2);
5151   auto param71 = model->addOperand(&type2);
5152   auto param72 = model->addOperand(&type2);
5153   auto param73 = model->addOperand(&type2);
5154   auto out1 = model->addOperand(&type15);
5155   // Phase 2, operations
5156   static float scores1_init[] = {0.9f, 0.1f};
5157   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
5158   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5159   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
5160   static int32_t param55_init[] = {0};
5161   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5162   static float param56_init[] = {0.3f};
5163   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
5164   static int32_t param57_init[] = {-1};
5165   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5166   static int32_t param58_init[] = {0};
5167   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5168   static float param59_init[] = {0.4f};
5169   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
5170   static float param60_init[] = {1.0f};
5171   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
5172   static float param61_init[] = {0.3f};
5173   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
5174   static int32_t param62_init[] = {2};
5175   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5176   static int32_t param63_init[] = {2};
5177   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5178   static float param64_init[] = {2.0f};
5179   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
5180   static float param65_init[] = {2.0f};
5181   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
5182   static int32_t param66_init[] = {4};
5183   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5184   static int32_t param67_init[] = {4};
5185   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5186   static bool8 layout_init[] = {false};
5187   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5188   static int32_t param68_init[] = {1};
5189   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
5190   static int32_t param69_init[] = {1};
5191   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
5192   static int32_t param70_init[] = {1};
5193   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
5194   static int32_t param71_init[] = {2};
5195   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5196   static int32_t param72_init[] = {2};
5197   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5198   static int32_t param73_init[] = {0};
5199   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
5200   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5201   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
5202   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
5203   // Phase 3, inputs and outputs
5204   model->identifyInputsAndOutputs(
5205     {in1},
5206     {scoresOut1, classesOut1, out1});
5207   // Phase 4: set relaxed execution
5208   model->relaxComputationFloat32toFloat16(true);
5209   assert(model->isValid());
5210 }
5211 
is_ignored_zero_sized_nhwc_relaxed_2(int i)5212 inline bool is_ignored_zero_sized_nhwc_relaxed_2(int i) {
5213   static std::set<int> ignore = {};
5214   return ignore.find(i) != ignore.end();
5215 }
5216 
CreateModel_zero_sized_nhwc_quant8_2(Model * model)5217 void CreateModel_zero_sized_nhwc_quant8_2(Model *model) {
5218   OperandType type0(Type::BOOL, {});
5219   OperandType type10(Type::TENSOR_INT32, {0});
5220   OperandType type12(Type::TENSOR_INT32, {1});
5221   OperandType type13(Type::FLOAT32, {});
5222   OperandType type2(Type::INT32, {});
5223   OperandType type50(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 1}, 0.1f, 128);
5224   OperandType type51(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
5225   OperandType type53(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
5226   OperandType type54(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
5227   OperandType type55(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
5228   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
5229   // Phase 1, operands
5230   auto scores1 = model->addOperand(&type55);
5231   auto roi1 = model->addOperand(&type53);
5232   auto param55 = model->addOperand(&type12);
5233   auto param56 = model->addOperand(&type13);
5234   auto param57 = model->addOperand(&type2);
5235   auto param58 = model->addOperand(&type2);
5236   auto param59 = model->addOperand(&type13);
5237   auto param60 = model->addOperand(&type13);
5238   auto param61 = model->addOperand(&type13);
5239   auto scoresOut1 = model->addOperand(&type56);
5240   auto roiOut1 = model->addOperand(&type54);
5241   auto classesOut1 = model->addOperand(&type10);
5242   auto batchSplitOut1 = model->addOperand(&type10);
5243   auto in1 = model->addOperand(&type51);
5244   auto param62 = model->addOperand(&type2);
5245   auto param63 = model->addOperand(&type2);
5246   auto param64 = model->addOperand(&type13);
5247   auto param65 = model->addOperand(&type13);
5248   auto param66 = model->addOperand(&type2);
5249   auto param67 = model->addOperand(&type2);
5250   auto layout = model->addOperand(&type0);
5251   auto featureMap1 = model->addOperand(&type50);
5252   auto param68 = model->addOperand(&type2);
5253   auto param69 = model->addOperand(&type2);
5254   auto param70 = model->addOperand(&type2);
5255   auto param71 = model->addOperand(&type2);
5256   auto param72 = model->addOperand(&type2);
5257   auto param73 = model->addOperand(&type2);
5258   auto out1 = model->addOperand(&type50);
5259   // Phase 2, operations
5260   static uint8_t scores1_init[] = {137, 129};
5261   model->setOperandValue(scores1, scores1_init, sizeof(uint8_t) * 2);
5262   static uint16_t roi1_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
5263   model->setOperandValue(roi1, roi1_init, sizeof(uint16_t) * 8);
5264   static int32_t param55_init[] = {0};
5265   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5266   static float param56_init[] = {0.3f};
5267   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
5268   static int32_t param57_init[] = {-1};
5269   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5270   static int32_t param58_init[] = {0};
5271   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5272   static float param59_init[] = {0.4f};
5273   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
5274   static float param60_init[] = {1.0f};
5275   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
5276   static float param61_init[] = {0.3f};
5277   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
5278   static int32_t param62_init[] = {2};
5279   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5280   static int32_t param63_init[] = {2};
5281   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5282   static float param64_init[] = {2.0f};
5283   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
5284   static float param65_init[] = {2.0f};
5285   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
5286   static int32_t param66_init[] = {4};
5287   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5288   static int32_t param67_init[] = {4};
5289   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5290   static bool8 layout_init[] = {false};
5291   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5292   static int32_t param68_init[] = {1};
5293   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
5294   static int32_t param69_init[] = {1};
5295   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
5296   static int32_t param70_init[] = {1};
5297   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
5298   static int32_t param71_init[] = {2};
5299   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5300   static int32_t param72_init[] = {2};
5301   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5302   static int32_t param73_init[] = {0};
5303   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
5304   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5305   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
5306   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
5307   // Phase 3, inputs and outputs
5308   model->identifyInputsAndOutputs(
5309     {in1},
5310     {scoresOut1, classesOut1, out1});
5311   assert(model->isValid());
5312 }
5313 
is_ignored_zero_sized_nhwc_quant8_2(int i)5314 inline bool is_ignored_zero_sized_nhwc_quant8_2(int i) {
5315   static std::set<int> ignore = {};
5316   return ignore.find(i) != ignore.end();
5317 }
5318 
CreateModel_zero_sized_nhwc_float16_2(Model * model)5319 void CreateModel_zero_sized_nhwc_float16_2(Model *model) {
5320   OperandType type0(Type::BOOL, {});
5321   OperandType type10(Type::TENSOR_INT32, {0});
5322   OperandType type12(Type::TENSOR_INT32, {1});
5323   OperandType type2(Type::INT32, {});
5324   OperandType type57(Type::TENSOR_FLOAT16, {0, 2, 2, 1});
5325   OperandType type58(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
5326   OperandType type60(Type::FLOAT16, {});
5327   OperandType type61(Type::TENSOR_FLOAT16, {1, 8});
5328   OperandType type62(Type::TENSOR_FLOAT16, {0, 4});
5329   OperandType type63(Type::TENSOR_FLOAT16, {1, 2});
5330   OperandType type64(Type::TENSOR_FLOAT16, {0});
5331   // Phase 1, operands
5332   auto scores1 = model->addOperand(&type63);
5333   auto roi1 = model->addOperand(&type61);
5334   auto param55 = model->addOperand(&type12);
5335   auto param56 = model->addOperand(&type60);
5336   auto param57 = model->addOperand(&type2);
5337   auto param58 = model->addOperand(&type2);
5338   auto param59 = model->addOperand(&type60);
5339   auto param60 = model->addOperand(&type60);
5340   auto param61 = model->addOperand(&type60);
5341   auto scoresOut1 = model->addOperand(&type64);
5342   auto roiOut1 = model->addOperand(&type62);
5343   auto classesOut1 = model->addOperand(&type10);
5344   auto batchSplitOut1 = model->addOperand(&type10);
5345   auto in1 = model->addOperand(&type58);
5346   auto param62 = model->addOperand(&type2);
5347   auto param63 = model->addOperand(&type2);
5348   auto param64 = model->addOperand(&type60);
5349   auto param65 = model->addOperand(&type60);
5350   auto param66 = model->addOperand(&type2);
5351   auto param67 = model->addOperand(&type2);
5352   auto layout = model->addOperand(&type0);
5353   auto featureMap1 = model->addOperand(&type57);
5354   auto param68 = model->addOperand(&type2);
5355   auto param69 = model->addOperand(&type2);
5356   auto param70 = model->addOperand(&type2);
5357   auto param71 = model->addOperand(&type2);
5358   auto param72 = model->addOperand(&type2);
5359   auto param73 = model->addOperand(&type2);
5360   auto out1 = model->addOperand(&type57);
5361   // Phase 2, operations
5362   static _Float16 scores1_init[] = {0.8999999761581421f, 0.10000000149011612f};
5363   model->setOperandValue(scores1, scores1_init, sizeof(_Float16) * 2);
5364   static _Float16 roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5365   model->setOperandValue(roi1, roi1_init, sizeof(_Float16) * 8);
5366   static int32_t param55_init[] = {0};
5367   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5368   static _Float16 param56_init[] = {0.30000001192092896f};
5369   model->setOperandValue(param56, param56_init, sizeof(_Float16) * 1);
5370   static int32_t param57_init[] = {-1};
5371   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5372   static int32_t param58_init[] = {0};
5373   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5374   static _Float16 param59_init[] = {0.4000000059604645f};
5375   model->setOperandValue(param59, param59_init, sizeof(_Float16) * 1);
5376   static _Float16 param60_init[] = {1.0f};
5377   model->setOperandValue(param60, param60_init, sizeof(_Float16) * 1);
5378   static _Float16 param61_init[] = {0.30000001192092896f};
5379   model->setOperandValue(param61, param61_init, sizeof(_Float16) * 1);
5380   static int32_t param62_init[] = {2};
5381   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5382   static int32_t param63_init[] = {2};
5383   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5384   static _Float16 param64_init[] = {2.0f};
5385   model->setOperandValue(param64, param64_init, sizeof(_Float16) * 1);
5386   static _Float16 param65_init[] = {2.0f};
5387   model->setOperandValue(param65, param65_init, sizeof(_Float16) * 1);
5388   static int32_t param66_init[] = {4};
5389   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5390   static int32_t param67_init[] = {4};
5391   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5392   static bool8 layout_init[] = {false};
5393   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5394   static int32_t param68_init[] = {1};
5395   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
5396   static int32_t param69_init[] = {1};
5397   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
5398   static int32_t param70_init[] = {1};
5399   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
5400   static int32_t param71_init[] = {2};
5401   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5402   static int32_t param72_init[] = {2};
5403   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5404   static int32_t param73_init[] = {0};
5405   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
5406   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5407   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
5408   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
5409   // Phase 3, inputs and outputs
5410   model->identifyInputsAndOutputs(
5411     {in1},
5412     {scoresOut1, classesOut1, out1});
5413   assert(model->isValid());
5414 }
5415 
is_ignored_zero_sized_nhwc_float16_2(int i)5416 inline bool is_ignored_zero_sized_nhwc_float16_2(int i) {
5417   static std::set<int> ignore = {};
5418   return ignore.find(i) != ignore.end();
5419 }
5420 
CreateModel_zero_sized_nchw_2(Model * model)5421 void CreateModel_zero_sized_nchw_2(Model *model) {
5422   OperandType type0(Type::BOOL, {});
5423   OperandType type10(Type::TENSOR_INT32, {0});
5424   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
5425   OperandType type12(Type::TENSOR_INT32, {1});
5426   OperandType type13(Type::FLOAT32, {});
5427   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5428   OperandType type2(Type::INT32, {});
5429   OperandType type65(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
5430   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
5431   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
5432   OperandType type9(Type::TENSOR_FLOAT32, {0});
5433   // Phase 1, operands
5434   auto scores1 = model->addOperand(&type7);
5435   auto roi1 = model->addOperand(&type8);
5436   auto param55 = model->addOperand(&type12);
5437   auto param56 = model->addOperand(&type13);
5438   auto param57 = model->addOperand(&type2);
5439   auto param58 = model->addOperand(&type2);
5440   auto param59 = model->addOperand(&type13);
5441   auto param60 = model->addOperand(&type13);
5442   auto param61 = model->addOperand(&type13);
5443   auto scoresOut1 = model->addOperand(&type9);
5444   auto roiOut1 = model->addOperand(&type11);
5445   auto classesOut1 = model->addOperand(&type10);
5446   auto batchSplitOut1 = model->addOperand(&type10);
5447   auto in1 = model->addOperand(&type14);
5448   auto param62 = model->addOperand(&type2);
5449   auto param63 = model->addOperand(&type2);
5450   auto param64 = model->addOperand(&type13);
5451   auto param65 = model->addOperand(&type13);
5452   auto param66 = model->addOperand(&type2);
5453   auto param67 = model->addOperand(&type2);
5454   auto layout = model->addOperand(&type0);
5455   auto featureMap1 = model->addOperand(&type65);
5456   auto param68 = model->addOperand(&type2);
5457   auto param69 = model->addOperand(&type2);
5458   auto param70 = model->addOperand(&type2);
5459   auto param71 = model->addOperand(&type2);
5460   auto param72 = model->addOperand(&type2);
5461   auto param73 = model->addOperand(&type2);
5462   auto out1 = model->addOperand(&type65);
5463   // Phase 2, operations
5464   static float scores1_init[] = {0.9f, 0.1f};
5465   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
5466   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5467   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
5468   static int32_t param55_init[] = {0};
5469   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5470   static float param56_init[] = {0.3f};
5471   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
5472   static int32_t param57_init[] = {-1};
5473   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5474   static int32_t param58_init[] = {0};
5475   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5476   static float param59_init[] = {0.4f};
5477   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
5478   static float param60_init[] = {1.0f};
5479   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
5480   static float param61_init[] = {0.3f};
5481   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
5482   static int32_t param62_init[] = {2};
5483   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5484   static int32_t param63_init[] = {2};
5485   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5486   static float param64_init[] = {2.0f};
5487   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
5488   static float param65_init[] = {2.0f};
5489   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
5490   static int32_t param66_init[] = {4};
5491   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5492   static int32_t param67_init[] = {4};
5493   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5494   static bool8 layout_init[] = {true};
5495   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5496   static int32_t param68_init[] = {1};
5497   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
5498   static int32_t param69_init[] = {1};
5499   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
5500   static int32_t param70_init[] = {1};
5501   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
5502   static int32_t param71_init[] = {2};
5503   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5504   static int32_t param72_init[] = {2};
5505   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5506   static int32_t param73_init[] = {0};
5507   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
5508   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5509   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
5510   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
5511   // Phase 3, inputs and outputs
5512   model->identifyInputsAndOutputs(
5513     {in1},
5514     {scoresOut1, classesOut1, out1});
5515   assert(model->isValid());
5516 }
5517 
is_ignored_zero_sized_nchw_2(int i)5518 inline bool is_ignored_zero_sized_nchw_2(int i) {
5519   static std::set<int> ignore = {};
5520   return ignore.find(i) != ignore.end();
5521 }
5522 
CreateModel_zero_sized_nchw_relaxed_2(Model * model)5523 void CreateModel_zero_sized_nchw_relaxed_2(Model *model) {
5524   OperandType type0(Type::BOOL, {});
5525   OperandType type10(Type::TENSOR_INT32, {0});
5526   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
5527   OperandType type12(Type::TENSOR_INT32, {1});
5528   OperandType type13(Type::FLOAT32, {});
5529   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5530   OperandType type2(Type::INT32, {});
5531   OperandType type65(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
5532   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
5533   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
5534   OperandType type9(Type::TENSOR_FLOAT32, {0});
5535   // Phase 1, operands
5536   auto scores1 = model->addOperand(&type7);
5537   auto roi1 = model->addOperand(&type8);
5538   auto param55 = model->addOperand(&type12);
5539   auto param56 = model->addOperand(&type13);
5540   auto param57 = model->addOperand(&type2);
5541   auto param58 = model->addOperand(&type2);
5542   auto param59 = model->addOperand(&type13);
5543   auto param60 = model->addOperand(&type13);
5544   auto param61 = model->addOperand(&type13);
5545   auto scoresOut1 = model->addOperand(&type9);
5546   auto roiOut1 = model->addOperand(&type11);
5547   auto classesOut1 = model->addOperand(&type10);
5548   auto batchSplitOut1 = model->addOperand(&type10);
5549   auto in1 = model->addOperand(&type14);
5550   auto param62 = model->addOperand(&type2);
5551   auto param63 = model->addOperand(&type2);
5552   auto param64 = model->addOperand(&type13);
5553   auto param65 = model->addOperand(&type13);
5554   auto param66 = model->addOperand(&type2);
5555   auto param67 = model->addOperand(&type2);
5556   auto layout = model->addOperand(&type0);
5557   auto featureMap1 = model->addOperand(&type65);
5558   auto param68 = model->addOperand(&type2);
5559   auto param69 = model->addOperand(&type2);
5560   auto param70 = model->addOperand(&type2);
5561   auto param71 = model->addOperand(&type2);
5562   auto param72 = model->addOperand(&type2);
5563   auto param73 = model->addOperand(&type2);
5564   auto out1 = model->addOperand(&type65);
5565   // Phase 2, operations
5566   static float scores1_init[] = {0.9f, 0.1f};
5567   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
5568   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5569   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
5570   static int32_t param55_init[] = {0};
5571   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5572   static float param56_init[] = {0.3f};
5573   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
5574   static int32_t param57_init[] = {-1};
5575   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5576   static int32_t param58_init[] = {0};
5577   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5578   static float param59_init[] = {0.4f};
5579   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
5580   static float param60_init[] = {1.0f};
5581   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
5582   static float param61_init[] = {0.3f};
5583   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
5584   static int32_t param62_init[] = {2};
5585   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5586   static int32_t param63_init[] = {2};
5587   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5588   static float param64_init[] = {2.0f};
5589   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
5590   static float param65_init[] = {2.0f};
5591   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
5592   static int32_t param66_init[] = {4};
5593   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5594   static int32_t param67_init[] = {4};
5595   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5596   static bool8 layout_init[] = {true};
5597   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5598   static int32_t param68_init[] = {1};
5599   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
5600   static int32_t param69_init[] = {1};
5601   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
5602   static int32_t param70_init[] = {1};
5603   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
5604   static int32_t param71_init[] = {2};
5605   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5606   static int32_t param72_init[] = {2};
5607   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5608   static int32_t param73_init[] = {0};
5609   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
5610   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5611   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
5612   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
5613   // Phase 3, inputs and outputs
5614   model->identifyInputsAndOutputs(
5615     {in1},
5616     {scoresOut1, classesOut1, out1});
5617   // Phase 4: set relaxed execution
5618   model->relaxComputationFloat32toFloat16(true);
5619   assert(model->isValid());
5620 }
5621 
is_ignored_zero_sized_nchw_relaxed_2(int i)5622 inline bool is_ignored_zero_sized_nchw_relaxed_2(int i) {
5623   static std::set<int> ignore = {};
5624   return ignore.find(i) != ignore.end();
5625 }
5626 
CreateModel_zero_sized_nchw_quant8_2(Model * model)5627 void CreateModel_zero_sized_nchw_quant8_2(Model *model) {
5628   OperandType type0(Type::BOOL, {});
5629   OperandType type10(Type::TENSOR_INT32, {0});
5630   OperandType type12(Type::TENSOR_INT32, {1});
5631   OperandType type13(Type::FLOAT32, {});
5632   OperandType type2(Type::INT32, {});
5633   OperandType type51(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
5634   OperandType type53(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
5635   OperandType type54(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
5636   OperandType type55(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
5637   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
5638   OperandType type66(Type::TENSOR_QUANT8_ASYMM, {0, 1, 2, 2}, 0.1f, 128);
5639   // Phase 1, operands
5640   auto scores1 = model->addOperand(&type55);
5641   auto roi1 = model->addOperand(&type53);
5642   auto param55 = model->addOperand(&type12);
5643   auto param56 = model->addOperand(&type13);
5644   auto param57 = model->addOperand(&type2);
5645   auto param58 = model->addOperand(&type2);
5646   auto param59 = model->addOperand(&type13);
5647   auto param60 = model->addOperand(&type13);
5648   auto param61 = model->addOperand(&type13);
5649   auto scoresOut1 = model->addOperand(&type56);
5650   auto roiOut1 = model->addOperand(&type54);
5651   auto classesOut1 = model->addOperand(&type10);
5652   auto batchSplitOut1 = model->addOperand(&type10);
5653   auto in1 = model->addOperand(&type51);
5654   auto param62 = model->addOperand(&type2);
5655   auto param63 = model->addOperand(&type2);
5656   auto param64 = model->addOperand(&type13);
5657   auto param65 = model->addOperand(&type13);
5658   auto param66 = model->addOperand(&type2);
5659   auto param67 = model->addOperand(&type2);
5660   auto layout = model->addOperand(&type0);
5661   auto featureMap1 = model->addOperand(&type66);
5662   auto param68 = model->addOperand(&type2);
5663   auto param69 = model->addOperand(&type2);
5664   auto param70 = model->addOperand(&type2);
5665   auto param71 = model->addOperand(&type2);
5666   auto param72 = model->addOperand(&type2);
5667   auto param73 = model->addOperand(&type2);
5668   auto out1 = model->addOperand(&type66);
5669   // Phase 2, operations
5670   static uint8_t scores1_init[] = {137, 129};
5671   model->setOperandValue(scores1, scores1_init, sizeof(uint8_t) * 2);
5672   static uint16_t roi1_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
5673   model->setOperandValue(roi1, roi1_init, sizeof(uint16_t) * 8);
5674   static int32_t param55_init[] = {0};
5675   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5676   static float param56_init[] = {0.3f};
5677   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
5678   static int32_t param57_init[] = {-1};
5679   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5680   static int32_t param58_init[] = {0};
5681   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5682   static float param59_init[] = {0.4f};
5683   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
5684   static float param60_init[] = {1.0f};
5685   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
5686   static float param61_init[] = {0.3f};
5687   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
5688   static int32_t param62_init[] = {2};
5689   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5690   static int32_t param63_init[] = {2};
5691   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5692   static float param64_init[] = {2.0f};
5693   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
5694   static float param65_init[] = {2.0f};
5695   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
5696   static int32_t param66_init[] = {4};
5697   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5698   static int32_t param67_init[] = {4};
5699   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5700   static bool8 layout_init[] = {true};
5701   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5702   static int32_t param68_init[] = {1};
5703   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
5704   static int32_t param69_init[] = {1};
5705   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
5706   static int32_t param70_init[] = {1};
5707   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
5708   static int32_t param71_init[] = {2};
5709   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5710   static int32_t param72_init[] = {2};
5711   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5712   static int32_t param73_init[] = {0};
5713   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
5714   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5715   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
5716   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
5717   // Phase 3, inputs and outputs
5718   model->identifyInputsAndOutputs(
5719     {in1},
5720     {scoresOut1, classesOut1, out1});
5721   assert(model->isValid());
5722 }
5723 
is_ignored_zero_sized_nchw_quant8_2(int i)5724 inline bool is_ignored_zero_sized_nchw_quant8_2(int i) {
5725   static std::set<int> ignore = {};
5726   return ignore.find(i) != ignore.end();
5727 }
5728 
CreateModel_zero_sized_nchw_float16_2(Model * model)5729 void CreateModel_zero_sized_nchw_float16_2(Model *model) {
5730   OperandType type0(Type::BOOL, {});
5731   OperandType type10(Type::TENSOR_INT32, {0});
5732   OperandType type12(Type::TENSOR_INT32, {1});
5733   OperandType type2(Type::INT32, {});
5734   OperandType type58(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
5735   OperandType type60(Type::FLOAT16, {});
5736   OperandType type61(Type::TENSOR_FLOAT16, {1, 8});
5737   OperandType type62(Type::TENSOR_FLOAT16, {0, 4});
5738   OperandType type63(Type::TENSOR_FLOAT16, {1, 2});
5739   OperandType type64(Type::TENSOR_FLOAT16, {0});
5740   OperandType type67(Type::TENSOR_FLOAT16, {0, 1, 2, 2});
5741   // Phase 1, operands
5742   auto scores1 = model->addOperand(&type63);
5743   auto roi1 = model->addOperand(&type61);
5744   auto param55 = model->addOperand(&type12);
5745   auto param56 = model->addOperand(&type60);
5746   auto param57 = model->addOperand(&type2);
5747   auto param58 = model->addOperand(&type2);
5748   auto param59 = model->addOperand(&type60);
5749   auto param60 = model->addOperand(&type60);
5750   auto param61 = model->addOperand(&type60);
5751   auto scoresOut1 = model->addOperand(&type64);
5752   auto roiOut1 = model->addOperand(&type62);
5753   auto classesOut1 = model->addOperand(&type10);
5754   auto batchSplitOut1 = model->addOperand(&type10);
5755   auto in1 = model->addOperand(&type58);
5756   auto param62 = model->addOperand(&type2);
5757   auto param63 = model->addOperand(&type2);
5758   auto param64 = model->addOperand(&type60);
5759   auto param65 = model->addOperand(&type60);
5760   auto param66 = model->addOperand(&type2);
5761   auto param67 = model->addOperand(&type2);
5762   auto layout = model->addOperand(&type0);
5763   auto featureMap1 = model->addOperand(&type67);
5764   auto param68 = model->addOperand(&type2);
5765   auto param69 = model->addOperand(&type2);
5766   auto param70 = model->addOperand(&type2);
5767   auto param71 = model->addOperand(&type2);
5768   auto param72 = model->addOperand(&type2);
5769   auto param73 = model->addOperand(&type2);
5770   auto out1 = model->addOperand(&type67);
5771   // Phase 2, operations
5772   static _Float16 scores1_init[] = {0.8999999761581421f, 0.10000000149011612f};
5773   model->setOperandValue(scores1, scores1_init, sizeof(_Float16) * 2);
5774   static _Float16 roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5775   model->setOperandValue(roi1, roi1_init, sizeof(_Float16) * 8);
5776   static int32_t param55_init[] = {0};
5777   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5778   static _Float16 param56_init[] = {0.30000001192092896f};
5779   model->setOperandValue(param56, param56_init, sizeof(_Float16) * 1);
5780   static int32_t param57_init[] = {-1};
5781   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5782   static int32_t param58_init[] = {0};
5783   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5784   static _Float16 param59_init[] = {0.4000000059604645f};
5785   model->setOperandValue(param59, param59_init, sizeof(_Float16) * 1);
5786   static _Float16 param60_init[] = {1.0f};
5787   model->setOperandValue(param60, param60_init, sizeof(_Float16) * 1);
5788   static _Float16 param61_init[] = {0.30000001192092896f};
5789   model->setOperandValue(param61, param61_init, sizeof(_Float16) * 1);
5790   static int32_t param62_init[] = {2};
5791   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5792   static int32_t param63_init[] = {2};
5793   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5794   static _Float16 param64_init[] = {2.0f};
5795   model->setOperandValue(param64, param64_init, sizeof(_Float16) * 1);
5796   static _Float16 param65_init[] = {2.0f};
5797   model->setOperandValue(param65, param65_init, sizeof(_Float16) * 1);
5798   static int32_t param66_init[] = {4};
5799   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5800   static int32_t param67_init[] = {4};
5801   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5802   static bool8 layout_init[] = {true};
5803   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5804   static int32_t param68_init[] = {1};
5805   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
5806   static int32_t param69_init[] = {1};
5807   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
5808   static int32_t param70_init[] = {1};
5809   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
5810   static int32_t param71_init[] = {2};
5811   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5812   static int32_t param72_init[] = {2};
5813   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5814   static int32_t param73_init[] = {0};
5815   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
5816   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5817   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
5818   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
5819   // Phase 3, inputs and outputs
5820   model->identifyInputsAndOutputs(
5821     {in1},
5822     {scoresOut1, classesOut1, out1});
5823   assert(model->isValid());
5824 }
5825 
is_ignored_zero_sized_nchw_float16_2(int i)5826 inline bool is_ignored_zero_sized_nchw_float16_2(int i) {
5827   static std::set<int> ignore = {};
5828   return ignore.find(i) != ignore.end();
5829 }
5830 
CreateModel_zero_sized_dynamic_output_shape_nhwc_2(Model * model)5831 void CreateModel_zero_sized_dynamic_output_shape_nhwc_2(Model *model) {
5832   OperandType type0(Type::BOOL, {});
5833   OperandType type10(Type::TENSOR_INT32, {0});
5834   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
5835   OperandType type12(Type::TENSOR_INT32, {1});
5836   OperandType type13(Type::FLOAT32, {});
5837   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5838   OperandType type15(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
5839   OperandType type2(Type::INT32, {});
5840   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
5841   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
5842   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
5843   OperandType type9(Type::TENSOR_FLOAT32, {0});
5844   // Phase 1, operands
5845   auto scores1 = model->addOperand(&type7);
5846   auto roi1 = model->addOperand(&type8);
5847   auto param55 = model->addOperand(&type12);
5848   auto param56 = model->addOperand(&type13);
5849   auto param57 = model->addOperand(&type2);
5850   auto param58 = model->addOperand(&type2);
5851   auto param59 = model->addOperand(&type13);
5852   auto param60 = model->addOperand(&type13);
5853   auto param61 = model->addOperand(&type13);
5854   auto scoresOut1 = model->addOperand(&type9);
5855   auto roiOut1 = model->addOperand(&type11);
5856   auto classesOut1 = model->addOperand(&type10);
5857   auto batchSplitOut1 = model->addOperand(&type10);
5858   auto in1 = model->addOperand(&type14);
5859   auto param62 = model->addOperand(&type2);
5860   auto param63 = model->addOperand(&type2);
5861   auto param64 = model->addOperand(&type13);
5862   auto param65 = model->addOperand(&type13);
5863   auto param66 = model->addOperand(&type2);
5864   auto param67 = model->addOperand(&type2);
5865   auto layout = model->addOperand(&type0);
5866   auto featureMap1 = model->addOperand(&type15);
5867   auto param68 = model->addOperand(&type2);
5868   auto param69 = model->addOperand(&type2);
5869   auto param70 = model->addOperand(&type2);
5870   auto param71 = model->addOperand(&type2);
5871   auto param72 = model->addOperand(&type2);
5872   auto param73 = model->addOperand(&type2);
5873   auto out1 = model->addOperand(&type22);
5874   // Phase 2, operations
5875   static float scores1_init[] = {0.9f, 0.1f};
5876   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
5877   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5878   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
5879   static int32_t param55_init[] = {0};
5880   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5881   static float param56_init[] = {0.3f};
5882   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
5883   static int32_t param57_init[] = {-1};
5884   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5885   static int32_t param58_init[] = {0};
5886   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5887   static float param59_init[] = {0.4f};
5888   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
5889   static float param60_init[] = {1.0f};
5890   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
5891   static float param61_init[] = {0.3f};
5892   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
5893   static int32_t param62_init[] = {2};
5894   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5895   static int32_t param63_init[] = {2};
5896   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5897   static float param64_init[] = {2.0f};
5898   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
5899   static float param65_init[] = {2.0f};
5900   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
5901   static int32_t param66_init[] = {4};
5902   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5903   static int32_t param67_init[] = {4};
5904   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5905   static bool8 layout_init[] = {false};
5906   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5907   static int32_t param68_init[] = {1};
5908   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
5909   static int32_t param69_init[] = {1};
5910   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
5911   static int32_t param70_init[] = {1};
5912   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
5913   static int32_t param71_init[] = {2};
5914   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5915   static int32_t param72_init[] = {2};
5916   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5917   static int32_t param73_init[] = {0};
5918   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
5919   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5920   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
5921   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
5922   // Phase 3, inputs and outputs
5923   model->identifyInputsAndOutputs(
5924     {in1},
5925     {scoresOut1, classesOut1, out1});
5926   assert(model->isValid());
5927 }
5928 
is_ignored_zero_sized_dynamic_output_shape_nhwc_2(int i)5929 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_2(int i) {
5930   static std::set<int> ignore = {};
5931   return ignore.find(i) != ignore.end();
5932 }
5933 
CreateModel_zero_sized_dynamic_output_shape_nhwc_relaxed_2(Model * model)5934 void CreateModel_zero_sized_dynamic_output_shape_nhwc_relaxed_2(Model *model) {
5935   OperandType type0(Type::BOOL, {});
5936   OperandType type10(Type::TENSOR_INT32, {0});
5937   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
5938   OperandType type12(Type::TENSOR_INT32, {1});
5939   OperandType type13(Type::FLOAT32, {});
5940   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5941   OperandType type15(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
5942   OperandType type2(Type::INT32, {});
5943   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
5944   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
5945   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
5946   OperandType type9(Type::TENSOR_FLOAT32, {0});
5947   // Phase 1, operands
5948   auto scores1 = model->addOperand(&type7);
5949   auto roi1 = model->addOperand(&type8);
5950   auto param55 = model->addOperand(&type12);
5951   auto param56 = model->addOperand(&type13);
5952   auto param57 = model->addOperand(&type2);
5953   auto param58 = model->addOperand(&type2);
5954   auto param59 = model->addOperand(&type13);
5955   auto param60 = model->addOperand(&type13);
5956   auto param61 = model->addOperand(&type13);
5957   auto scoresOut1 = model->addOperand(&type9);
5958   auto roiOut1 = model->addOperand(&type11);
5959   auto classesOut1 = model->addOperand(&type10);
5960   auto batchSplitOut1 = model->addOperand(&type10);
5961   auto in1 = model->addOperand(&type14);
5962   auto param62 = model->addOperand(&type2);
5963   auto param63 = model->addOperand(&type2);
5964   auto param64 = model->addOperand(&type13);
5965   auto param65 = model->addOperand(&type13);
5966   auto param66 = model->addOperand(&type2);
5967   auto param67 = model->addOperand(&type2);
5968   auto layout = model->addOperand(&type0);
5969   auto featureMap1 = model->addOperand(&type15);
5970   auto param68 = model->addOperand(&type2);
5971   auto param69 = model->addOperand(&type2);
5972   auto param70 = model->addOperand(&type2);
5973   auto param71 = model->addOperand(&type2);
5974   auto param72 = model->addOperand(&type2);
5975   auto param73 = model->addOperand(&type2);
5976   auto out1 = model->addOperand(&type22);
5977   // Phase 2, operations
5978   static float scores1_init[] = {0.9f, 0.1f};
5979   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
5980   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5981   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
5982   static int32_t param55_init[] = {0};
5983   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5984   static float param56_init[] = {0.3f};
5985   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
5986   static int32_t param57_init[] = {-1};
5987   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5988   static int32_t param58_init[] = {0};
5989   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5990   static float param59_init[] = {0.4f};
5991   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
5992   static float param60_init[] = {1.0f};
5993   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
5994   static float param61_init[] = {0.3f};
5995   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
5996   static int32_t param62_init[] = {2};
5997   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5998   static int32_t param63_init[] = {2};
5999   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
6000   static float param64_init[] = {2.0f};
6001   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
6002   static float param65_init[] = {2.0f};
6003   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6004   static int32_t param66_init[] = {4};
6005   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6006   static int32_t param67_init[] = {4};
6007   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6008   static bool8 layout_init[] = {false};
6009   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6010   static int32_t param68_init[] = {1};
6011   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
6012   static int32_t param69_init[] = {1};
6013   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
6014   static int32_t param70_init[] = {1};
6015   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
6016   static int32_t param71_init[] = {2};
6017   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6018   static int32_t param72_init[] = {2};
6019   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6020   static int32_t param73_init[] = {0};
6021   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
6022   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6023   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
6024   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
6025   // Phase 3, inputs and outputs
6026   model->identifyInputsAndOutputs(
6027     {in1},
6028     {scoresOut1, classesOut1, out1});
6029   // Phase 4: set relaxed execution
6030   model->relaxComputationFloat32toFloat16(true);
6031   assert(model->isValid());
6032 }
6033 
is_ignored_zero_sized_dynamic_output_shape_nhwc_relaxed_2(int i)6034 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_relaxed_2(int i) {
6035   static std::set<int> ignore = {};
6036   return ignore.find(i) != ignore.end();
6037 }
6038 
CreateModel_zero_sized_dynamic_output_shape_nhwc_quant8_2(Model * model)6039 void CreateModel_zero_sized_dynamic_output_shape_nhwc_quant8_2(Model *model) {
6040   OperandType type0(Type::BOOL, {});
6041   OperandType type10(Type::TENSOR_INT32, {0});
6042   OperandType type12(Type::TENSOR_INT32, {1});
6043   OperandType type13(Type::FLOAT32, {});
6044   OperandType type2(Type::INT32, {});
6045   OperandType type50(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 1}, 0.1f, 128);
6046   OperandType type51(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
6047   OperandType type53(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
6048   OperandType type54(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
6049   OperandType type55(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
6050   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
6051   OperandType type68(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128);
6052   // Phase 1, operands
6053   auto scores1 = model->addOperand(&type55);
6054   auto roi1 = model->addOperand(&type53);
6055   auto param55 = model->addOperand(&type12);
6056   auto param56 = model->addOperand(&type13);
6057   auto param57 = model->addOperand(&type2);
6058   auto param58 = model->addOperand(&type2);
6059   auto param59 = model->addOperand(&type13);
6060   auto param60 = model->addOperand(&type13);
6061   auto param61 = model->addOperand(&type13);
6062   auto scoresOut1 = model->addOperand(&type56);
6063   auto roiOut1 = model->addOperand(&type54);
6064   auto classesOut1 = model->addOperand(&type10);
6065   auto batchSplitOut1 = model->addOperand(&type10);
6066   auto in1 = model->addOperand(&type51);
6067   auto param62 = model->addOperand(&type2);
6068   auto param63 = model->addOperand(&type2);
6069   auto param64 = model->addOperand(&type13);
6070   auto param65 = model->addOperand(&type13);
6071   auto param66 = model->addOperand(&type2);
6072   auto param67 = model->addOperand(&type2);
6073   auto layout = model->addOperand(&type0);
6074   auto featureMap1 = model->addOperand(&type50);
6075   auto param68 = model->addOperand(&type2);
6076   auto param69 = model->addOperand(&type2);
6077   auto param70 = model->addOperand(&type2);
6078   auto param71 = model->addOperand(&type2);
6079   auto param72 = model->addOperand(&type2);
6080   auto param73 = model->addOperand(&type2);
6081   auto out1 = model->addOperand(&type68);
6082   // Phase 2, operations
6083   static uint8_t scores1_init[] = {137, 129};
6084   model->setOperandValue(scores1, scores1_init, sizeof(uint8_t) * 2);
6085   static uint16_t roi1_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
6086   model->setOperandValue(roi1, roi1_init, sizeof(uint16_t) * 8);
6087   static int32_t param55_init[] = {0};
6088   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
6089   static float param56_init[] = {0.3f};
6090   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
6091   static int32_t param57_init[] = {-1};
6092   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
6093   static int32_t param58_init[] = {0};
6094   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
6095   static float param59_init[] = {0.4f};
6096   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
6097   static float param60_init[] = {1.0f};
6098   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
6099   static float param61_init[] = {0.3f};
6100   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
6101   static int32_t param62_init[] = {2};
6102   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
6103   static int32_t param63_init[] = {2};
6104   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
6105   static float param64_init[] = {2.0f};
6106   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
6107   static float param65_init[] = {2.0f};
6108   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6109   static int32_t param66_init[] = {4};
6110   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6111   static int32_t param67_init[] = {4};
6112   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6113   static bool8 layout_init[] = {false};
6114   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6115   static int32_t param68_init[] = {1};
6116   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
6117   static int32_t param69_init[] = {1};
6118   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
6119   static int32_t param70_init[] = {1};
6120   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
6121   static int32_t param71_init[] = {2};
6122   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6123   static int32_t param72_init[] = {2};
6124   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6125   static int32_t param73_init[] = {0};
6126   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
6127   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6128   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
6129   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
6130   // Phase 3, inputs and outputs
6131   model->identifyInputsAndOutputs(
6132     {in1},
6133     {scoresOut1, classesOut1, out1});
6134   assert(model->isValid());
6135 }
6136 
is_ignored_zero_sized_dynamic_output_shape_nhwc_quant8_2(int i)6137 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_quant8_2(int i) {
6138   static std::set<int> ignore = {};
6139   return ignore.find(i) != ignore.end();
6140 }
6141 
CreateModel_zero_sized_dynamic_output_shape_nhwc_float16_2(Model * model)6142 void CreateModel_zero_sized_dynamic_output_shape_nhwc_float16_2(Model *model) {
6143   OperandType type0(Type::BOOL, {});
6144   OperandType type10(Type::TENSOR_INT32, {0});
6145   OperandType type12(Type::TENSOR_INT32, {1});
6146   OperandType type2(Type::INT32, {});
6147   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
6148   OperandType type57(Type::TENSOR_FLOAT16, {0, 2, 2, 1});
6149   OperandType type58(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
6150   OperandType type60(Type::FLOAT16, {});
6151   OperandType type61(Type::TENSOR_FLOAT16, {1, 8});
6152   OperandType type62(Type::TENSOR_FLOAT16, {0, 4});
6153   OperandType type63(Type::TENSOR_FLOAT16, {1, 2});
6154   OperandType type69(Type::TENSOR_FLOAT16, {0});
6155   // Phase 1, operands
6156   auto scores1 = model->addOperand(&type63);
6157   auto roi1 = model->addOperand(&type61);
6158   auto param55 = model->addOperand(&type12);
6159   auto param56 = model->addOperand(&type60);
6160   auto param57 = model->addOperand(&type2);
6161   auto param58 = model->addOperand(&type2);
6162   auto param59 = model->addOperand(&type60);
6163   auto param60 = model->addOperand(&type60);
6164   auto param61 = model->addOperand(&type60);
6165   auto scoresOut1 = model->addOperand(&type69);
6166   auto roiOut1 = model->addOperand(&type62);
6167   auto classesOut1 = model->addOperand(&type10);
6168   auto batchSplitOut1 = model->addOperand(&type10);
6169   auto in1 = model->addOperand(&type58);
6170   auto param62 = model->addOperand(&type2);
6171   auto param63 = model->addOperand(&type2);
6172   auto param64 = model->addOperand(&type60);
6173   auto param65 = model->addOperand(&type60);
6174   auto param66 = model->addOperand(&type2);
6175   auto param67 = model->addOperand(&type2);
6176   auto layout = model->addOperand(&type0);
6177   auto featureMap1 = model->addOperand(&type57);
6178   auto param68 = model->addOperand(&type2);
6179   auto param69 = model->addOperand(&type2);
6180   auto param70 = model->addOperand(&type2);
6181   auto param71 = model->addOperand(&type2);
6182   auto param72 = model->addOperand(&type2);
6183   auto param73 = model->addOperand(&type2);
6184   auto out1 = model->addOperand(&type24);
6185   // Phase 2, operations
6186   static _Float16 scores1_init[] = {0.8999999761581421f, 0.10000000149011612f};
6187   model->setOperandValue(scores1, scores1_init, sizeof(_Float16) * 2);
6188   static _Float16 roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6189   model->setOperandValue(roi1, roi1_init, sizeof(_Float16) * 8);
6190   static int32_t param55_init[] = {0};
6191   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
6192   static _Float16 param56_init[] = {0.30000001192092896f};
6193   model->setOperandValue(param56, param56_init, sizeof(_Float16) * 1);
6194   static int32_t param57_init[] = {-1};
6195   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
6196   static int32_t param58_init[] = {0};
6197   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
6198   static _Float16 param59_init[] = {0.4000000059604645f};
6199   model->setOperandValue(param59, param59_init, sizeof(_Float16) * 1);
6200   static _Float16 param60_init[] = {1.0f};
6201   model->setOperandValue(param60, param60_init, sizeof(_Float16) * 1);
6202   static _Float16 param61_init[] = {0.30000001192092896f};
6203   model->setOperandValue(param61, param61_init, sizeof(_Float16) * 1);
6204   static int32_t param62_init[] = {2};
6205   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
6206   static int32_t param63_init[] = {2};
6207   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
6208   static _Float16 param64_init[] = {2.0f};
6209   model->setOperandValue(param64, param64_init, sizeof(_Float16) * 1);
6210   static _Float16 param65_init[] = {2.0f};
6211   model->setOperandValue(param65, param65_init, sizeof(_Float16) * 1);
6212   static int32_t param66_init[] = {4};
6213   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6214   static int32_t param67_init[] = {4};
6215   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6216   static bool8 layout_init[] = {false};
6217   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6218   static int32_t param68_init[] = {1};
6219   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
6220   static int32_t param69_init[] = {1};
6221   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
6222   static int32_t param70_init[] = {1};
6223   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
6224   static int32_t param71_init[] = {2};
6225   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6226   static int32_t param72_init[] = {2};
6227   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6228   static int32_t param73_init[] = {0};
6229   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
6230   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6231   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
6232   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
6233   // Phase 3, inputs and outputs
6234   model->identifyInputsAndOutputs(
6235     {in1},
6236     {scoresOut1, classesOut1, out1});
6237   assert(model->isValid());
6238 }
6239 
is_ignored_zero_sized_dynamic_output_shape_nhwc_float16_2(int i)6240 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_float16_2(int i) {
6241   static std::set<int> ignore = {};
6242   return ignore.find(i) != ignore.end();
6243 }
6244 
CreateModel_zero_sized_dynamic_output_shape_nchw_2(Model * model)6245 void CreateModel_zero_sized_dynamic_output_shape_nchw_2(Model *model) {
6246   OperandType type0(Type::BOOL, {});
6247   OperandType type10(Type::TENSOR_INT32, {0});
6248   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
6249   OperandType type12(Type::TENSOR_INT32, {1});
6250   OperandType type13(Type::FLOAT32, {});
6251   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
6252   OperandType type2(Type::INT32, {});
6253   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
6254   OperandType type65(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
6255   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
6256   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
6257   OperandType type9(Type::TENSOR_FLOAT32, {0});
6258   // Phase 1, operands
6259   auto scores1 = model->addOperand(&type7);
6260   auto roi1 = model->addOperand(&type8);
6261   auto param55 = model->addOperand(&type12);
6262   auto param56 = model->addOperand(&type13);
6263   auto param57 = model->addOperand(&type2);
6264   auto param58 = model->addOperand(&type2);
6265   auto param59 = model->addOperand(&type13);
6266   auto param60 = model->addOperand(&type13);
6267   auto param61 = model->addOperand(&type13);
6268   auto scoresOut1 = model->addOperand(&type9);
6269   auto roiOut1 = model->addOperand(&type11);
6270   auto classesOut1 = model->addOperand(&type10);
6271   auto batchSplitOut1 = model->addOperand(&type10);
6272   auto in1 = model->addOperand(&type14);
6273   auto param62 = model->addOperand(&type2);
6274   auto param63 = model->addOperand(&type2);
6275   auto param64 = model->addOperand(&type13);
6276   auto param65 = model->addOperand(&type13);
6277   auto param66 = model->addOperand(&type2);
6278   auto param67 = model->addOperand(&type2);
6279   auto layout = model->addOperand(&type0);
6280   auto featureMap1 = model->addOperand(&type65);
6281   auto param68 = model->addOperand(&type2);
6282   auto param69 = model->addOperand(&type2);
6283   auto param70 = model->addOperand(&type2);
6284   auto param71 = model->addOperand(&type2);
6285   auto param72 = model->addOperand(&type2);
6286   auto param73 = model->addOperand(&type2);
6287   auto out1 = model->addOperand(&type22);
6288   // Phase 2, operations
6289   static float scores1_init[] = {0.9f, 0.1f};
6290   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
6291   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6292   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
6293   static int32_t param55_init[] = {0};
6294   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
6295   static float param56_init[] = {0.3f};
6296   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
6297   static int32_t param57_init[] = {-1};
6298   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
6299   static int32_t param58_init[] = {0};
6300   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
6301   static float param59_init[] = {0.4f};
6302   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
6303   static float param60_init[] = {1.0f};
6304   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
6305   static float param61_init[] = {0.3f};
6306   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
6307   static int32_t param62_init[] = {2};
6308   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
6309   static int32_t param63_init[] = {2};
6310   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
6311   static float param64_init[] = {2.0f};
6312   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
6313   static float param65_init[] = {2.0f};
6314   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6315   static int32_t param66_init[] = {4};
6316   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6317   static int32_t param67_init[] = {4};
6318   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6319   static bool8 layout_init[] = {true};
6320   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6321   static int32_t param68_init[] = {1};
6322   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
6323   static int32_t param69_init[] = {1};
6324   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
6325   static int32_t param70_init[] = {1};
6326   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
6327   static int32_t param71_init[] = {2};
6328   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6329   static int32_t param72_init[] = {2};
6330   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6331   static int32_t param73_init[] = {0};
6332   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
6333   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6334   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
6335   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
6336   // Phase 3, inputs and outputs
6337   model->identifyInputsAndOutputs(
6338     {in1},
6339     {scoresOut1, classesOut1, out1});
6340   assert(model->isValid());
6341 }
6342 
is_ignored_zero_sized_dynamic_output_shape_nchw_2(int i)6343 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_2(int i) {
6344   static std::set<int> ignore = {};
6345   return ignore.find(i) != ignore.end();
6346 }
6347 
CreateModel_zero_sized_dynamic_output_shape_nchw_relaxed_2(Model * model)6348 void CreateModel_zero_sized_dynamic_output_shape_nchw_relaxed_2(Model *model) {
6349   OperandType type0(Type::BOOL, {});
6350   OperandType type10(Type::TENSOR_INT32, {0});
6351   OperandType type11(Type::TENSOR_FLOAT32, {0, 4});
6352   OperandType type12(Type::TENSOR_INT32, {1});
6353   OperandType type13(Type::FLOAT32, {});
6354   OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
6355   OperandType type2(Type::INT32, {});
6356   OperandType type22(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
6357   OperandType type65(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
6358   OperandType type7(Type::TENSOR_FLOAT32, {1, 2});
6359   OperandType type8(Type::TENSOR_FLOAT32, {1, 8});
6360   OperandType type9(Type::TENSOR_FLOAT32, {0});
6361   // Phase 1, operands
6362   auto scores1 = model->addOperand(&type7);
6363   auto roi1 = model->addOperand(&type8);
6364   auto param55 = model->addOperand(&type12);
6365   auto param56 = model->addOperand(&type13);
6366   auto param57 = model->addOperand(&type2);
6367   auto param58 = model->addOperand(&type2);
6368   auto param59 = model->addOperand(&type13);
6369   auto param60 = model->addOperand(&type13);
6370   auto param61 = model->addOperand(&type13);
6371   auto scoresOut1 = model->addOperand(&type9);
6372   auto roiOut1 = model->addOperand(&type11);
6373   auto classesOut1 = model->addOperand(&type10);
6374   auto batchSplitOut1 = model->addOperand(&type10);
6375   auto in1 = model->addOperand(&type14);
6376   auto param62 = model->addOperand(&type2);
6377   auto param63 = model->addOperand(&type2);
6378   auto param64 = model->addOperand(&type13);
6379   auto param65 = model->addOperand(&type13);
6380   auto param66 = model->addOperand(&type2);
6381   auto param67 = model->addOperand(&type2);
6382   auto layout = model->addOperand(&type0);
6383   auto featureMap1 = model->addOperand(&type65);
6384   auto param68 = model->addOperand(&type2);
6385   auto param69 = model->addOperand(&type2);
6386   auto param70 = model->addOperand(&type2);
6387   auto param71 = model->addOperand(&type2);
6388   auto param72 = model->addOperand(&type2);
6389   auto param73 = model->addOperand(&type2);
6390   auto out1 = model->addOperand(&type22);
6391   // Phase 2, operations
6392   static float scores1_init[] = {0.9f, 0.1f};
6393   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
6394   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6395   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
6396   static int32_t param55_init[] = {0};
6397   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
6398   static float param56_init[] = {0.3f};
6399   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
6400   static int32_t param57_init[] = {-1};
6401   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
6402   static int32_t param58_init[] = {0};
6403   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
6404   static float param59_init[] = {0.4f};
6405   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
6406   static float param60_init[] = {1.0f};
6407   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
6408   static float param61_init[] = {0.3f};
6409   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
6410   static int32_t param62_init[] = {2};
6411   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
6412   static int32_t param63_init[] = {2};
6413   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
6414   static float param64_init[] = {2.0f};
6415   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
6416   static float param65_init[] = {2.0f};
6417   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6418   static int32_t param66_init[] = {4};
6419   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6420   static int32_t param67_init[] = {4};
6421   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6422   static bool8 layout_init[] = {true};
6423   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6424   static int32_t param68_init[] = {1};
6425   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
6426   static int32_t param69_init[] = {1};
6427   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
6428   static int32_t param70_init[] = {1};
6429   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
6430   static int32_t param71_init[] = {2};
6431   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6432   static int32_t param72_init[] = {2};
6433   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6434   static int32_t param73_init[] = {0};
6435   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
6436   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6437   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
6438   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
6439   // Phase 3, inputs and outputs
6440   model->identifyInputsAndOutputs(
6441     {in1},
6442     {scoresOut1, classesOut1, out1});
6443   // Phase 4: set relaxed execution
6444   model->relaxComputationFloat32toFloat16(true);
6445   assert(model->isValid());
6446 }
6447 
is_ignored_zero_sized_dynamic_output_shape_nchw_relaxed_2(int i)6448 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_relaxed_2(int i) {
6449   static std::set<int> ignore = {};
6450   return ignore.find(i) != ignore.end();
6451 }
6452 
CreateModel_zero_sized_dynamic_output_shape_nchw_quant8_2(Model * model)6453 void CreateModel_zero_sized_dynamic_output_shape_nchw_quant8_2(Model *model) {
6454   OperandType type0(Type::BOOL, {});
6455   OperandType type10(Type::TENSOR_INT32, {0});
6456   OperandType type12(Type::TENSOR_INT32, {1});
6457   OperandType type13(Type::FLOAT32, {});
6458   OperandType type2(Type::INT32, {});
6459   OperandType type51(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
6460   OperandType type53(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
6461   OperandType type54(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
6462   OperandType type55(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
6463   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
6464   OperandType type66(Type::TENSOR_QUANT8_ASYMM, {0, 1, 2, 2}, 0.1f, 128);
6465   OperandType type68(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128);
6466   // Phase 1, operands
6467   auto scores1 = model->addOperand(&type55);
6468   auto roi1 = model->addOperand(&type53);
6469   auto param55 = model->addOperand(&type12);
6470   auto param56 = model->addOperand(&type13);
6471   auto param57 = model->addOperand(&type2);
6472   auto param58 = model->addOperand(&type2);
6473   auto param59 = model->addOperand(&type13);
6474   auto param60 = model->addOperand(&type13);
6475   auto param61 = model->addOperand(&type13);
6476   auto scoresOut1 = model->addOperand(&type56);
6477   auto roiOut1 = model->addOperand(&type54);
6478   auto classesOut1 = model->addOperand(&type10);
6479   auto batchSplitOut1 = model->addOperand(&type10);
6480   auto in1 = model->addOperand(&type51);
6481   auto param62 = model->addOperand(&type2);
6482   auto param63 = model->addOperand(&type2);
6483   auto param64 = model->addOperand(&type13);
6484   auto param65 = model->addOperand(&type13);
6485   auto param66 = model->addOperand(&type2);
6486   auto param67 = model->addOperand(&type2);
6487   auto layout = model->addOperand(&type0);
6488   auto featureMap1 = model->addOperand(&type66);
6489   auto param68 = model->addOperand(&type2);
6490   auto param69 = model->addOperand(&type2);
6491   auto param70 = model->addOperand(&type2);
6492   auto param71 = model->addOperand(&type2);
6493   auto param72 = model->addOperand(&type2);
6494   auto param73 = model->addOperand(&type2);
6495   auto out1 = model->addOperand(&type68);
6496   // Phase 2, operations
6497   static uint8_t scores1_init[] = {137, 129};
6498   model->setOperandValue(scores1, scores1_init, sizeof(uint8_t) * 2);
6499   static uint16_t roi1_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
6500   model->setOperandValue(roi1, roi1_init, sizeof(uint16_t) * 8);
6501   static int32_t param55_init[] = {0};
6502   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
6503   static float param56_init[] = {0.3f};
6504   model->setOperandValue(param56, param56_init, sizeof(float) * 1);
6505   static int32_t param57_init[] = {-1};
6506   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
6507   static int32_t param58_init[] = {0};
6508   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
6509   static float param59_init[] = {0.4f};
6510   model->setOperandValue(param59, param59_init, sizeof(float) * 1);
6511   static float param60_init[] = {1.0f};
6512   model->setOperandValue(param60, param60_init, sizeof(float) * 1);
6513   static float param61_init[] = {0.3f};
6514   model->setOperandValue(param61, param61_init, sizeof(float) * 1);
6515   static int32_t param62_init[] = {2};
6516   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
6517   static int32_t param63_init[] = {2};
6518   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
6519   static float param64_init[] = {2.0f};
6520   model->setOperandValue(param64, param64_init, sizeof(float) * 1);
6521   static float param65_init[] = {2.0f};
6522   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6523   static int32_t param66_init[] = {4};
6524   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6525   static int32_t param67_init[] = {4};
6526   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6527   static bool8 layout_init[] = {true};
6528   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6529   static int32_t param68_init[] = {1};
6530   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
6531   static int32_t param69_init[] = {1};
6532   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
6533   static int32_t param70_init[] = {1};
6534   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
6535   static int32_t param71_init[] = {2};
6536   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6537   static int32_t param72_init[] = {2};
6538   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6539   static int32_t param73_init[] = {0};
6540   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
6541   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6542   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
6543   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
6544   // Phase 3, inputs and outputs
6545   model->identifyInputsAndOutputs(
6546     {in1},
6547     {scoresOut1, classesOut1, out1});
6548   assert(model->isValid());
6549 }
6550 
is_ignored_zero_sized_dynamic_output_shape_nchw_quant8_2(int i)6551 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_quant8_2(int i) {
6552   static std::set<int> ignore = {};
6553   return ignore.find(i) != ignore.end();
6554 }
6555 
CreateModel_zero_sized_dynamic_output_shape_nchw_float16_2(Model * model)6556 void CreateModel_zero_sized_dynamic_output_shape_nchw_float16_2(Model *model) {
6557   OperandType type0(Type::BOOL, {});
6558   OperandType type10(Type::TENSOR_INT32, {0});
6559   OperandType type12(Type::TENSOR_INT32, {1});
6560   OperandType type2(Type::INT32, {});
6561   OperandType type24(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
6562   OperandType type58(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
6563   OperandType type60(Type::FLOAT16, {});
6564   OperandType type61(Type::TENSOR_FLOAT16, {1, 8});
6565   OperandType type62(Type::TENSOR_FLOAT16, {0, 4});
6566   OperandType type63(Type::TENSOR_FLOAT16, {1, 2});
6567   OperandType type67(Type::TENSOR_FLOAT16, {0, 1, 2, 2});
6568   OperandType type69(Type::TENSOR_FLOAT16, {0});
6569   // Phase 1, operands
6570   auto scores1 = model->addOperand(&type63);
6571   auto roi1 = model->addOperand(&type61);
6572   auto param55 = model->addOperand(&type12);
6573   auto param56 = model->addOperand(&type60);
6574   auto param57 = model->addOperand(&type2);
6575   auto param58 = model->addOperand(&type2);
6576   auto param59 = model->addOperand(&type60);
6577   auto param60 = model->addOperand(&type60);
6578   auto param61 = model->addOperand(&type60);
6579   auto scoresOut1 = model->addOperand(&type69);
6580   auto roiOut1 = model->addOperand(&type62);
6581   auto classesOut1 = model->addOperand(&type10);
6582   auto batchSplitOut1 = model->addOperand(&type10);
6583   auto in1 = model->addOperand(&type58);
6584   auto param62 = model->addOperand(&type2);
6585   auto param63 = model->addOperand(&type2);
6586   auto param64 = model->addOperand(&type60);
6587   auto param65 = model->addOperand(&type60);
6588   auto param66 = model->addOperand(&type2);
6589   auto param67 = model->addOperand(&type2);
6590   auto layout = model->addOperand(&type0);
6591   auto featureMap1 = model->addOperand(&type67);
6592   auto param68 = model->addOperand(&type2);
6593   auto param69 = model->addOperand(&type2);
6594   auto param70 = model->addOperand(&type2);
6595   auto param71 = model->addOperand(&type2);
6596   auto param72 = model->addOperand(&type2);
6597   auto param73 = model->addOperand(&type2);
6598   auto out1 = model->addOperand(&type24);
6599   // Phase 2, operations
6600   static _Float16 scores1_init[] = {0.8999999761581421f, 0.10000000149011612f};
6601   model->setOperandValue(scores1, scores1_init, sizeof(_Float16) * 2);
6602   static _Float16 roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6603   model->setOperandValue(roi1, roi1_init, sizeof(_Float16) * 8);
6604   static int32_t param55_init[] = {0};
6605   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
6606   static _Float16 param56_init[] = {0.30000001192092896f};
6607   model->setOperandValue(param56, param56_init, sizeof(_Float16) * 1);
6608   static int32_t param57_init[] = {-1};
6609   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
6610   static int32_t param58_init[] = {0};
6611   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
6612   static _Float16 param59_init[] = {0.4000000059604645f};
6613   model->setOperandValue(param59, param59_init, sizeof(_Float16) * 1);
6614   static _Float16 param60_init[] = {1.0f};
6615   model->setOperandValue(param60, param60_init, sizeof(_Float16) * 1);
6616   static _Float16 param61_init[] = {0.30000001192092896f};
6617   model->setOperandValue(param61, param61_init, sizeof(_Float16) * 1);
6618   static int32_t param62_init[] = {2};
6619   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
6620   static int32_t param63_init[] = {2};
6621   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
6622   static _Float16 param64_init[] = {2.0f};
6623   model->setOperandValue(param64, param64_init, sizeof(_Float16) * 1);
6624   static _Float16 param65_init[] = {2.0f};
6625   model->setOperandValue(param65, param65_init, sizeof(_Float16) * 1);
6626   static int32_t param66_init[] = {4};
6627   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6628   static int32_t param67_init[] = {4};
6629   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6630   static bool8 layout_init[] = {true};
6631   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6632   static int32_t param68_init[] = {1};
6633   model->setOperandValue(param68, param68_init, sizeof(int32_t) * 1);
6634   static int32_t param69_init[] = {1};
6635   model->setOperandValue(param69, param69_init, sizeof(int32_t) * 1);
6636   static int32_t param70_init[] = {1};
6637   model->setOperandValue(param70, param70_init, sizeof(int32_t) * 1);
6638   static int32_t param71_init[] = {2};
6639   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6640   static int32_t param72_init[] = {2};
6641   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6642   static int32_t param73_init[] = {0};
6643   model->setOperandValue(param73, param73_init, sizeof(int32_t) * 1);
6644   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param55, param56, param57, param58, param59, param60, param61}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6645   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param62, param63, param64, param65, param66, param67, layout}, {featureMap1});
6646   model->addOperation(ANEURALNETWORKS_MAX_POOL_2D, {featureMap1, param68, param69, param70, param71, param72, param73, layout}, {out1});
6647   // Phase 3, inputs and outputs
6648   model->identifyInputsAndOutputs(
6649     {in1},
6650     {scoresOut1, classesOut1, out1});
6651   assert(model->isValid());
6652 }
6653 
is_ignored_zero_sized_dynamic_output_shape_nchw_float16_2(int i)6654 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_float16_2(int i) {
6655   static std::set<int> ignore = {};
6656   return ignore.find(i) != ignore.end();
6657 }
6658 
6659