1 // clang-format off 2 // Generated file (from: conv2d_dilation.mod.py). Do not edit 3 void CreateModel_nhwc(Model *model) { 4 OperandType type0(Type::BOOL, {}); 5 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7 OperandType type3(Type::TENSOR_FLOAT32, {1}); 8 OperandType type4(Type::INT32, {}); 9 // Phase 1, operands 10 auto op1 = model->addOperand(&type1); 11 auto op2 = model->addOperand(&type2); 12 auto op3 = model->addOperand(&type3); 13 auto param = model->addOperand(&type4); 14 auto param1 = model->addOperand(&type4); 15 auto param2 = model->addOperand(&type4); 16 auto param3 = model->addOperand(&type4); 17 auto param4 = model->addOperand(&type4); 18 auto param5 = model->addOperand(&type4); 19 auto param6 = model->addOperand(&type4); 20 auto layout = model->addOperand(&type0); 21 auto param7 = model->addOperand(&type4); 22 auto param8 = model->addOperand(&type4); 23 auto op4 = model->addOperand(&type2); 24 // Phase 2, operations 25 static float op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 26 model->setOperandValue(op2, op2_init, sizeof(float) * 4); 27 static float op3_init[] = {0.0f}; 28 model->setOperandValue(op3, op3_init, sizeof(float) * 1); 29 static int32_t param_init[] = {0}; 30 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 31 static int32_t param1_init[] = {0}; 32 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 33 static int32_t param2_init[] = {0}; 34 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 35 static int32_t param3_init[] = {0}; 36 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 37 static int32_t param4_init[] = {1}; 38 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 39 static int32_t param5_init[] = {1}; 40 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 41 static int32_t param6_init[] = {0}; 42 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 43 static bool8 layout_init[] = {false}; 44 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 45 static int32_t param7_init[] = {1}; 46 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 47 static int32_t param8_init[] = {1}; 48 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 49 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 50 // Phase 3, inputs and outputs 51 model->identifyInputsAndOutputs( 52 {op1}, 53 {op4}); 54 assert(model->isValid()); 55 } 56 57 inline bool is_ignored_nhwc(int i) { 58 static std::set<int> ignore = {}; 59 return ignore.find(i) != ignore.end(); 60 } 61 62 void CreateModel_nhwc_relaxed(Model *model) { 63 OperandType type0(Type::BOOL, {}); 64 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 65 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 66 OperandType type3(Type::TENSOR_FLOAT32, {1}); 67 OperandType type4(Type::INT32, {}); 68 // Phase 1, operands 69 auto op1 = model->addOperand(&type1); 70 auto op2 = model->addOperand(&type2); 71 auto op3 = model->addOperand(&type3); 72 auto param = model->addOperand(&type4); 73 auto param1 = model->addOperand(&type4); 74 auto param2 = model->addOperand(&type4); 75 auto param3 = model->addOperand(&type4); 76 auto param4 = model->addOperand(&type4); 77 auto param5 = model->addOperand(&type4); 78 auto param6 = model->addOperand(&type4); 79 auto layout = model->addOperand(&type0); 80 auto param7 = model->addOperand(&type4); 81 auto param8 = model->addOperand(&type4); 82 auto op4 = model->addOperand(&type2); 83 // Phase 2, operations 84 static float op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 85 model->setOperandValue(op2, op2_init, sizeof(float) * 4); 86 static float op3_init[] = {0.0f}; 87 model->setOperandValue(op3, op3_init, sizeof(float) * 1); 88 static int32_t param_init[] = {0}; 89 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 90 static int32_t param1_init[] = {0}; 91 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 92 static int32_t param2_init[] = {0}; 93 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 94 static int32_t param3_init[] = {0}; 95 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 96 static int32_t param4_init[] = {1}; 97 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 98 static int32_t param5_init[] = {1}; 99 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 100 static int32_t param6_init[] = {0}; 101 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 102 static bool8 layout_init[] = {false}; 103 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 104 static int32_t param7_init[] = {1}; 105 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 106 static int32_t param8_init[] = {1}; 107 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 108 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 109 // Phase 3, inputs and outputs 110 model->identifyInputsAndOutputs( 111 {op1}, 112 {op4}); 113 // Phase 4: set relaxed execution 114 model->relaxComputationFloat32toFloat16(true); 115 assert(model->isValid()); 116 } 117 118 inline bool is_ignored_nhwc_relaxed(int i) { 119 static std::set<int> ignore = {}; 120 return ignore.find(i) != ignore.end(); 121 } 122 123 void CreateModel_nhwc_quant8(Model *model) { 124 OperandType type0(Type::BOOL, {}); 125 OperandType type4(Type::INT32, {}); 126 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.5f, 0); 127 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 128 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 129 // Phase 1, operands 130 auto op1 = model->addOperand(&type7); 131 auto op2 = model->addOperand(&type8); 132 auto op3 = model->addOperand(&type9); 133 auto param = model->addOperand(&type4); 134 auto param1 = model->addOperand(&type4); 135 auto param2 = model->addOperand(&type4); 136 auto param3 = model->addOperand(&type4); 137 auto param4 = model->addOperand(&type4); 138 auto param5 = model->addOperand(&type4); 139 auto param6 = model->addOperand(&type4); 140 auto layout = model->addOperand(&type0); 141 auto param7 = model->addOperand(&type4); 142 auto param8 = model->addOperand(&type4); 143 auto op4 = model->addOperand(&type8); 144 // Phase 2, operations 145 static uint8_t op2_init[] = {2, 2, 2, 2}; 146 model->setOperandValue(op2, op2_init, sizeof(uint8_t) * 4); 147 static int32_t op3_init[] = {0}; 148 model->setOperandValue(op3, op3_init, sizeof(int32_t) * 1); 149 static int32_t param_init[] = {0}; 150 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 151 static int32_t param1_init[] = {0}; 152 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 153 static int32_t param2_init[] = {0}; 154 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 155 static int32_t param3_init[] = {0}; 156 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 157 static int32_t param4_init[] = {1}; 158 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 159 static int32_t param5_init[] = {1}; 160 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 161 static int32_t param6_init[] = {0}; 162 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 163 static bool8 layout_init[] = {false}; 164 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 165 static int32_t param7_init[] = {1}; 166 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 167 static int32_t param8_init[] = {1}; 168 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 169 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 170 // Phase 3, inputs and outputs 171 model->identifyInputsAndOutputs( 172 {op1}, 173 {op4}); 174 assert(model->isValid()); 175 } 176 177 inline bool is_ignored_nhwc_quant8(int i) { 178 static std::set<int> ignore = {}; 179 return ignore.find(i) != ignore.end(); 180 } 181 182 void CreateModel_nhwc_float16(Model *model) { 183 OperandType type0(Type::BOOL, {}); 184 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 185 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 186 OperandType type12(Type::TENSOR_FLOAT16, {1}); 187 OperandType type4(Type::INT32, {}); 188 // Phase 1, operands 189 auto op1 = model->addOperand(&type10); 190 auto op2 = model->addOperand(&type11); 191 auto op3 = model->addOperand(&type12); 192 auto param = model->addOperand(&type4); 193 auto param1 = model->addOperand(&type4); 194 auto param2 = model->addOperand(&type4); 195 auto param3 = model->addOperand(&type4); 196 auto param4 = model->addOperand(&type4); 197 auto param5 = model->addOperand(&type4); 198 auto param6 = model->addOperand(&type4); 199 auto layout = model->addOperand(&type0); 200 auto param7 = model->addOperand(&type4); 201 auto param8 = model->addOperand(&type4); 202 auto op4 = model->addOperand(&type11); 203 // Phase 2, operations 204 static _Float16 op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 205 model->setOperandValue(op2, op2_init, sizeof(_Float16) * 4); 206 static _Float16 op3_init[] = {0.0f}; 207 model->setOperandValue(op3, op3_init, sizeof(_Float16) * 1); 208 static int32_t param_init[] = {0}; 209 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 210 static int32_t param1_init[] = {0}; 211 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 212 static int32_t param2_init[] = {0}; 213 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 214 static int32_t param3_init[] = {0}; 215 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 216 static int32_t param4_init[] = {1}; 217 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 218 static int32_t param5_init[] = {1}; 219 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 220 static int32_t param6_init[] = {0}; 221 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 222 static bool8 layout_init[] = {false}; 223 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 224 static int32_t param7_init[] = {1}; 225 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 226 static int32_t param8_init[] = {1}; 227 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 228 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 229 // Phase 3, inputs and outputs 230 model->identifyInputsAndOutputs( 231 {op1}, 232 {op4}); 233 assert(model->isValid()); 234 } 235 236 inline bool is_ignored_nhwc_float16(int i) { 237 static std::set<int> ignore = {}; 238 return ignore.find(i) != ignore.end(); 239 } 240 241 void CreateModel_nhwc_weight_as_input(Model *model) { 242 OperandType type0(Type::BOOL, {}); 243 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 244 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 245 OperandType type3(Type::TENSOR_FLOAT32, {1}); 246 OperandType type4(Type::INT32, {}); 247 // Phase 1, operands 248 auto op1 = model->addOperand(&type1); 249 auto op2 = model->addOperand(&type2); 250 auto op3 = model->addOperand(&type3); 251 auto param = model->addOperand(&type4); 252 auto param1 = model->addOperand(&type4); 253 auto param2 = model->addOperand(&type4); 254 auto param3 = model->addOperand(&type4); 255 auto param4 = model->addOperand(&type4); 256 auto param5 = model->addOperand(&type4); 257 auto param6 = model->addOperand(&type4); 258 auto layout = model->addOperand(&type0); 259 auto param7 = model->addOperand(&type4); 260 auto param8 = model->addOperand(&type4); 261 auto op4 = model->addOperand(&type2); 262 // Phase 2, operations 263 static int32_t param_init[] = {0}; 264 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 265 static int32_t param1_init[] = {0}; 266 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 267 static int32_t param2_init[] = {0}; 268 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 269 static int32_t param3_init[] = {0}; 270 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 271 static int32_t param4_init[] = {1}; 272 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 273 static int32_t param5_init[] = {1}; 274 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 275 static int32_t param6_init[] = {0}; 276 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 277 static bool8 layout_init[] = {false}; 278 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 279 static int32_t param7_init[] = {1}; 280 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 281 static int32_t param8_init[] = {1}; 282 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 283 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 284 // Phase 3, inputs and outputs 285 model->identifyInputsAndOutputs( 286 {op1, op2, op3}, 287 {op4}); 288 assert(model->isValid()); 289 } 290 291 inline bool is_ignored_nhwc_weight_as_input(int i) { 292 static std::set<int> ignore = {}; 293 return ignore.find(i) != ignore.end(); 294 } 295 296 void CreateModel_nhwc_weight_as_input_relaxed(Model *model) { 297 OperandType type0(Type::BOOL, {}); 298 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 299 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 300 OperandType type3(Type::TENSOR_FLOAT32, {1}); 301 OperandType type4(Type::INT32, {}); 302 // Phase 1, operands 303 auto op1 = model->addOperand(&type1); 304 auto op2 = model->addOperand(&type2); 305 auto op3 = model->addOperand(&type3); 306 auto param = model->addOperand(&type4); 307 auto param1 = model->addOperand(&type4); 308 auto param2 = model->addOperand(&type4); 309 auto param3 = model->addOperand(&type4); 310 auto param4 = model->addOperand(&type4); 311 auto param5 = model->addOperand(&type4); 312 auto param6 = model->addOperand(&type4); 313 auto layout = model->addOperand(&type0); 314 auto param7 = model->addOperand(&type4); 315 auto param8 = model->addOperand(&type4); 316 auto op4 = model->addOperand(&type2); 317 // Phase 2, operations 318 static int32_t param_init[] = {0}; 319 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 320 static int32_t param1_init[] = {0}; 321 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 322 static int32_t param2_init[] = {0}; 323 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 324 static int32_t param3_init[] = {0}; 325 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 326 static int32_t param4_init[] = {1}; 327 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 328 static int32_t param5_init[] = {1}; 329 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 330 static int32_t param6_init[] = {0}; 331 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 332 static bool8 layout_init[] = {false}; 333 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 334 static int32_t param7_init[] = {1}; 335 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 336 static int32_t param8_init[] = {1}; 337 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 338 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 339 // Phase 3, inputs and outputs 340 model->identifyInputsAndOutputs( 341 {op1, op2, op3}, 342 {op4}); 343 // Phase 4: set relaxed execution 344 model->relaxComputationFloat32toFloat16(true); 345 assert(model->isValid()); 346 } 347 348 inline bool is_ignored_nhwc_weight_as_input_relaxed(int i) { 349 static std::set<int> ignore = {}; 350 return ignore.find(i) != ignore.end(); 351 } 352 353 void CreateModel_nhwc_weight_as_input_quant8(Model *model) { 354 OperandType type0(Type::BOOL, {}); 355 OperandType type4(Type::INT32, {}); 356 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.5f, 0); 357 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 358 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 359 // Phase 1, operands 360 auto op1 = model->addOperand(&type7); 361 auto op2 = model->addOperand(&type8); 362 auto op3 = model->addOperand(&type9); 363 auto param = model->addOperand(&type4); 364 auto param1 = model->addOperand(&type4); 365 auto param2 = model->addOperand(&type4); 366 auto param3 = model->addOperand(&type4); 367 auto param4 = model->addOperand(&type4); 368 auto param5 = model->addOperand(&type4); 369 auto param6 = model->addOperand(&type4); 370 auto layout = model->addOperand(&type0); 371 auto param7 = model->addOperand(&type4); 372 auto param8 = model->addOperand(&type4); 373 auto op4 = model->addOperand(&type8); 374 // Phase 2, operations 375 static int32_t param_init[] = {0}; 376 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 377 static int32_t param1_init[] = {0}; 378 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 379 static int32_t param2_init[] = {0}; 380 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 381 static int32_t param3_init[] = {0}; 382 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 383 static int32_t param4_init[] = {1}; 384 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 385 static int32_t param5_init[] = {1}; 386 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 387 static int32_t param6_init[] = {0}; 388 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 389 static bool8 layout_init[] = {false}; 390 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 391 static int32_t param7_init[] = {1}; 392 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 393 static int32_t param8_init[] = {1}; 394 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 395 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 396 // Phase 3, inputs and outputs 397 model->identifyInputsAndOutputs( 398 {op1, op2, op3}, 399 {op4}); 400 assert(model->isValid()); 401 } 402 403 inline bool is_ignored_nhwc_weight_as_input_quant8(int i) { 404 static std::set<int> ignore = {}; 405 return ignore.find(i) != ignore.end(); 406 } 407 408 void CreateModel_nhwc_weight_as_input_float16(Model *model) { 409 OperandType type0(Type::BOOL, {}); 410 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 411 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 412 OperandType type12(Type::TENSOR_FLOAT16, {1}); 413 OperandType type4(Type::INT32, {}); 414 // Phase 1, operands 415 auto op1 = model->addOperand(&type10); 416 auto op2 = model->addOperand(&type11); 417 auto op3 = model->addOperand(&type12); 418 auto param = model->addOperand(&type4); 419 auto param1 = model->addOperand(&type4); 420 auto param2 = model->addOperand(&type4); 421 auto param3 = model->addOperand(&type4); 422 auto param4 = model->addOperand(&type4); 423 auto param5 = model->addOperand(&type4); 424 auto param6 = model->addOperand(&type4); 425 auto layout = model->addOperand(&type0); 426 auto param7 = model->addOperand(&type4); 427 auto param8 = model->addOperand(&type4); 428 auto op4 = model->addOperand(&type11); 429 // Phase 2, operations 430 static int32_t param_init[] = {0}; 431 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 432 static int32_t param1_init[] = {0}; 433 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 434 static int32_t param2_init[] = {0}; 435 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 436 static int32_t param3_init[] = {0}; 437 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 438 static int32_t param4_init[] = {1}; 439 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 440 static int32_t param5_init[] = {1}; 441 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 442 static int32_t param6_init[] = {0}; 443 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 444 static bool8 layout_init[] = {false}; 445 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 446 static int32_t param7_init[] = {1}; 447 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 448 static int32_t param8_init[] = {1}; 449 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 450 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 451 // Phase 3, inputs and outputs 452 model->identifyInputsAndOutputs( 453 {op1, op2, op3}, 454 {op4}); 455 assert(model->isValid()); 456 } 457 458 inline bool is_ignored_nhwc_weight_as_input_float16(int i) { 459 static std::set<int> ignore = {}; 460 return ignore.find(i) != ignore.end(); 461 } 462 463 void CreateModel_nchw(Model *model) { 464 OperandType type0(Type::BOOL, {}); 465 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 466 OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 2, 2}); 467 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 468 OperandType type3(Type::TENSOR_FLOAT32, {1}); 469 OperandType type4(Type::INT32, {}); 470 // Phase 1, operands 471 auto op1 = model->addOperand(&type13); 472 auto op2 = model->addOperand(&type2); 473 auto op3 = model->addOperand(&type3); 474 auto param = model->addOperand(&type4); 475 auto param1 = model->addOperand(&type4); 476 auto param2 = model->addOperand(&type4); 477 auto param3 = model->addOperand(&type4); 478 auto param4 = model->addOperand(&type4); 479 auto param5 = model->addOperand(&type4); 480 auto param6 = model->addOperand(&type4); 481 auto layout = model->addOperand(&type0); 482 auto param7 = model->addOperand(&type4); 483 auto param8 = model->addOperand(&type4); 484 auto op4 = model->addOperand(&type14); 485 // Phase 2, operations 486 static float op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 487 model->setOperandValue(op2, op2_init, sizeof(float) * 4); 488 static float op3_init[] = {0.0f}; 489 model->setOperandValue(op3, op3_init, sizeof(float) * 1); 490 static int32_t param_init[] = {0}; 491 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 492 static int32_t param1_init[] = {0}; 493 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 494 static int32_t param2_init[] = {0}; 495 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 496 static int32_t param3_init[] = {0}; 497 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 498 static int32_t param4_init[] = {1}; 499 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 500 static int32_t param5_init[] = {1}; 501 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 502 static int32_t param6_init[] = {0}; 503 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 504 static bool8 layout_init[] = {true}; 505 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 506 static int32_t param7_init[] = {1}; 507 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 508 static int32_t param8_init[] = {1}; 509 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 510 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 511 // Phase 3, inputs and outputs 512 model->identifyInputsAndOutputs( 513 {op1}, 514 {op4}); 515 assert(model->isValid()); 516 } 517 518 inline bool is_ignored_nchw(int i) { 519 static std::set<int> ignore = {}; 520 return ignore.find(i) != ignore.end(); 521 } 522 523 void CreateModel_nchw_relaxed(Model *model) { 524 OperandType type0(Type::BOOL, {}); 525 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 526 OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 2, 2}); 527 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 528 OperandType type3(Type::TENSOR_FLOAT32, {1}); 529 OperandType type4(Type::INT32, {}); 530 // Phase 1, operands 531 auto op1 = model->addOperand(&type13); 532 auto op2 = model->addOperand(&type2); 533 auto op3 = model->addOperand(&type3); 534 auto param = model->addOperand(&type4); 535 auto param1 = model->addOperand(&type4); 536 auto param2 = model->addOperand(&type4); 537 auto param3 = model->addOperand(&type4); 538 auto param4 = model->addOperand(&type4); 539 auto param5 = model->addOperand(&type4); 540 auto param6 = model->addOperand(&type4); 541 auto layout = model->addOperand(&type0); 542 auto param7 = model->addOperand(&type4); 543 auto param8 = model->addOperand(&type4); 544 auto op4 = model->addOperand(&type14); 545 // Phase 2, operations 546 static float op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 547 model->setOperandValue(op2, op2_init, sizeof(float) * 4); 548 static float op3_init[] = {0.0f}; 549 model->setOperandValue(op3, op3_init, sizeof(float) * 1); 550 static int32_t param_init[] = {0}; 551 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 552 static int32_t param1_init[] = {0}; 553 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 554 static int32_t param2_init[] = {0}; 555 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 556 static int32_t param3_init[] = {0}; 557 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 558 static int32_t param4_init[] = {1}; 559 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 560 static int32_t param5_init[] = {1}; 561 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 562 static int32_t param6_init[] = {0}; 563 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 564 static bool8 layout_init[] = {true}; 565 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 566 static int32_t param7_init[] = {1}; 567 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 568 static int32_t param8_init[] = {1}; 569 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 570 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 571 // Phase 3, inputs and outputs 572 model->identifyInputsAndOutputs( 573 {op1}, 574 {op4}); 575 // Phase 4: set relaxed execution 576 model->relaxComputationFloat32toFloat16(true); 577 assert(model->isValid()); 578 } 579 580 inline bool is_ignored_nchw_relaxed(int i) { 581 static std::set<int> ignore = {}; 582 return ignore.find(i) != ignore.end(); 583 } 584 585 void CreateModel_nchw_quant8(Model *model) { 586 OperandType type0(Type::BOOL, {}); 587 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.5f, 0); 588 OperandType type16(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 2}, 0.125f, 0); 589 OperandType type4(Type::INT32, {}); 590 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 591 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 592 // Phase 1, operands 593 auto op1 = model->addOperand(&type15); 594 auto op2 = model->addOperand(&type8); 595 auto op3 = model->addOperand(&type9); 596 auto param = model->addOperand(&type4); 597 auto param1 = model->addOperand(&type4); 598 auto param2 = model->addOperand(&type4); 599 auto param3 = model->addOperand(&type4); 600 auto param4 = model->addOperand(&type4); 601 auto param5 = model->addOperand(&type4); 602 auto param6 = model->addOperand(&type4); 603 auto layout = model->addOperand(&type0); 604 auto param7 = model->addOperand(&type4); 605 auto param8 = model->addOperand(&type4); 606 auto op4 = model->addOperand(&type16); 607 // Phase 2, operations 608 static uint8_t op2_init[] = {2, 2, 2, 2}; 609 model->setOperandValue(op2, op2_init, sizeof(uint8_t) * 4); 610 static int32_t op3_init[] = {0}; 611 model->setOperandValue(op3, op3_init, sizeof(int32_t) * 1); 612 static int32_t param_init[] = {0}; 613 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 614 static int32_t param1_init[] = {0}; 615 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 616 static int32_t param2_init[] = {0}; 617 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 618 static int32_t param3_init[] = {0}; 619 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 620 static int32_t param4_init[] = {1}; 621 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 622 static int32_t param5_init[] = {1}; 623 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 624 static int32_t param6_init[] = {0}; 625 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 626 static bool8 layout_init[] = {true}; 627 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 628 static int32_t param7_init[] = {1}; 629 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 630 static int32_t param8_init[] = {1}; 631 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 632 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 633 // Phase 3, inputs and outputs 634 model->identifyInputsAndOutputs( 635 {op1}, 636 {op4}); 637 assert(model->isValid()); 638 } 639 640 inline bool is_ignored_nchw_quant8(int i) { 641 static std::set<int> ignore = {}; 642 return ignore.find(i) != ignore.end(); 643 } 644 645 void CreateModel_nchw_float16(Model *model) { 646 OperandType type0(Type::BOOL, {}); 647 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 648 OperandType type12(Type::TENSOR_FLOAT16, {1}); 649 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 650 OperandType type18(Type::TENSOR_FLOAT16, {1, 1, 2, 2}); 651 OperandType type4(Type::INT32, {}); 652 // Phase 1, operands 653 auto op1 = model->addOperand(&type17); 654 auto op2 = model->addOperand(&type11); 655 auto op3 = model->addOperand(&type12); 656 auto param = model->addOperand(&type4); 657 auto param1 = model->addOperand(&type4); 658 auto param2 = model->addOperand(&type4); 659 auto param3 = model->addOperand(&type4); 660 auto param4 = model->addOperand(&type4); 661 auto param5 = model->addOperand(&type4); 662 auto param6 = model->addOperand(&type4); 663 auto layout = model->addOperand(&type0); 664 auto param7 = model->addOperand(&type4); 665 auto param8 = model->addOperand(&type4); 666 auto op4 = model->addOperand(&type18); 667 // Phase 2, operations 668 static _Float16 op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 669 model->setOperandValue(op2, op2_init, sizeof(_Float16) * 4); 670 static _Float16 op3_init[] = {0.0f}; 671 model->setOperandValue(op3, op3_init, sizeof(_Float16) * 1); 672 static int32_t param_init[] = {0}; 673 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 674 static int32_t param1_init[] = {0}; 675 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 676 static int32_t param2_init[] = {0}; 677 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 678 static int32_t param3_init[] = {0}; 679 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 680 static int32_t param4_init[] = {1}; 681 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 682 static int32_t param5_init[] = {1}; 683 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 684 static int32_t param6_init[] = {0}; 685 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 686 static bool8 layout_init[] = {true}; 687 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 688 static int32_t param7_init[] = {1}; 689 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 690 static int32_t param8_init[] = {1}; 691 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 692 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 693 // Phase 3, inputs and outputs 694 model->identifyInputsAndOutputs( 695 {op1}, 696 {op4}); 697 assert(model->isValid()); 698 } 699 700 inline bool is_ignored_nchw_float16(int i) { 701 static std::set<int> ignore = {}; 702 return ignore.find(i) != ignore.end(); 703 } 704 705 void CreateModel_nchw_weight_as_input(Model *model) { 706 OperandType type0(Type::BOOL, {}); 707 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 708 OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 2, 2}); 709 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 710 OperandType type3(Type::TENSOR_FLOAT32, {1}); 711 OperandType type4(Type::INT32, {}); 712 // Phase 1, operands 713 auto op1 = model->addOperand(&type13); 714 auto op2 = model->addOperand(&type2); 715 auto op3 = model->addOperand(&type3); 716 auto param = model->addOperand(&type4); 717 auto param1 = model->addOperand(&type4); 718 auto param2 = model->addOperand(&type4); 719 auto param3 = model->addOperand(&type4); 720 auto param4 = model->addOperand(&type4); 721 auto param5 = model->addOperand(&type4); 722 auto param6 = model->addOperand(&type4); 723 auto layout = model->addOperand(&type0); 724 auto param7 = model->addOperand(&type4); 725 auto param8 = model->addOperand(&type4); 726 auto op4 = model->addOperand(&type14); 727 // Phase 2, operations 728 static int32_t param_init[] = {0}; 729 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 730 static int32_t param1_init[] = {0}; 731 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 732 static int32_t param2_init[] = {0}; 733 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 734 static int32_t param3_init[] = {0}; 735 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 736 static int32_t param4_init[] = {1}; 737 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 738 static int32_t param5_init[] = {1}; 739 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 740 static int32_t param6_init[] = {0}; 741 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 742 static bool8 layout_init[] = {true}; 743 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 744 static int32_t param7_init[] = {1}; 745 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 746 static int32_t param8_init[] = {1}; 747 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 748 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 749 // Phase 3, inputs and outputs 750 model->identifyInputsAndOutputs( 751 {op1, op2, op3}, 752 {op4}); 753 assert(model->isValid()); 754 } 755 756 inline bool is_ignored_nchw_weight_as_input(int i) { 757 static std::set<int> ignore = {}; 758 return ignore.find(i) != ignore.end(); 759 } 760 761 void CreateModel_nchw_weight_as_input_relaxed(Model *model) { 762 OperandType type0(Type::BOOL, {}); 763 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 764 OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 2, 2}); 765 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 766 OperandType type3(Type::TENSOR_FLOAT32, {1}); 767 OperandType type4(Type::INT32, {}); 768 // Phase 1, operands 769 auto op1 = model->addOperand(&type13); 770 auto op2 = model->addOperand(&type2); 771 auto op3 = model->addOperand(&type3); 772 auto param = model->addOperand(&type4); 773 auto param1 = model->addOperand(&type4); 774 auto param2 = model->addOperand(&type4); 775 auto param3 = model->addOperand(&type4); 776 auto param4 = model->addOperand(&type4); 777 auto param5 = model->addOperand(&type4); 778 auto param6 = model->addOperand(&type4); 779 auto layout = model->addOperand(&type0); 780 auto param7 = model->addOperand(&type4); 781 auto param8 = model->addOperand(&type4); 782 auto op4 = model->addOperand(&type14); 783 // Phase 2, operations 784 static int32_t param_init[] = {0}; 785 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 786 static int32_t param1_init[] = {0}; 787 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 788 static int32_t param2_init[] = {0}; 789 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 790 static int32_t param3_init[] = {0}; 791 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 792 static int32_t param4_init[] = {1}; 793 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 794 static int32_t param5_init[] = {1}; 795 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 796 static int32_t param6_init[] = {0}; 797 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 798 static bool8 layout_init[] = {true}; 799 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 800 static int32_t param7_init[] = {1}; 801 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 802 static int32_t param8_init[] = {1}; 803 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 804 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 805 // Phase 3, inputs and outputs 806 model->identifyInputsAndOutputs( 807 {op1, op2, op3}, 808 {op4}); 809 // Phase 4: set relaxed execution 810 model->relaxComputationFloat32toFloat16(true); 811 assert(model->isValid()); 812 } 813 814 inline bool is_ignored_nchw_weight_as_input_relaxed(int i) { 815 static std::set<int> ignore = {}; 816 return ignore.find(i) != ignore.end(); 817 } 818 819 void CreateModel_nchw_weight_as_input_quant8(Model *model) { 820 OperandType type0(Type::BOOL, {}); 821 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.5f, 0); 822 OperandType type16(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 2}, 0.125f, 0); 823 OperandType type4(Type::INT32, {}); 824 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 825 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 826 // Phase 1, operands 827 auto op1 = model->addOperand(&type15); 828 auto op2 = model->addOperand(&type8); 829 auto op3 = model->addOperand(&type9); 830 auto param = model->addOperand(&type4); 831 auto param1 = model->addOperand(&type4); 832 auto param2 = model->addOperand(&type4); 833 auto param3 = model->addOperand(&type4); 834 auto param4 = model->addOperand(&type4); 835 auto param5 = model->addOperand(&type4); 836 auto param6 = model->addOperand(&type4); 837 auto layout = model->addOperand(&type0); 838 auto param7 = model->addOperand(&type4); 839 auto param8 = model->addOperand(&type4); 840 auto op4 = model->addOperand(&type16); 841 // Phase 2, operations 842 static int32_t param_init[] = {0}; 843 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 844 static int32_t param1_init[] = {0}; 845 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 846 static int32_t param2_init[] = {0}; 847 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 848 static int32_t param3_init[] = {0}; 849 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 850 static int32_t param4_init[] = {1}; 851 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 852 static int32_t param5_init[] = {1}; 853 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 854 static int32_t param6_init[] = {0}; 855 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 856 static bool8 layout_init[] = {true}; 857 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 858 static int32_t param7_init[] = {1}; 859 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 860 static int32_t param8_init[] = {1}; 861 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 862 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 863 // Phase 3, inputs and outputs 864 model->identifyInputsAndOutputs( 865 {op1, op2, op3}, 866 {op4}); 867 assert(model->isValid()); 868 } 869 870 inline bool is_ignored_nchw_weight_as_input_quant8(int i) { 871 static std::set<int> ignore = {}; 872 return ignore.find(i) != ignore.end(); 873 } 874 875 void CreateModel_nchw_weight_as_input_float16(Model *model) { 876 OperandType type0(Type::BOOL, {}); 877 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 878 OperandType type12(Type::TENSOR_FLOAT16, {1}); 879 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 880 OperandType type18(Type::TENSOR_FLOAT16, {1, 1, 2, 2}); 881 OperandType type4(Type::INT32, {}); 882 // Phase 1, operands 883 auto op1 = model->addOperand(&type17); 884 auto op2 = model->addOperand(&type11); 885 auto op3 = model->addOperand(&type12); 886 auto param = model->addOperand(&type4); 887 auto param1 = model->addOperand(&type4); 888 auto param2 = model->addOperand(&type4); 889 auto param3 = model->addOperand(&type4); 890 auto param4 = model->addOperand(&type4); 891 auto param5 = model->addOperand(&type4); 892 auto param6 = model->addOperand(&type4); 893 auto layout = model->addOperand(&type0); 894 auto param7 = model->addOperand(&type4); 895 auto param8 = model->addOperand(&type4); 896 auto op4 = model->addOperand(&type18); 897 // Phase 2, operations 898 static int32_t param_init[] = {0}; 899 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 900 static int32_t param1_init[] = {0}; 901 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 902 static int32_t param2_init[] = {0}; 903 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 904 static int32_t param3_init[] = {0}; 905 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 906 static int32_t param4_init[] = {1}; 907 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 908 static int32_t param5_init[] = {1}; 909 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 910 static int32_t param6_init[] = {0}; 911 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 912 static bool8 layout_init[] = {true}; 913 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 914 static int32_t param7_init[] = {1}; 915 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 916 static int32_t param8_init[] = {1}; 917 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 918 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 919 // Phase 3, inputs and outputs 920 model->identifyInputsAndOutputs( 921 {op1, op2, op3}, 922 {op4}); 923 assert(model->isValid()); 924 } 925 926 inline bool is_ignored_nchw_weight_as_input_float16(int i) { 927 static std::set<int> ignore = {}; 928 return ignore.find(i) != ignore.end(); 929 } 930 931 void CreateModel_dynamic_output_shape_nhwc(Model *model) { 932 OperandType type0(Type::BOOL, {}); 933 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 934 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 935 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 936 OperandType type3(Type::TENSOR_FLOAT32, {1}); 937 OperandType type4(Type::INT32, {}); 938 // Phase 1, operands 939 auto op1 = model->addOperand(&type1); 940 auto op2 = model->addOperand(&type2); 941 auto op3 = model->addOperand(&type3); 942 auto param = model->addOperand(&type4); 943 auto param1 = model->addOperand(&type4); 944 auto param2 = model->addOperand(&type4); 945 auto param3 = model->addOperand(&type4); 946 auto param4 = model->addOperand(&type4); 947 auto param5 = model->addOperand(&type4); 948 auto param6 = model->addOperand(&type4); 949 auto layout = model->addOperand(&type0); 950 auto param7 = model->addOperand(&type4); 951 auto param8 = model->addOperand(&type4); 952 auto op4 = model->addOperand(&type19); 953 // Phase 2, operations 954 static float op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 955 model->setOperandValue(op2, op2_init, sizeof(float) * 4); 956 static float op3_init[] = {0.0f}; 957 model->setOperandValue(op3, op3_init, sizeof(float) * 1); 958 static int32_t param_init[] = {0}; 959 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 960 static int32_t param1_init[] = {0}; 961 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 962 static int32_t param2_init[] = {0}; 963 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 964 static int32_t param3_init[] = {0}; 965 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 966 static int32_t param4_init[] = {1}; 967 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 968 static int32_t param5_init[] = {1}; 969 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 970 static int32_t param6_init[] = {0}; 971 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 972 static bool8 layout_init[] = {false}; 973 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 974 static int32_t param7_init[] = {1}; 975 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 976 static int32_t param8_init[] = {1}; 977 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 978 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 979 // Phase 3, inputs and outputs 980 model->identifyInputsAndOutputs( 981 {op1}, 982 {op4}); 983 assert(model->isValid()); 984 } 985 986 inline bool is_ignored_dynamic_output_shape_nhwc(int i) { 987 static std::set<int> ignore = {}; 988 return ignore.find(i) != ignore.end(); 989 } 990 991 void CreateModel_dynamic_output_shape_nhwc_relaxed(Model *model) { 992 OperandType type0(Type::BOOL, {}); 993 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 994 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 995 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 996 OperandType type3(Type::TENSOR_FLOAT32, {1}); 997 OperandType type4(Type::INT32, {}); 998 // Phase 1, operands 999 auto op1 = model->addOperand(&type1); 1000 auto op2 = model->addOperand(&type2); 1001 auto op3 = model->addOperand(&type3); 1002 auto param = model->addOperand(&type4); 1003 auto param1 = model->addOperand(&type4); 1004 auto param2 = model->addOperand(&type4); 1005 auto param3 = model->addOperand(&type4); 1006 auto param4 = model->addOperand(&type4); 1007 auto param5 = model->addOperand(&type4); 1008 auto param6 = model->addOperand(&type4); 1009 auto layout = model->addOperand(&type0); 1010 auto param7 = model->addOperand(&type4); 1011 auto param8 = model->addOperand(&type4); 1012 auto op4 = model->addOperand(&type19); 1013 // Phase 2, operations 1014 static float op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 1015 model->setOperandValue(op2, op2_init, sizeof(float) * 4); 1016 static float op3_init[] = {0.0f}; 1017 model->setOperandValue(op3, op3_init, sizeof(float) * 1); 1018 static int32_t param_init[] = {0}; 1019 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1020 static int32_t param1_init[] = {0}; 1021 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1022 static int32_t param2_init[] = {0}; 1023 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1024 static int32_t param3_init[] = {0}; 1025 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1026 static int32_t param4_init[] = {1}; 1027 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1028 static int32_t param5_init[] = {1}; 1029 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1030 static int32_t param6_init[] = {0}; 1031 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1032 static bool8 layout_init[] = {false}; 1033 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1034 static int32_t param7_init[] = {1}; 1035 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1036 static int32_t param8_init[] = {1}; 1037 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1038 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1039 // Phase 3, inputs and outputs 1040 model->identifyInputsAndOutputs( 1041 {op1}, 1042 {op4}); 1043 // Phase 4: set relaxed execution 1044 model->relaxComputationFloat32toFloat16(true); 1045 assert(model->isValid()); 1046 } 1047 1048 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed(int i) { 1049 static std::set<int> ignore = {}; 1050 return ignore.find(i) != ignore.end(); 1051 } 1052 1053 void CreateModel_dynamic_output_shape_nhwc_quant8(Model *model) { 1054 OperandType type0(Type::BOOL, {}); 1055 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 1056 OperandType type4(Type::INT32, {}); 1057 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.5f, 0); 1058 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 1059 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 1060 // Phase 1, operands 1061 auto op1 = model->addOperand(&type7); 1062 auto op2 = model->addOperand(&type8); 1063 auto op3 = model->addOperand(&type9); 1064 auto param = model->addOperand(&type4); 1065 auto param1 = model->addOperand(&type4); 1066 auto param2 = model->addOperand(&type4); 1067 auto param3 = model->addOperand(&type4); 1068 auto param4 = model->addOperand(&type4); 1069 auto param5 = model->addOperand(&type4); 1070 auto param6 = model->addOperand(&type4); 1071 auto layout = model->addOperand(&type0); 1072 auto param7 = model->addOperand(&type4); 1073 auto param8 = model->addOperand(&type4); 1074 auto op4 = model->addOperand(&type20); 1075 // Phase 2, operations 1076 static uint8_t op2_init[] = {2, 2, 2, 2}; 1077 model->setOperandValue(op2, op2_init, sizeof(uint8_t) * 4); 1078 static int32_t op3_init[] = {0}; 1079 model->setOperandValue(op3, op3_init, sizeof(int32_t) * 1); 1080 static int32_t param_init[] = {0}; 1081 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1082 static int32_t param1_init[] = {0}; 1083 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1084 static int32_t param2_init[] = {0}; 1085 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1086 static int32_t param3_init[] = {0}; 1087 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1088 static int32_t param4_init[] = {1}; 1089 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1090 static int32_t param5_init[] = {1}; 1091 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1092 static int32_t param6_init[] = {0}; 1093 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1094 static bool8 layout_init[] = {false}; 1095 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1096 static int32_t param7_init[] = {1}; 1097 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1098 static int32_t param8_init[] = {1}; 1099 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1100 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1101 // Phase 3, inputs and outputs 1102 model->identifyInputsAndOutputs( 1103 {op1}, 1104 {op4}); 1105 assert(model->isValid()); 1106 } 1107 1108 inline bool is_ignored_dynamic_output_shape_nhwc_quant8(int i) { 1109 static std::set<int> ignore = {}; 1110 return ignore.find(i) != ignore.end(); 1111 } 1112 1113 void CreateModel_dynamic_output_shape_nhwc_float16(Model *model) { 1114 OperandType type0(Type::BOOL, {}); 1115 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 1116 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 1117 OperandType type12(Type::TENSOR_FLOAT16, {1}); 1118 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 1119 OperandType type4(Type::INT32, {}); 1120 // Phase 1, operands 1121 auto op1 = model->addOperand(&type10); 1122 auto op2 = model->addOperand(&type11); 1123 auto op3 = model->addOperand(&type12); 1124 auto param = model->addOperand(&type4); 1125 auto param1 = model->addOperand(&type4); 1126 auto param2 = model->addOperand(&type4); 1127 auto param3 = model->addOperand(&type4); 1128 auto param4 = model->addOperand(&type4); 1129 auto param5 = model->addOperand(&type4); 1130 auto param6 = model->addOperand(&type4); 1131 auto layout = model->addOperand(&type0); 1132 auto param7 = model->addOperand(&type4); 1133 auto param8 = model->addOperand(&type4); 1134 auto op4 = model->addOperand(&type21); 1135 // Phase 2, operations 1136 static _Float16 op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 1137 model->setOperandValue(op2, op2_init, sizeof(_Float16) * 4); 1138 static _Float16 op3_init[] = {0.0f}; 1139 model->setOperandValue(op3, op3_init, sizeof(_Float16) * 1); 1140 static int32_t param_init[] = {0}; 1141 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1142 static int32_t param1_init[] = {0}; 1143 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1144 static int32_t param2_init[] = {0}; 1145 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1146 static int32_t param3_init[] = {0}; 1147 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1148 static int32_t param4_init[] = {1}; 1149 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1150 static int32_t param5_init[] = {1}; 1151 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1152 static int32_t param6_init[] = {0}; 1153 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1154 static bool8 layout_init[] = {false}; 1155 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1156 static int32_t param7_init[] = {1}; 1157 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1158 static int32_t param8_init[] = {1}; 1159 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1160 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1161 // Phase 3, inputs and outputs 1162 model->identifyInputsAndOutputs( 1163 {op1}, 1164 {op4}); 1165 assert(model->isValid()); 1166 } 1167 1168 inline bool is_ignored_dynamic_output_shape_nhwc_float16(int i) { 1169 static std::set<int> ignore = {}; 1170 return ignore.find(i) != ignore.end(); 1171 } 1172 1173 void CreateModel_dynamic_output_shape_nhwc_weight_as_input(Model *model) { 1174 OperandType type0(Type::BOOL, {}); 1175 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 1176 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1177 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 1178 OperandType type3(Type::TENSOR_FLOAT32, {1}); 1179 OperandType type4(Type::INT32, {}); 1180 // Phase 1, operands 1181 auto op1 = model->addOperand(&type1); 1182 auto op2 = model->addOperand(&type2); 1183 auto op3 = model->addOperand(&type3); 1184 auto param = model->addOperand(&type4); 1185 auto param1 = model->addOperand(&type4); 1186 auto param2 = model->addOperand(&type4); 1187 auto param3 = model->addOperand(&type4); 1188 auto param4 = model->addOperand(&type4); 1189 auto param5 = model->addOperand(&type4); 1190 auto param6 = model->addOperand(&type4); 1191 auto layout = model->addOperand(&type0); 1192 auto param7 = model->addOperand(&type4); 1193 auto param8 = model->addOperand(&type4); 1194 auto op4 = model->addOperand(&type19); 1195 // Phase 2, operations 1196 static int32_t param_init[] = {0}; 1197 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1198 static int32_t param1_init[] = {0}; 1199 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1200 static int32_t param2_init[] = {0}; 1201 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1202 static int32_t param3_init[] = {0}; 1203 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1204 static int32_t param4_init[] = {1}; 1205 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1206 static int32_t param5_init[] = {1}; 1207 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1208 static int32_t param6_init[] = {0}; 1209 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1210 static bool8 layout_init[] = {false}; 1211 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1212 static int32_t param7_init[] = {1}; 1213 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1214 static int32_t param8_init[] = {1}; 1215 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1216 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1217 // Phase 3, inputs and outputs 1218 model->identifyInputsAndOutputs( 1219 {op1, op2, op3}, 1220 {op4}); 1221 assert(model->isValid()); 1222 } 1223 1224 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input(int i) { 1225 static std::set<int> ignore = {}; 1226 return ignore.find(i) != ignore.end(); 1227 } 1228 1229 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_relaxed(Model *model) { 1230 OperandType type0(Type::BOOL, {}); 1231 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 1232 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1233 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 1234 OperandType type3(Type::TENSOR_FLOAT32, {1}); 1235 OperandType type4(Type::INT32, {}); 1236 // Phase 1, operands 1237 auto op1 = model->addOperand(&type1); 1238 auto op2 = model->addOperand(&type2); 1239 auto op3 = model->addOperand(&type3); 1240 auto param = model->addOperand(&type4); 1241 auto param1 = model->addOperand(&type4); 1242 auto param2 = model->addOperand(&type4); 1243 auto param3 = model->addOperand(&type4); 1244 auto param4 = model->addOperand(&type4); 1245 auto param5 = model->addOperand(&type4); 1246 auto param6 = model->addOperand(&type4); 1247 auto layout = model->addOperand(&type0); 1248 auto param7 = model->addOperand(&type4); 1249 auto param8 = model->addOperand(&type4); 1250 auto op4 = model->addOperand(&type19); 1251 // Phase 2, operations 1252 static int32_t param_init[] = {0}; 1253 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1254 static int32_t param1_init[] = {0}; 1255 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1256 static int32_t param2_init[] = {0}; 1257 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1258 static int32_t param3_init[] = {0}; 1259 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1260 static int32_t param4_init[] = {1}; 1261 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1262 static int32_t param5_init[] = {1}; 1263 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1264 static int32_t param6_init[] = {0}; 1265 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1266 static bool8 layout_init[] = {false}; 1267 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1268 static int32_t param7_init[] = {1}; 1269 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1270 static int32_t param8_init[] = {1}; 1271 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1272 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1273 // Phase 3, inputs and outputs 1274 model->identifyInputsAndOutputs( 1275 {op1, op2, op3}, 1276 {op4}); 1277 // Phase 4: set relaxed execution 1278 model->relaxComputationFloat32toFloat16(true); 1279 assert(model->isValid()); 1280 } 1281 1282 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_relaxed(int i) { 1283 static std::set<int> ignore = {}; 1284 return ignore.find(i) != ignore.end(); 1285 } 1286 1287 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_quant8(Model *model) { 1288 OperandType type0(Type::BOOL, {}); 1289 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 1290 OperandType type4(Type::INT32, {}); 1291 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.5f, 0); 1292 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 1293 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 1294 // Phase 1, operands 1295 auto op1 = model->addOperand(&type7); 1296 auto op2 = model->addOperand(&type8); 1297 auto op3 = model->addOperand(&type9); 1298 auto param = model->addOperand(&type4); 1299 auto param1 = model->addOperand(&type4); 1300 auto param2 = model->addOperand(&type4); 1301 auto param3 = model->addOperand(&type4); 1302 auto param4 = model->addOperand(&type4); 1303 auto param5 = model->addOperand(&type4); 1304 auto param6 = model->addOperand(&type4); 1305 auto layout = model->addOperand(&type0); 1306 auto param7 = model->addOperand(&type4); 1307 auto param8 = model->addOperand(&type4); 1308 auto op4 = model->addOperand(&type20); 1309 // Phase 2, operations 1310 static int32_t param_init[] = {0}; 1311 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1312 static int32_t param1_init[] = {0}; 1313 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1314 static int32_t param2_init[] = {0}; 1315 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1316 static int32_t param3_init[] = {0}; 1317 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1318 static int32_t param4_init[] = {1}; 1319 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1320 static int32_t param5_init[] = {1}; 1321 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1322 static int32_t param6_init[] = {0}; 1323 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1324 static bool8 layout_init[] = {false}; 1325 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1326 static int32_t param7_init[] = {1}; 1327 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1328 static int32_t param8_init[] = {1}; 1329 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1330 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1331 // Phase 3, inputs and outputs 1332 model->identifyInputsAndOutputs( 1333 {op1, op2, op3}, 1334 {op4}); 1335 assert(model->isValid()); 1336 } 1337 1338 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_quant8(int i) { 1339 static std::set<int> ignore = {}; 1340 return ignore.find(i) != ignore.end(); 1341 } 1342 1343 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_float16(Model *model) { 1344 OperandType type0(Type::BOOL, {}); 1345 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 1346 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 1347 OperandType type12(Type::TENSOR_FLOAT16, {1}); 1348 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 1349 OperandType type4(Type::INT32, {}); 1350 // Phase 1, operands 1351 auto op1 = model->addOperand(&type10); 1352 auto op2 = model->addOperand(&type11); 1353 auto op3 = model->addOperand(&type12); 1354 auto param = model->addOperand(&type4); 1355 auto param1 = model->addOperand(&type4); 1356 auto param2 = model->addOperand(&type4); 1357 auto param3 = model->addOperand(&type4); 1358 auto param4 = model->addOperand(&type4); 1359 auto param5 = model->addOperand(&type4); 1360 auto param6 = model->addOperand(&type4); 1361 auto layout = model->addOperand(&type0); 1362 auto param7 = model->addOperand(&type4); 1363 auto param8 = model->addOperand(&type4); 1364 auto op4 = model->addOperand(&type21); 1365 // Phase 2, operations 1366 static int32_t param_init[] = {0}; 1367 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1368 static int32_t param1_init[] = {0}; 1369 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1370 static int32_t param2_init[] = {0}; 1371 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1372 static int32_t param3_init[] = {0}; 1373 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1374 static int32_t param4_init[] = {1}; 1375 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1376 static int32_t param5_init[] = {1}; 1377 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1378 static int32_t param6_init[] = {0}; 1379 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1380 static bool8 layout_init[] = {false}; 1381 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1382 static int32_t param7_init[] = {1}; 1383 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1384 static int32_t param8_init[] = {1}; 1385 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1386 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1387 // Phase 3, inputs and outputs 1388 model->identifyInputsAndOutputs( 1389 {op1, op2, op3}, 1390 {op4}); 1391 assert(model->isValid()); 1392 } 1393 1394 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_float16(int i) { 1395 static std::set<int> ignore = {}; 1396 return ignore.find(i) != ignore.end(); 1397 } 1398 1399 void CreateModel_dynamic_output_shape_nchw(Model *model) { 1400 OperandType type0(Type::BOOL, {}); 1401 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 1402 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1403 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 1404 OperandType type3(Type::TENSOR_FLOAT32, {1}); 1405 OperandType type4(Type::INT32, {}); 1406 // Phase 1, operands 1407 auto op1 = model->addOperand(&type13); 1408 auto op2 = model->addOperand(&type2); 1409 auto op3 = model->addOperand(&type3); 1410 auto param = model->addOperand(&type4); 1411 auto param1 = model->addOperand(&type4); 1412 auto param2 = model->addOperand(&type4); 1413 auto param3 = model->addOperand(&type4); 1414 auto param4 = model->addOperand(&type4); 1415 auto param5 = model->addOperand(&type4); 1416 auto param6 = model->addOperand(&type4); 1417 auto layout = model->addOperand(&type0); 1418 auto param7 = model->addOperand(&type4); 1419 auto param8 = model->addOperand(&type4); 1420 auto op4 = model->addOperand(&type19); 1421 // Phase 2, operations 1422 static float op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 1423 model->setOperandValue(op2, op2_init, sizeof(float) * 4); 1424 static float op3_init[] = {0.0f}; 1425 model->setOperandValue(op3, op3_init, sizeof(float) * 1); 1426 static int32_t param_init[] = {0}; 1427 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1428 static int32_t param1_init[] = {0}; 1429 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1430 static int32_t param2_init[] = {0}; 1431 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1432 static int32_t param3_init[] = {0}; 1433 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1434 static int32_t param4_init[] = {1}; 1435 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1436 static int32_t param5_init[] = {1}; 1437 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1438 static int32_t param6_init[] = {0}; 1439 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1440 static bool8 layout_init[] = {true}; 1441 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1442 static int32_t param7_init[] = {1}; 1443 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1444 static int32_t param8_init[] = {1}; 1445 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1446 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1447 // Phase 3, inputs and outputs 1448 model->identifyInputsAndOutputs( 1449 {op1}, 1450 {op4}); 1451 assert(model->isValid()); 1452 } 1453 1454 inline bool is_ignored_dynamic_output_shape_nchw(int i) { 1455 static std::set<int> ignore = {}; 1456 return ignore.find(i) != ignore.end(); 1457 } 1458 1459 void CreateModel_dynamic_output_shape_nchw_relaxed(Model *model) { 1460 OperandType type0(Type::BOOL, {}); 1461 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 1462 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1463 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 1464 OperandType type3(Type::TENSOR_FLOAT32, {1}); 1465 OperandType type4(Type::INT32, {}); 1466 // Phase 1, operands 1467 auto op1 = model->addOperand(&type13); 1468 auto op2 = model->addOperand(&type2); 1469 auto op3 = model->addOperand(&type3); 1470 auto param = model->addOperand(&type4); 1471 auto param1 = model->addOperand(&type4); 1472 auto param2 = model->addOperand(&type4); 1473 auto param3 = model->addOperand(&type4); 1474 auto param4 = model->addOperand(&type4); 1475 auto param5 = model->addOperand(&type4); 1476 auto param6 = model->addOperand(&type4); 1477 auto layout = model->addOperand(&type0); 1478 auto param7 = model->addOperand(&type4); 1479 auto param8 = model->addOperand(&type4); 1480 auto op4 = model->addOperand(&type19); 1481 // Phase 2, operations 1482 static float op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 1483 model->setOperandValue(op2, op2_init, sizeof(float) * 4); 1484 static float op3_init[] = {0.0f}; 1485 model->setOperandValue(op3, op3_init, sizeof(float) * 1); 1486 static int32_t param_init[] = {0}; 1487 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1488 static int32_t param1_init[] = {0}; 1489 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1490 static int32_t param2_init[] = {0}; 1491 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1492 static int32_t param3_init[] = {0}; 1493 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1494 static int32_t param4_init[] = {1}; 1495 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1496 static int32_t param5_init[] = {1}; 1497 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1498 static int32_t param6_init[] = {0}; 1499 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1500 static bool8 layout_init[] = {true}; 1501 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1502 static int32_t param7_init[] = {1}; 1503 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1504 static int32_t param8_init[] = {1}; 1505 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1506 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1507 // Phase 3, inputs and outputs 1508 model->identifyInputsAndOutputs( 1509 {op1}, 1510 {op4}); 1511 // Phase 4: set relaxed execution 1512 model->relaxComputationFloat32toFloat16(true); 1513 assert(model->isValid()); 1514 } 1515 1516 inline bool is_ignored_dynamic_output_shape_nchw_relaxed(int i) { 1517 static std::set<int> ignore = {}; 1518 return ignore.find(i) != ignore.end(); 1519 } 1520 1521 void CreateModel_dynamic_output_shape_nchw_quant8(Model *model) { 1522 OperandType type0(Type::BOOL, {}); 1523 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.5f, 0); 1524 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 1525 OperandType type4(Type::INT32, {}); 1526 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 1527 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 1528 // Phase 1, operands 1529 auto op1 = model->addOperand(&type15); 1530 auto op2 = model->addOperand(&type8); 1531 auto op3 = model->addOperand(&type9); 1532 auto param = model->addOperand(&type4); 1533 auto param1 = model->addOperand(&type4); 1534 auto param2 = model->addOperand(&type4); 1535 auto param3 = model->addOperand(&type4); 1536 auto param4 = model->addOperand(&type4); 1537 auto param5 = model->addOperand(&type4); 1538 auto param6 = model->addOperand(&type4); 1539 auto layout = model->addOperand(&type0); 1540 auto param7 = model->addOperand(&type4); 1541 auto param8 = model->addOperand(&type4); 1542 auto op4 = model->addOperand(&type20); 1543 // Phase 2, operations 1544 static uint8_t op2_init[] = {2, 2, 2, 2}; 1545 model->setOperandValue(op2, op2_init, sizeof(uint8_t) * 4); 1546 static int32_t op3_init[] = {0}; 1547 model->setOperandValue(op3, op3_init, sizeof(int32_t) * 1); 1548 static int32_t param_init[] = {0}; 1549 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1550 static int32_t param1_init[] = {0}; 1551 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1552 static int32_t param2_init[] = {0}; 1553 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1554 static int32_t param3_init[] = {0}; 1555 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1556 static int32_t param4_init[] = {1}; 1557 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1558 static int32_t param5_init[] = {1}; 1559 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1560 static int32_t param6_init[] = {0}; 1561 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1562 static bool8 layout_init[] = {true}; 1563 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1564 static int32_t param7_init[] = {1}; 1565 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1566 static int32_t param8_init[] = {1}; 1567 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1568 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1569 // Phase 3, inputs and outputs 1570 model->identifyInputsAndOutputs( 1571 {op1}, 1572 {op4}); 1573 assert(model->isValid()); 1574 } 1575 1576 inline bool is_ignored_dynamic_output_shape_nchw_quant8(int i) { 1577 static std::set<int> ignore = {}; 1578 return ignore.find(i) != ignore.end(); 1579 } 1580 1581 void CreateModel_dynamic_output_shape_nchw_float16(Model *model) { 1582 OperandType type0(Type::BOOL, {}); 1583 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 1584 OperandType type12(Type::TENSOR_FLOAT16, {1}); 1585 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 1586 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 1587 OperandType type4(Type::INT32, {}); 1588 // Phase 1, operands 1589 auto op1 = model->addOperand(&type17); 1590 auto op2 = model->addOperand(&type11); 1591 auto op3 = model->addOperand(&type12); 1592 auto param = model->addOperand(&type4); 1593 auto param1 = model->addOperand(&type4); 1594 auto param2 = model->addOperand(&type4); 1595 auto param3 = model->addOperand(&type4); 1596 auto param4 = model->addOperand(&type4); 1597 auto param5 = model->addOperand(&type4); 1598 auto param6 = model->addOperand(&type4); 1599 auto layout = model->addOperand(&type0); 1600 auto param7 = model->addOperand(&type4); 1601 auto param8 = model->addOperand(&type4); 1602 auto op4 = model->addOperand(&type21); 1603 // Phase 2, operations 1604 static _Float16 op2_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 1605 model->setOperandValue(op2, op2_init, sizeof(_Float16) * 4); 1606 static _Float16 op3_init[] = {0.0f}; 1607 model->setOperandValue(op3, op3_init, sizeof(_Float16) * 1); 1608 static int32_t param_init[] = {0}; 1609 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1610 static int32_t param1_init[] = {0}; 1611 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1612 static int32_t param2_init[] = {0}; 1613 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1614 static int32_t param3_init[] = {0}; 1615 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1616 static int32_t param4_init[] = {1}; 1617 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1618 static int32_t param5_init[] = {1}; 1619 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1620 static int32_t param6_init[] = {0}; 1621 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1622 static bool8 layout_init[] = {true}; 1623 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1624 static int32_t param7_init[] = {1}; 1625 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1626 static int32_t param8_init[] = {1}; 1627 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1628 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1629 // Phase 3, inputs and outputs 1630 model->identifyInputsAndOutputs( 1631 {op1}, 1632 {op4}); 1633 assert(model->isValid()); 1634 } 1635 1636 inline bool is_ignored_dynamic_output_shape_nchw_float16(int i) { 1637 static std::set<int> ignore = {}; 1638 return ignore.find(i) != ignore.end(); 1639 } 1640 1641 void CreateModel_dynamic_output_shape_nchw_weight_as_input(Model *model) { 1642 OperandType type0(Type::BOOL, {}); 1643 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 1644 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1645 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 1646 OperandType type3(Type::TENSOR_FLOAT32, {1}); 1647 OperandType type4(Type::INT32, {}); 1648 // Phase 1, operands 1649 auto op1 = model->addOperand(&type13); 1650 auto op2 = model->addOperand(&type2); 1651 auto op3 = model->addOperand(&type3); 1652 auto param = model->addOperand(&type4); 1653 auto param1 = model->addOperand(&type4); 1654 auto param2 = model->addOperand(&type4); 1655 auto param3 = model->addOperand(&type4); 1656 auto param4 = model->addOperand(&type4); 1657 auto param5 = model->addOperand(&type4); 1658 auto param6 = model->addOperand(&type4); 1659 auto layout = model->addOperand(&type0); 1660 auto param7 = model->addOperand(&type4); 1661 auto param8 = model->addOperand(&type4); 1662 auto op4 = model->addOperand(&type19); 1663 // Phase 2, operations 1664 static int32_t param_init[] = {0}; 1665 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1666 static int32_t param1_init[] = {0}; 1667 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1668 static int32_t param2_init[] = {0}; 1669 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1670 static int32_t param3_init[] = {0}; 1671 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1672 static int32_t param4_init[] = {1}; 1673 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1674 static int32_t param5_init[] = {1}; 1675 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1676 static int32_t param6_init[] = {0}; 1677 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1678 static bool8 layout_init[] = {true}; 1679 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1680 static int32_t param7_init[] = {1}; 1681 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1682 static int32_t param8_init[] = {1}; 1683 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1684 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1685 // Phase 3, inputs and outputs 1686 model->identifyInputsAndOutputs( 1687 {op1, op2, op3}, 1688 {op4}); 1689 assert(model->isValid()); 1690 } 1691 1692 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input(int i) { 1693 static std::set<int> ignore = {}; 1694 return ignore.find(i) != ignore.end(); 1695 } 1696 1697 void CreateModel_dynamic_output_shape_nchw_weight_as_input_relaxed(Model *model) { 1698 OperandType type0(Type::BOOL, {}); 1699 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 1700 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1701 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 1702 OperandType type3(Type::TENSOR_FLOAT32, {1}); 1703 OperandType type4(Type::INT32, {}); 1704 // Phase 1, operands 1705 auto op1 = model->addOperand(&type13); 1706 auto op2 = model->addOperand(&type2); 1707 auto op3 = model->addOperand(&type3); 1708 auto param = model->addOperand(&type4); 1709 auto param1 = model->addOperand(&type4); 1710 auto param2 = model->addOperand(&type4); 1711 auto param3 = model->addOperand(&type4); 1712 auto param4 = model->addOperand(&type4); 1713 auto param5 = model->addOperand(&type4); 1714 auto param6 = model->addOperand(&type4); 1715 auto layout = model->addOperand(&type0); 1716 auto param7 = model->addOperand(&type4); 1717 auto param8 = model->addOperand(&type4); 1718 auto op4 = model->addOperand(&type19); 1719 // Phase 2, operations 1720 static int32_t param_init[] = {0}; 1721 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1722 static int32_t param1_init[] = {0}; 1723 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1724 static int32_t param2_init[] = {0}; 1725 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1726 static int32_t param3_init[] = {0}; 1727 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1728 static int32_t param4_init[] = {1}; 1729 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1730 static int32_t param5_init[] = {1}; 1731 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1732 static int32_t param6_init[] = {0}; 1733 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1734 static bool8 layout_init[] = {true}; 1735 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1736 static int32_t param7_init[] = {1}; 1737 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1738 static int32_t param8_init[] = {1}; 1739 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1740 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1741 // Phase 3, inputs and outputs 1742 model->identifyInputsAndOutputs( 1743 {op1, op2, op3}, 1744 {op4}); 1745 // Phase 4: set relaxed execution 1746 model->relaxComputationFloat32toFloat16(true); 1747 assert(model->isValid()); 1748 } 1749 1750 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_relaxed(int i) { 1751 static std::set<int> ignore = {}; 1752 return ignore.find(i) != ignore.end(); 1753 } 1754 1755 void CreateModel_dynamic_output_shape_nchw_weight_as_input_quant8(Model *model) { 1756 OperandType type0(Type::BOOL, {}); 1757 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.5f, 0); 1758 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 1759 OperandType type4(Type::INT32, {}); 1760 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 1761 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 1762 // Phase 1, operands 1763 auto op1 = model->addOperand(&type15); 1764 auto op2 = model->addOperand(&type8); 1765 auto op3 = model->addOperand(&type9); 1766 auto param = model->addOperand(&type4); 1767 auto param1 = model->addOperand(&type4); 1768 auto param2 = model->addOperand(&type4); 1769 auto param3 = model->addOperand(&type4); 1770 auto param4 = model->addOperand(&type4); 1771 auto param5 = model->addOperand(&type4); 1772 auto param6 = model->addOperand(&type4); 1773 auto layout = model->addOperand(&type0); 1774 auto param7 = model->addOperand(&type4); 1775 auto param8 = model->addOperand(&type4); 1776 auto op4 = model->addOperand(&type20); 1777 // Phase 2, operations 1778 static int32_t param_init[] = {0}; 1779 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1780 static int32_t param1_init[] = {0}; 1781 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1782 static int32_t param2_init[] = {0}; 1783 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1784 static int32_t param3_init[] = {0}; 1785 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1786 static int32_t param4_init[] = {1}; 1787 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1788 static int32_t param5_init[] = {1}; 1789 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1790 static int32_t param6_init[] = {0}; 1791 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1792 static bool8 layout_init[] = {true}; 1793 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1794 static int32_t param7_init[] = {1}; 1795 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1796 static int32_t param8_init[] = {1}; 1797 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1798 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1799 // Phase 3, inputs and outputs 1800 model->identifyInputsAndOutputs( 1801 {op1, op2, op3}, 1802 {op4}); 1803 assert(model->isValid()); 1804 } 1805 1806 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_quant8(int i) { 1807 static std::set<int> ignore = {}; 1808 return ignore.find(i) != ignore.end(); 1809 } 1810 1811 void CreateModel_dynamic_output_shape_nchw_weight_as_input_float16(Model *model) { 1812 OperandType type0(Type::BOOL, {}); 1813 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 1814 OperandType type12(Type::TENSOR_FLOAT16, {1}); 1815 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 1816 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 1817 OperandType type4(Type::INT32, {}); 1818 // Phase 1, operands 1819 auto op1 = model->addOperand(&type17); 1820 auto op2 = model->addOperand(&type11); 1821 auto op3 = model->addOperand(&type12); 1822 auto param = model->addOperand(&type4); 1823 auto param1 = model->addOperand(&type4); 1824 auto param2 = model->addOperand(&type4); 1825 auto param3 = model->addOperand(&type4); 1826 auto param4 = model->addOperand(&type4); 1827 auto param5 = model->addOperand(&type4); 1828 auto param6 = model->addOperand(&type4); 1829 auto layout = model->addOperand(&type0); 1830 auto param7 = model->addOperand(&type4); 1831 auto param8 = model->addOperand(&type4); 1832 auto op4 = model->addOperand(&type21); 1833 // Phase 2, operations 1834 static int32_t param_init[] = {0}; 1835 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 1836 static int32_t param1_init[] = {0}; 1837 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 1838 static int32_t param2_init[] = {0}; 1839 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 1840 static int32_t param3_init[] = {0}; 1841 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 1842 static int32_t param4_init[] = {1}; 1843 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 1844 static int32_t param5_init[] = {1}; 1845 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 1846 static int32_t param6_init[] = {0}; 1847 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 1848 static bool8 layout_init[] = {true}; 1849 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1850 static int32_t param7_init[] = {1}; 1851 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 1852 static int32_t param8_init[] = {1}; 1853 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1854 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6, layout, param7, param8}, {op4}); 1855 // Phase 3, inputs and outputs 1856 model->identifyInputsAndOutputs( 1857 {op1, op2, op3}, 1858 {op4}); 1859 assert(model->isValid()); 1860 } 1861 1862 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_float16(int i) { 1863 static std::set<int> ignore = {}; 1864 return ignore.find(i) != ignore.end(); 1865 } 1866 1867 void CreateModel_nhwc_2(Model *model) { 1868 OperandType type0(Type::BOOL, {}); 1869 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 1870 OperandType type3(Type::TENSOR_FLOAT32, {1}); 1871 OperandType type4(Type::INT32, {}); 1872 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 1873 // Phase 1, operands 1874 auto op11 = model->addOperand(&type5); 1875 auto op21 = model->addOperand(&type1); 1876 auto op31 = model->addOperand(&type3); 1877 auto param9 = model->addOperand(&type4); 1878 auto param10 = model->addOperand(&type4); 1879 auto param11 = model->addOperand(&type4); 1880 auto param12 = model->addOperand(&type4); 1881 auto param13 = model->addOperand(&type4); 1882 auto param14 = model->addOperand(&type4); 1883 auto param15 = model->addOperand(&type4); 1884 auto layout = model->addOperand(&type0); 1885 auto param16 = model->addOperand(&type4); 1886 auto param17 = model->addOperand(&type4); 1887 auto op41 = model->addOperand(&type1); 1888 // Phase 2, operations 1889 static float op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 1890 model->setOperandValue(op21, op21_init, sizeof(float) * 9); 1891 static float op31_init[] = {0.0f}; 1892 model->setOperandValue(op31, op31_init, sizeof(float) * 1); 1893 static int32_t param9_init[] = {0}; 1894 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1895 static int32_t param10_init[] = {0}; 1896 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 1897 static int32_t param11_init[] = {0}; 1898 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 1899 static int32_t param12_init[] = {0}; 1900 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1901 static int32_t param13_init[] = {1}; 1902 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1903 static int32_t param14_init[] = {1}; 1904 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 1905 static int32_t param15_init[] = {0}; 1906 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1907 static bool8 layout_init[] = {false}; 1908 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1909 static int32_t param16_init[] = {3}; 1910 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1911 static int32_t param17_init[] = {3}; 1912 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 1913 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 1914 // Phase 3, inputs and outputs 1915 model->identifyInputsAndOutputs( 1916 {op11}, 1917 {op41}); 1918 assert(model->isValid()); 1919 } 1920 1921 inline bool is_ignored_nhwc_2(int i) { 1922 static std::set<int> ignore = {}; 1923 return ignore.find(i) != ignore.end(); 1924 } 1925 1926 void CreateModel_nhwc_relaxed_2(Model *model) { 1927 OperandType type0(Type::BOOL, {}); 1928 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 1929 OperandType type3(Type::TENSOR_FLOAT32, {1}); 1930 OperandType type4(Type::INT32, {}); 1931 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 1932 // Phase 1, operands 1933 auto op11 = model->addOperand(&type5); 1934 auto op21 = model->addOperand(&type1); 1935 auto op31 = model->addOperand(&type3); 1936 auto param9 = model->addOperand(&type4); 1937 auto param10 = model->addOperand(&type4); 1938 auto param11 = model->addOperand(&type4); 1939 auto param12 = model->addOperand(&type4); 1940 auto param13 = model->addOperand(&type4); 1941 auto param14 = model->addOperand(&type4); 1942 auto param15 = model->addOperand(&type4); 1943 auto layout = model->addOperand(&type0); 1944 auto param16 = model->addOperand(&type4); 1945 auto param17 = model->addOperand(&type4); 1946 auto op41 = model->addOperand(&type1); 1947 // Phase 2, operations 1948 static float op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 1949 model->setOperandValue(op21, op21_init, sizeof(float) * 9); 1950 static float op31_init[] = {0.0f}; 1951 model->setOperandValue(op31, op31_init, sizeof(float) * 1); 1952 static int32_t param9_init[] = {0}; 1953 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1954 static int32_t param10_init[] = {0}; 1955 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 1956 static int32_t param11_init[] = {0}; 1957 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 1958 static int32_t param12_init[] = {0}; 1959 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1960 static int32_t param13_init[] = {1}; 1961 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1962 static int32_t param14_init[] = {1}; 1963 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 1964 static int32_t param15_init[] = {0}; 1965 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1966 static bool8 layout_init[] = {false}; 1967 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1968 static int32_t param16_init[] = {3}; 1969 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1970 static int32_t param17_init[] = {3}; 1971 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 1972 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 1973 // Phase 3, inputs and outputs 1974 model->identifyInputsAndOutputs( 1975 {op11}, 1976 {op41}); 1977 // Phase 4: set relaxed execution 1978 model->relaxComputationFloat32toFloat16(true); 1979 assert(model->isValid()); 1980 } 1981 1982 inline bool is_ignored_nhwc_relaxed_2(int i) { 1983 static std::set<int> ignore = {}; 1984 return ignore.find(i) != ignore.end(); 1985 } 1986 1987 void CreateModel_nhwc_quant8_2(Model *model) { 1988 OperandType type0(Type::BOOL, {}); 1989 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 9, 9, 1}, 0.5f, 0); 1990 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 1991 OperandType type4(Type::INT32, {}); 1992 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 1993 // Phase 1, operands 1994 auto op11 = model->addOperand(&type22); 1995 auto op21 = model->addOperand(&type23); 1996 auto op31 = model->addOperand(&type9); 1997 auto param9 = model->addOperand(&type4); 1998 auto param10 = model->addOperand(&type4); 1999 auto param11 = model->addOperand(&type4); 2000 auto param12 = model->addOperand(&type4); 2001 auto param13 = model->addOperand(&type4); 2002 auto param14 = model->addOperand(&type4); 2003 auto param15 = model->addOperand(&type4); 2004 auto layout = model->addOperand(&type0); 2005 auto param16 = model->addOperand(&type4); 2006 auto param17 = model->addOperand(&type4); 2007 auto op41 = model->addOperand(&type23); 2008 // Phase 2, operations 2009 static uint8_t op21_init[] = {8, 16, 24, 32, 40, 48, 56, 64, 72}; 2010 model->setOperandValue(op21, op21_init, sizeof(uint8_t) * 9); 2011 static int32_t op31_init[] = {0}; 2012 model->setOperandValue(op31, op31_init, sizeof(int32_t) * 1); 2013 static int32_t param9_init[] = {0}; 2014 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2015 static int32_t param10_init[] = {0}; 2016 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2017 static int32_t param11_init[] = {0}; 2018 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2019 static int32_t param12_init[] = {0}; 2020 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2021 static int32_t param13_init[] = {1}; 2022 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2023 static int32_t param14_init[] = {1}; 2024 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2025 static int32_t param15_init[] = {0}; 2026 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2027 static bool8 layout_init[] = {false}; 2028 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2029 static int32_t param16_init[] = {3}; 2030 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2031 static int32_t param17_init[] = {3}; 2032 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2033 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2034 // Phase 3, inputs and outputs 2035 model->identifyInputsAndOutputs( 2036 {op11}, 2037 {op41}); 2038 assert(model->isValid()); 2039 } 2040 2041 inline bool is_ignored_nhwc_quant8_2(int i) { 2042 static std::set<int> ignore = {}; 2043 return ignore.find(i) != ignore.end(); 2044 } 2045 2046 void CreateModel_nhwc_float16_2(Model *model) { 2047 OperandType type0(Type::BOOL, {}); 2048 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 2049 OperandType type12(Type::TENSOR_FLOAT16, {1}); 2050 OperandType type24(Type::TENSOR_FLOAT16, {1, 9, 9, 1}); 2051 OperandType type4(Type::INT32, {}); 2052 // Phase 1, operands 2053 auto op11 = model->addOperand(&type24); 2054 auto op21 = model->addOperand(&type10); 2055 auto op31 = model->addOperand(&type12); 2056 auto param9 = model->addOperand(&type4); 2057 auto param10 = model->addOperand(&type4); 2058 auto param11 = model->addOperand(&type4); 2059 auto param12 = model->addOperand(&type4); 2060 auto param13 = model->addOperand(&type4); 2061 auto param14 = model->addOperand(&type4); 2062 auto param15 = model->addOperand(&type4); 2063 auto layout = model->addOperand(&type0); 2064 auto param16 = model->addOperand(&type4); 2065 auto param17 = model->addOperand(&type4); 2066 auto op41 = model->addOperand(&type10); 2067 // Phase 2, operations 2068 static _Float16 op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 2069 model->setOperandValue(op21, op21_init, sizeof(_Float16) * 9); 2070 static _Float16 op31_init[] = {0.0f}; 2071 model->setOperandValue(op31, op31_init, sizeof(_Float16) * 1); 2072 static int32_t param9_init[] = {0}; 2073 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2074 static int32_t param10_init[] = {0}; 2075 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2076 static int32_t param11_init[] = {0}; 2077 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2078 static int32_t param12_init[] = {0}; 2079 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2080 static int32_t param13_init[] = {1}; 2081 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2082 static int32_t param14_init[] = {1}; 2083 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2084 static int32_t param15_init[] = {0}; 2085 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2086 static bool8 layout_init[] = {false}; 2087 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2088 static int32_t param16_init[] = {3}; 2089 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2090 static int32_t param17_init[] = {3}; 2091 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2092 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2093 // Phase 3, inputs and outputs 2094 model->identifyInputsAndOutputs( 2095 {op11}, 2096 {op41}); 2097 assert(model->isValid()); 2098 } 2099 2100 inline bool is_ignored_nhwc_float16_2(int i) { 2101 static std::set<int> ignore = {}; 2102 return ignore.find(i) != ignore.end(); 2103 } 2104 2105 void CreateModel_nhwc_weight_as_input_2(Model *model) { 2106 OperandType type0(Type::BOOL, {}); 2107 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 2108 OperandType type3(Type::TENSOR_FLOAT32, {1}); 2109 OperandType type4(Type::INT32, {}); 2110 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 2111 // Phase 1, operands 2112 auto op11 = model->addOperand(&type5); 2113 auto op21 = model->addOperand(&type1); 2114 auto op31 = model->addOperand(&type3); 2115 auto param9 = model->addOperand(&type4); 2116 auto param10 = model->addOperand(&type4); 2117 auto param11 = model->addOperand(&type4); 2118 auto param12 = model->addOperand(&type4); 2119 auto param13 = model->addOperand(&type4); 2120 auto param14 = model->addOperand(&type4); 2121 auto param15 = model->addOperand(&type4); 2122 auto layout = model->addOperand(&type0); 2123 auto param16 = model->addOperand(&type4); 2124 auto param17 = model->addOperand(&type4); 2125 auto op41 = model->addOperand(&type1); 2126 // Phase 2, operations 2127 static int32_t param9_init[] = {0}; 2128 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2129 static int32_t param10_init[] = {0}; 2130 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2131 static int32_t param11_init[] = {0}; 2132 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2133 static int32_t param12_init[] = {0}; 2134 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2135 static int32_t param13_init[] = {1}; 2136 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2137 static int32_t param14_init[] = {1}; 2138 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2139 static int32_t param15_init[] = {0}; 2140 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2141 static bool8 layout_init[] = {false}; 2142 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2143 static int32_t param16_init[] = {3}; 2144 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2145 static int32_t param17_init[] = {3}; 2146 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2147 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2148 // Phase 3, inputs and outputs 2149 model->identifyInputsAndOutputs( 2150 {op11, op21, op31}, 2151 {op41}); 2152 assert(model->isValid()); 2153 } 2154 2155 inline bool is_ignored_nhwc_weight_as_input_2(int i) { 2156 static std::set<int> ignore = {}; 2157 return ignore.find(i) != ignore.end(); 2158 } 2159 2160 void CreateModel_nhwc_weight_as_input_relaxed_2(Model *model) { 2161 OperandType type0(Type::BOOL, {}); 2162 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 2163 OperandType type3(Type::TENSOR_FLOAT32, {1}); 2164 OperandType type4(Type::INT32, {}); 2165 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 2166 // Phase 1, operands 2167 auto op11 = model->addOperand(&type5); 2168 auto op21 = model->addOperand(&type1); 2169 auto op31 = model->addOperand(&type3); 2170 auto param9 = model->addOperand(&type4); 2171 auto param10 = model->addOperand(&type4); 2172 auto param11 = model->addOperand(&type4); 2173 auto param12 = model->addOperand(&type4); 2174 auto param13 = model->addOperand(&type4); 2175 auto param14 = model->addOperand(&type4); 2176 auto param15 = model->addOperand(&type4); 2177 auto layout = model->addOperand(&type0); 2178 auto param16 = model->addOperand(&type4); 2179 auto param17 = model->addOperand(&type4); 2180 auto op41 = model->addOperand(&type1); 2181 // Phase 2, operations 2182 static int32_t param9_init[] = {0}; 2183 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2184 static int32_t param10_init[] = {0}; 2185 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2186 static int32_t param11_init[] = {0}; 2187 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2188 static int32_t param12_init[] = {0}; 2189 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2190 static int32_t param13_init[] = {1}; 2191 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2192 static int32_t param14_init[] = {1}; 2193 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2194 static int32_t param15_init[] = {0}; 2195 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2196 static bool8 layout_init[] = {false}; 2197 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2198 static int32_t param16_init[] = {3}; 2199 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2200 static int32_t param17_init[] = {3}; 2201 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2202 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2203 // Phase 3, inputs and outputs 2204 model->identifyInputsAndOutputs( 2205 {op11, op21, op31}, 2206 {op41}); 2207 // Phase 4: set relaxed execution 2208 model->relaxComputationFloat32toFloat16(true); 2209 assert(model->isValid()); 2210 } 2211 2212 inline bool is_ignored_nhwc_weight_as_input_relaxed_2(int i) { 2213 static std::set<int> ignore = {}; 2214 return ignore.find(i) != ignore.end(); 2215 } 2216 2217 void CreateModel_nhwc_weight_as_input_quant8_2(Model *model) { 2218 OperandType type0(Type::BOOL, {}); 2219 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 9, 9, 1}, 0.5f, 0); 2220 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 2221 OperandType type4(Type::INT32, {}); 2222 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 2223 // Phase 1, operands 2224 auto op11 = model->addOperand(&type22); 2225 auto op21 = model->addOperand(&type23); 2226 auto op31 = model->addOperand(&type9); 2227 auto param9 = model->addOperand(&type4); 2228 auto param10 = model->addOperand(&type4); 2229 auto param11 = model->addOperand(&type4); 2230 auto param12 = model->addOperand(&type4); 2231 auto param13 = model->addOperand(&type4); 2232 auto param14 = model->addOperand(&type4); 2233 auto param15 = model->addOperand(&type4); 2234 auto layout = model->addOperand(&type0); 2235 auto param16 = model->addOperand(&type4); 2236 auto param17 = model->addOperand(&type4); 2237 auto op41 = model->addOperand(&type23); 2238 // Phase 2, operations 2239 static int32_t param9_init[] = {0}; 2240 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2241 static int32_t param10_init[] = {0}; 2242 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2243 static int32_t param11_init[] = {0}; 2244 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2245 static int32_t param12_init[] = {0}; 2246 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2247 static int32_t param13_init[] = {1}; 2248 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2249 static int32_t param14_init[] = {1}; 2250 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2251 static int32_t param15_init[] = {0}; 2252 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2253 static bool8 layout_init[] = {false}; 2254 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2255 static int32_t param16_init[] = {3}; 2256 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2257 static int32_t param17_init[] = {3}; 2258 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2259 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2260 // Phase 3, inputs and outputs 2261 model->identifyInputsAndOutputs( 2262 {op11, op21, op31}, 2263 {op41}); 2264 assert(model->isValid()); 2265 } 2266 2267 inline bool is_ignored_nhwc_weight_as_input_quant8_2(int i) { 2268 static std::set<int> ignore = {}; 2269 return ignore.find(i) != ignore.end(); 2270 } 2271 2272 void CreateModel_nhwc_weight_as_input_float16_2(Model *model) { 2273 OperandType type0(Type::BOOL, {}); 2274 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 2275 OperandType type12(Type::TENSOR_FLOAT16, {1}); 2276 OperandType type24(Type::TENSOR_FLOAT16, {1, 9, 9, 1}); 2277 OperandType type4(Type::INT32, {}); 2278 // Phase 1, operands 2279 auto op11 = model->addOperand(&type24); 2280 auto op21 = model->addOperand(&type10); 2281 auto op31 = model->addOperand(&type12); 2282 auto param9 = model->addOperand(&type4); 2283 auto param10 = model->addOperand(&type4); 2284 auto param11 = model->addOperand(&type4); 2285 auto param12 = model->addOperand(&type4); 2286 auto param13 = model->addOperand(&type4); 2287 auto param14 = model->addOperand(&type4); 2288 auto param15 = model->addOperand(&type4); 2289 auto layout = model->addOperand(&type0); 2290 auto param16 = model->addOperand(&type4); 2291 auto param17 = model->addOperand(&type4); 2292 auto op41 = model->addOperand(&type10); 2293 // Phase 2, operations 2294 static int32_t param9_init[] = {0}; 2295 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2296 static int32_t param10_init[] = {0}; 2297 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2298 static int32_t param11_init[] = {0}; 2299 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2300 static int32_t param12_init[] = {0}; 2301 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2302 static int32_t param13_init[] = {1}; 2303 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2304 static int32_t param14_init[] = {1}; 2305 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2306 static int32_t param15_init[] = {0}; 2307 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2308 static bool8 layout_init[] = {false}; 2309 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2310 static int32_t param16_init[] = {3}; 2311 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2312 static int32_t param17_init[] = {3}; 2313 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2314 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2315 // Phase 3, inputs and outputs 2316 model->identifyInputsAndOutputs( 2317 {op11, op21, op31}, 2318 {op41}); 2319 assert(model->isValid()); 2320 } 2321 2322 inline bool is_ignored_nhwc_weight_as_input_float16_2(int i) { 2323 static std::set<int> ignore = {}; 2324 return ignore.find(i) != ignore.end(); 2325 } 2326 2327 void CreateModel_nchw_2(Model *model) { 2328 OperandType type0(Type::BOOL, {}); 2329 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 2330 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 2331 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 2332 OperandType type3(Type::TENSOR_FLOAT32, {1}); 2333 OperandType type4(Type::INT32, {}); 2334 // Phase 1, operands 2335 auto op11 = model->addOperand(&type25); 2336 auto op21 = model->addOperand(&type1); 2337 auto op31 = model->addOperand(&type3); 2338 auto param9 = model->addOperand(&type4); 2339 auto param10 = model->addOperand(&type4); 2340 auto param11 = model->addOperand(&type4); 2341 auto param12 = model->addOperand(&type4); 2342 auto param13 = model->addOperand(&type4); 2343 auto param14 = model->addOperand(&type4); 2344 auto param15 = model->addOperand(&type4); 2345 auto layout = model->addOperand(&type0); 2346 auto param16 = model->addOperand(&type4); 2347 auto param17 = model->addOperand(&type4); 2348 auto op41 = model->addOperand(&type13); 2349 // Phase 2, operations 2350 static float op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 2351 model->setOperandValue(op21, op21_init, sizeof(float) * 9); 2352 static float op31_init[] = {0.0f}; 2353 model->setOperandValue(op31, op31_init, sizeof(float) * 1); 2354 static int32_t param9_init[] = {0}; 2355 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2356 static int32_t param10_init[] = {0}; 2357 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2358 static int32_t param11_init[] = {0}; 2359 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2360 static int32_t param12_init[] = {0}; 2361 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2362 static int32_t param13_init[] = {1}; 2363 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2364 static int32_t param14_init[] = {1}; 2365 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2366 static int32_t param15_init[] = {0}; 2367 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2368 static bool8 layout_init[] = {true}; 2369 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2370 static int32_t param16_init[] = {3}; 2371 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2372 static int32_t param17_init[] = {3}; 2373 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2374 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2375 // Phase 3, inputs and outputs 2376 model->identifyInputsAndOutputs( 2377 {op11}, 2378 {op41}); 2379 assert(model->isValid()); 2380 } 2381 2382 inline bool is_ignored_nchw_2(int i) { 2383 static std::set<int> ignore = {}; 2384 return ignore.find(i) != ignore.end(); 2385 } 2386 2387 void CreateModel_nchw_relaxed_2(Model *model) { 2388 OperandType type0(Type::BOOL, {}); 2389 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 2390 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 2391 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 2392 OperandType type3(Type::TENSOR_FLOAT32, {1}); 2393 OperandType type4(Type::INT32, {}); 2394 // Phase 1, operands 2395 auto op11 = model->addOperand(&type25); 2396 auto op21 = model->addOperand(&type1); 2397 auto op31 = model->addOperand(&type3); 2398 auto param9 = model->addOperand(&type4); 2399 auto param10 = model->addOperand(&type4); 2400 auto param11 = model->addOperand(&type4); 2401 auto param12 = model->addOperand(&type4); 2402 auto param13 = model->addOperand(&type4); 2403 auto param14 = model->addOperand(&type4); 2404 auto param15 = model->addOperand(&type4); 2405 auto layout = model->addOperand(&type0); 2406 auto param16 = model->addOperand(&type4); 2407 auto param17 = model->addOperand(&type4); 2408 auto op41 = model->addOperand(&type13); 2409 // Phase 2, operations 2410 static float op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 2411 model->setOperandValue(op21, op21_init, sizeof(float) * 9); 2412 static float op31_init[] = {0.0f}; 2413 model->setOperandValue(op31, op31_init, sizeof(float) * 1); 2414 static int32_t param9_init[] = {0}; 2415 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2416 static int32_t param10_init[] = {0}; 2417 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2418 static int32_t param11_init[] = {0}; 2419 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2420 static int32_t param12_init[] = {0}; 2421 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2422 static int32_t param13_init[] = {1}; 2423 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2424 static int32_t param14_init[] = {1}; 2425 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2426 static int32_t param15_init[] = {0}; 2427 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2428 static bool8 layout_init[] = {true}; 2429 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2430 static int32_t param16_init[] = {3}; 2431 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2432 static int32_t param17_init[] = {3}; 2433 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2434 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2435 // Phase 3, inputs and outputs 2436 model->identifyInputsAndOutputs( 2437 {op11}, 2438 {op41}); 2439 // Phase 4: set relaxed execution 2440 model->relaxComputationFloat32toFloat16(true); 2441 assert(model->isValid()); 2442 } 2443 2444 inline bool is_ignored_nchw_relaxed_2(int i) { 2445 static std::set<int> ignore = {}; 2446 return ignore.find(i) != ignore.end(); 2447 } 2448 2449 void CreateModel_nchw_quant8_2(Model *model) { 2450 OperandType type0(Type::BOOL, {}); 2451 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 2452 OperandType type26(Type::TENSOR_QUANT8_ASYMM, {1, 1, 9, 9}, 0.5f, 0); 2453 OperandType type27(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.125f, 0); 2454 OperandType type4(Type::INT32, {}); 2455 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 2456 // Phase 1, operands 2457 auto op11 = model->addOperand(&type26); 2458 auto op21 = model->addOperand(&type23); 2459 auto op31 = model->addOperand(&type9); 2460 auto param9 = model->addOperand(&type4); 2461 auto param10 = model->addOperand(&type4); 2462 auto param11 = model->addOperand(&type4); 2463 auto param12 = model->addOperand(&type4); 2464 auto param13 = model->addOperand(&type4); 2465 auto param14 = model->addOperand(&type4); 2466 auto param15 = model->addOperand(&type4); 2467 auto layout = model->addOperand(&type0); 2468 auto param16 = model->addOperand(&type4); 2469 auto param17 = model->addOperand(&type4); 2470 auto op41 = model->addOperand(&type27); 2471 // Phase 2, operations 2472 static uint8_t op21_init[] = {8, 16, 24, 32, 40, 48, 56, 64, 72}; 2473 model->setOperandValue(op21, op21_init, sizeof(uint8_t) * 9); 2474 static int32_t op31_init[] = {0}; 2475 model->setOperandValue(op31, op31_init, sizeof(int32_t) * 1); 2476 static int32_t param9_init[] = {0}; 2477 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2478 static int32_t param10_init[] = {0}; 2479 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2480 static int32_t param11_init[] = {0}; 2481 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2482 static int32_t param12_init[] = {0}; 2483 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2484 static int32_t param13_init[] = {1}; 2485 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2486 static int32_t param14_init[] = {1}; 2487 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2488 static int32_t param15_init[] = {0}; 2489 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2490 static bool8 layout_init[] = {true}; 2491 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2492 static int32_t param16_init[] = {3}; 2493 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2494 static int32_t param17_init[] = {3}; 2495 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2496 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2497 // Phase 3, inputs and outputs 2498 model->identifyInputsAndOutputs( 2499 {op11}, 2500 {op41}); 2501 assert(model->isValid()); 2502 } 2503 2504 inline bool is_ignored_nchw_quant8_2(int i) { 2505 static std::set<int> ignore = {}; 2506 return ignore.find(i) != ignore.end(); 2507 } 2508 2509 void CreateModel_nchw_float16_2(Model *model) { 2510 OperandType type0(Type::BOOL, {}); 2511 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 2512 OperandType type12(Type::TENSOR_FLOAT16, {1}); 2513 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 2514 OperandType type28(Type::TENSOR_FLOAT16, {1, 1, 9, 9}); 2515 OperandType type4(Type::INT32, {}); 2516 // Phase 1, operands 2517 auto op11 = model->addOperand(&type28); 2518 auto op21 = model->addOperand(&type10); 2519 auto op31 = model->addOperand(&type12); 2520 auto param9 = model->addOperand(&type4); 2521 auto param10 = model->addOperand(&type4); 2522 auto param11 = model->addOperand(&type4); 2523 auto param12 = model->addOperand(&type4); 2524 auto param13 = model->addOperand(&type4); 2525 auto param14 = model->addOperand(&type4); 2526 auto param15 = model->addOperand(&type4); 2527 auto layout = model->addOperand(&type0); 2528 auto param16 = model->addOperand(&type4); 2529 auto param17 = model->addOperand(&type4); 2530 auto op41 = model->addOperand(&type17); 2531 // Phase 2, operations 2532 static _Float16 op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 2533 model->setOperandValue(op21, op21_init, sizeof(_Float16) * 9); 2534 static _Float16 op31_init[] = {0.0f}; 2535 model->setOperandValue(op31, op31_init, sizeof(_Float16) * 1); 2536 static int32_t param9_init[] = {0}; 2537 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2538 static int32_t param10_init[] = {0}; 2539 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2540 static int32_t param11_init[] = {0}; 2541 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2542 static int32_t param12_init[] = {0}; 2543 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2544 static int32_t param13_init[] = {1}; 2545 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2546 static int32_t param14_init[] = {1}; 2547 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2548 static int32_t param15_init[] = {0}; 2549 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2550 static bool8 layout_init[] = {true}; 2551 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2552 static int32_t param16_init[] = {3}; 2553 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2554 static int32_t param17_init[] = {3}; 2555 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2556 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2557 // Phase 3, inputs and outputs 2558 model->identifyInputsAndOutputs( 2559 {op11}, 2560 {op41}); 2561 assert(model->isValid()); 2562 } 2563 2564 inline bool is_ignored_nchw_float16_2(int i) { 2565 static std::set<int> ignore = {}; 2566 return ignore.find(i) != ignore.end(); 2567 } 2568 2569 void CreateModel_nchw_weight_as_input_2(Model *model) { 2570 OperandType type0(Type::BOOL, {}); 2571 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 2572 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 2573 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 2574 OperandType type3(Type::TENSOR_FLOAT32, {1}); 2575 OperandType type4(Type::INT32, {}); 2576 // Phase 1, operands 2577 auto op11 = model->addOperand(&type25); 2578 auto op21 = model->addOperand(&type1); 2579 auto op31 = model->addOperand(&type3); 2580 auto param9 = model->addOperand(&type4); 2581 auto param10 = model->addOperand(&type4); 2582 auto param11 = model->addOperand(&type4); 2583 auto param12 = model->addOperand(&type4); 2584 auto param13 = model->addOperand(&type4); 2585 auto param14 = model->addOperand(&type4); 2586 auto param15 = model->addOperand(&type4); 2587 auto layout = model->addOperand(&type0); 2588 auto param16 = model->addOperand(&type4); 2589 auto param17 = model->addOperand(&type4); 2590 auto op41 = model->addOperand(&type13); 2591 // Phase 2, operations 2592 static int32_t param9_init[] = {0}; 2593 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2594 static int32_t param10_init[] = {0}; 2595 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2596 static int32_t param11_init[] = {0}; 2597 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2598 static int32_t param12_init[] = {0}; 2599 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2600 static int32_t param13_init[] = {1}; 2601 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2602 static int32_t param14_init[] = {1}; 2603 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2604 static int32_t param15_init[] = {0}; 2605 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2606 static bool8 layout_init[] = {true}; 2607 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2608 static int32_t param16_init[] = {3}; 2609 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2610 static int32_t param17_init[] = {3}; 2611 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2612 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2613 // Phase 3, inputs and outputs 2614 model->identifyInputsAndOutputs( 2615 {op11, op21, op31}, 2616 {op41}); 2617 assert(model->isValid()); 2618 } 2619 2620 inline bool is_ignored_nchw_weight_as_input_2(int i) { 2621 static std::set<int> ignore = {}; 2622 return ignore.find(i) != ignore.end(); 2623 } 2624 2625 void CreateModel_nchw_weight_as_input_relaxed_2(Model *model) { 2626 OperandType type0(Type::BOOL, {}); 2627 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 2628 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 2629 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 2630 OperandType type3(Type::TENSOR_FLOAT32, {1}); 2631 OperandType type4(Type::INT32, {}); 2632 // Phase 1, operands 2633 auto op11 = model->addOperand(&type25); 2634 auto op21 = model->addOperand(&type1); 2635 auto op31 = model->addOperand(&type3); 2636 auto param9 = model->addOperand(&type4); 2637 auto param10 = model->addOperand(&type4); 2638 auto param11 = model->addOperand(&type4); 2639 auto param12 = model->addOperand(&type4); 2640 auto param13 = model->addOperand(&type4); 2641 auto param14 = model->addOperand(&type4); 2642 auto param15 = model->addOperand(&type4); 2643 auto layout = model->addOperand(&type0); 2644 auto param16 = model->addOperand(&type4); 2645 auto param17 = model->addOperand(&type4); 2646 auto op41 = model->addOperand(&type13); 2647 // Phase 2, operations 2648 static int32_t param9_init[] = {0}; 2649 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2650 static int32_t param10_init[] = {0}; 2651 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2652 static int32_t param11_init[] = {0}; 2653 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2654 static int32_t param12_init[] = {0}; 2655 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2656 static int32_t param13_init[] = {1}; 2657 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2658 static int32_t param14_init[] = {1}; 2659 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2660 static int32_t param15_init[] = {0}; 2661 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2662 static bool8 layout_init[] = {true}; 2663 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2664 static int32_t param16_init[] = {3}; 2665 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2666 static int32_t param17_init[] = {3}; 2667 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2668 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2669 // Phase 3, inputs and outputs 2670 model->identifyInputsAndOutputs( 2671 {op11, op21, op31}, 2672 {op41}); 2673 // Phase 4: set relaxed execution 2674 model->relaxComputationFloat32toFloat16(true); 2675 assert(model->isValid()); 2676 } 2677 2678 inline bool is_ignored_nchw_weight_as_input_relaxed_2(int i) { 2679 static std::set<int> ignore = {}; 2680 return ignore.find(i) != ignore.end(); 2681 } 2682 2683 void CreateModel_nchw_weight_as_input_quant8_2(Model *model) { 2684 OperandType type0(Type::BOOL, {}); 2685 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 2686 OperandType type26(Type::TENSOR_QUANT8_ASYMM, {1, 1, 9, 9}, 0.5f, 0); 2687 OperandType type27(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.125f, 0); 2688 OperandType type4(Type::INT32, {}); 2689 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 2690 // Phase 1, operands 2691 auto op11 = model->addOperand(&type26); 2692 auto op21 = model->addOperand(&type23); 2693 auto op31 = model->addOperand(&type9); 2694 auto param9 = model->addOperand(&type4); 2695 auto param10 = model->addOperand(&type4); 2696 auto param11 = model->addOperand(&type4); 2697 auto param12 = model->addOperand(&type4); 2698 auto param13 = model->addOperand(&type4); 2699 auto param14 = model->addOperand(&type4); 2700 auto param15 = model->addOperand(&type4); 2701 auto layout = model->addOperand(&type0); 2702 auto param16 = model->addOperand(&type4); 2703 auto param17 = model->addOperand(&type4); 2704 auto op41 = model->addOperand(&type27); 2705 // Phase 2, operations 2706 static int32_t param9_init[] = {0}; 2707 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2708 static int32_t param10_init[] = {0}; 2709 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2710 static int32_t param11_init[] = {0}; 2711 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2712 static int32_t param12_init[] = {0}; 2713 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2714 static int32_t param13_init[] = {1}; 2715 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2716 static int32_t param14_init[] = {1}; 2717 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2718 static int32_t param15_init[] = {0}; 2719 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2720 static bool8 layout_init[] = {true}; 2721 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2722 static int32_t param16_init[] = {3}; 2723 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2724 static int32_t param17_init[] = {3}; 2725 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2726 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2727 // Phase 3, inputs and outputs 2728 model->identifyInputsAndOutputs( 2729 {op11, op21, op31}, 2730 {op41}); 2731 assert(model->isValid()); 2732 } 2733 2734 inline bool is_ignored_nchw_weight_as_input_quant8_2(int i) { 2735 static std::set<int> ignore = {}; 2736 return ignore.find(i) != ignore.end(); 2737 } 2738 2739 void CreateModel_nchw_weight_as_input_float16_2(Model *model) { 2740 OperandType type0(Type::BOOL, {}); 2741 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 2742 OperandType type12(Type::TENSOR_FLOAT16, {1}); 2743 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 2744 OperandType type28(Type::TENSOR_FLOAT16, {1, 1, 9, 9}); 2745 OperandType type4(Type::INT32, {}); 2746 // Phase 1, operands 2747 auto op11 = model->addOperand(&type28); 2748 auto op21 = model->addOperand(&type10); 2749 auto op31 = model->addOperand(&type12); 2750 auto param9 = model->addOperand(&type4); 2751 auto param10 = model->addOperand(&type4); 2752 auto param11 = model->addOperand(&type4); 2753 auto param12 = model->addOperand(&type4); 2754 auto param13 = model->addOperand(&type4); 2755 auto param14 = model->addOperand(&type4); 2756 auto param15 = model->addOperand(&type4); 2757 auto layout = model->addOperand(&type0); 2758 auto param16 = model->addOperand(&type4); 2759 auto param17 = model->addOperand(&type4); 2760 auto op41 = model->addOperand(&type17); 2761 // Phase 2, operations 2762 static int32_t param9_init[] = {0}; 2763 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2764 static int32_t param10_init[] = {0}; 2765 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2766 static int32_t param11_init[] = {0}; 2767 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2768 static int32_t param12_init[] = {0}; 2769 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2770 static int32_t param13_init[] = {1}; 2771 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2772 static int32_t param14_init[] = {1}; 2773 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2774 static int32_t param15_init[] = {0}; 2775 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2776 static bool8 layout_init[] = {true}; 2777 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2778 static int32_t param16_init[] = {3}; 2779 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2780 static int32_t param17_init[] = {3}; 2781 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2782 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2783 // Phase 3, inputs and outputs 2784 model->identifyInputsAndOutputs( 2785 {op11, op21, op31}, 2786 {op41}); 2787 assert(model->isValid()); 2788 } 2789 2790 inline bool is_ignored_nchw_weight_as_input_float16_2(int i) { 2791 static std::set<int> ignore = {}; 2792 return ignore.find(i) != ignore.end(); 2793 } 2794 2795 void CreateModel_dynamic_output_shape_nhwc_2(Model *model) { 2796 OperandType type0(Type::BOOL, {}); 2797 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 2798 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 2799 OperandType type3(Type::TENSOR_FLOAT32, {1}); 2800 OperandType type4(Type::INT32, {}); 2801 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 2802 // Phase 1, operands 2803 auto op11 = model->addOperand(&type5); 2804 auto op21 = model->addOperand(&type1); 2805 auto op31 = model->addOperand(&type3); 2806 auto param9 = model->addOperand(&type4); 2807 auto param10 = model->addOperand(&type4); 2808 auto param11 = model->addOperand(&type4); 2809 auto param12 = model->addOperand(&type4); 2810 auto param13 = model->addOperand(&type4); 2811 auto param14 = model->addOperand(&type4); 2812 auto param15 = model->addOperand(&type4); 2813 auto layout = model->addOperand(&type0); 2814 auto param16 = model->addOperand(&type4); 2815 auto param17 = model->addOperand(&type4); 2816 auto op41 = model->addOperand(&type19); 2817 // Phase 2, operations 2818 static float op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 2819 model->setOperandValue(op21, op21_init, sizeof(float) * 9); 2820 static float op31_init[] = {0.0f}; 2821 model->setOperandValue(op31, op31_init, sizeof(float) * 1); 2822 static int32_t param9_init[] = {0}; 2823 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2824 static int32_t param10_init[] = {0}; 2825 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2826 static int32_t param11_init[] = {0}; 2827 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2828 static int32_t param12_init[] = {0}; 2829 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2830 static int32_t param13_init[] = {1}; 2831 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2832 static int32_t param14_init[] = {1}; 2833 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2834 static int32_t param15_init[] = {0}; 2835 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2836 static bool8 layout_init[] = {false}; 2837 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2838 static int32_t param16_init[] = {3}; 2839 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2840 static int32_t param17_init[] = {3}; 2841 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2842 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2843 // Phase 3, inputs and outputs 2844 model->identifyInputsAndOutputs( 2845 {op11}, 2846 {op41}); 2847 assert(model->isValid()); 2848 } 2849 2850 inline bool is_ignored_dynamic_output_shape_nhwc_2(int i) { 2851 static std::set<int> ignore = {}; 2852 return ignore.find(i) != ignore.end(); 2853 } 2854 2855 void CreateModel_dynamic_output_shape_nhwc_relaxed_2(Model *model) { 2856 OperandType type0(Type::BOOL, {}); 2857 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 2858 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 2859 OperandType type3(Type::TENSOR_FLOAT32, {1}); 2860 OperandType type4(Type::INT32, {}); 2861 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 2862 // Phase 1, operands 2863 auto op11 = model->addOperand(&type5); 2864 auto op21 = model->addOperand(&type1); 2865 auto op31 = model->addOperand(&type3); 2866 auto param9 = model->addOperand(&type4); 2867 auto param10 = model->addOperand(&type4); 2868 auto param11 = model->addOperand(&type4); 2869 auto param12 = model->addOperand(&type4); 2870 auto param13 = model->addOperand(&type4); 2871 auto param14 = model->addOperand(&type4); 2872 auto param15 = model->addOperand(&type4); 2873 auto layout = model->addOperand(&type0); 2874 auto param16 = model->addOperand(&type4); 2875 auto param17 = model->addOperand(&type4); 2876 auto op41 = model->addOperand(&type19); 2877 // Phase 2, operations 2878 static float op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 2879 model->setOperandValue(op21, op21_init, sizeof(float) * 9); 2880 static float op31_init[] = {0.0f}; 2881 model->setOperandValue(op31, op31_init, sizeof(float) * 1); 2882 static int32_t param9_init[] = {0}; 2883 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2884 static int32_t param10_init[] = {0}; 2885 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2886 static int32_t param11_init[] = {0}; 2887 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2888 static int32_t param12_init[] = {0}; 2889 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2890 static int32_t param13_init[] = {1}; 2891 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2892 static int32_t param14_init[] = {1}; 2893 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2894 static int32_t param15_init[] = {0}; 2895 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2896 static bool8 layout_init[] = {false}; 2897 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2898 static int32_t param16_init[] = {3}; 2899 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2900 static int32_t param17_init[] = {3}; 2901 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2902 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2903 // Phase 3, inputs and outputs 2904 model->identifyInputsAndOutputs( 2905 {op11}, 2906 {op41}); 2907 // Phase 4: set relaxed execution 2908 model->relaxComputationFloat32toFloat16(true); 2909 assert(model->isValid()); 2910 } 2911 2912 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_2(int i) { 2913 static std::set<int> ignore = {}; 2914 return ignore.find(i) != ignore.end(); 2915 } 2916 2917 void CreateModel_dynamic_output_shape_nhwc_quant8_2(Model *model) { 2918 OperandType type0(Type::BOOL, {}); 2919 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 2920 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 9, 9, 1}, 0.5f, 0); 2921 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 2922 OperandType type4(Type::INT32, {}); 2923 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 2924 // Phase 1, operands 2925 auto op11 = model->addOperand(&type22); 2926 auto op21 = model->addOperand(&type23); 2927 auto op31 = model->addOperand(&type9); 2928 auto param9 = model->addOperand(&type4); 2929 auto param10 = model->addOperand(&type4); 2930 auto param11 = model->addOperand(&type4); 2931 auto param12 = model->addOperand(&type4); 2932 auto param13 = model->addOperand(&type4); 2933 auto param14 = model->addOperand(&type4); 2934 auto param15 = model->addOperand(&type4); 2935 auto layout = model->addOperand(&type0); 2936 auto param16 = model->addOperand(&type4); 2937 auto param17 = model->addOperand(&type4); 2938 auto op41 = model->addOperand(&type20); 2939 // Phase 2, operations 2940 static uint8_t op21_init[] = {8, 16, 24, 32, 40, 48, 56, 64, 72}; 2941 model->setOperandValue(op21, op21_init, sizeof(uint8_t) * 9); 2942 static int32_t op31_init[] = {0}; 2943 model->setOperandValue(op31, op31_init, sizeof(int32_t) * 1); 2944 static int32_t param9_init[] = {0}; 2945 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 2946 static int32_t param10_init[] = {0}; 2947 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 2948 static int32_t param11_init[] = {0}; 2949 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 2950 static int32_t param12_init[] = {0}; 2951 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 2952 static int32_t param13_init[] = {1}; 2953 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 2954 static int32_t param14_init[] = {1}; 2955 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 2956 static int32_t param15_init[] = {0}; 2957 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2958 static bool8 layout_init[] = {false}; 2959 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2960 static int32_t param16_init[] = {3}; 2961 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2962 static int32_t param17_init[] = {3}; 2963 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 2964 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 2965 // Phase 3, inputs and outputs 2966 model->identifyInputsAndOutputs( 2967 {op11}, 2968 {op41}); 2969 assert(model->isValid()); 2970 } 2971 2972 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_2(int i) { 2973 static std::set<int> ignore = {}; 2974 return ignore.find(i) != ignore.end(); 2975 } 2976 2977 void CreateModel_dynamic_output_shape_nhwc_float16_2(Model *model) { 2978 OperandType type0(Type::BOOL, {}); 2979 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 2980 OperandType type12(Type::TENSOR_FLOAT16, {1}); 2981 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 2982 OperandType type24(Type::TENSOR_FLOAT16, {1, 9, 9, 1}); 2983 OperandType type4(Type::INT32, {}); 2984 // Phase 1, operands 2985 auto op11 = model->addOperand(&type24); 2986 auto op21 = model->addOperand(&type10); 2987 auto op31 = model->addOperand(&type12); 2988 auto param9 = model->addOperand(&type4); 2989 auto param10 = model->addOperand(&type4); 2990 auto param11 = model->addOperand(&type4); 2991 auto param12 = model->addOperand(&type4); 2992 auto param13 = model->addOperand(&type4); 2993 auto param14 = model->addOperand(&type4); 2994 auto param15 = model->addOperand(&type4); 2995 auto layout = model->addOperand(&type0); 2996 auto param16 = model->addOperand(&type4); 2997 auto param17 = model->addOperand(&type4); 2998 auto op41 = model->addOperand(&type21); 2999 // Phase 2, operations 3000 static _Float16 op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 3001 model->setOperandValue(op21, op21_init, sizeof(_Float16) * 9); 3002 static _Float16 op31_init[] = {0.0f}; 3003 model->setOperandValue(op31, op31_init, sizeof(_Float16) * 1); 3004 static int32_t param9_init[] = {0}; 3005 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3006 static int32_t param10_init[] = {0}; 3007 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3008 static int32_t param11_init[] = {0}; 3009 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3010 static int32_t param12_init[] = {0}; 3011 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3012 static int32_t param13_init[] = {1}; 3013 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3014 static int32_t param14_init[] = {1}; 3015 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3016 static int32_t param15_init[] = {0}; 3017 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3018 static bool8 layout_init[] = {false}; 3019 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3020 static int32_t param16_init[] = {3}; 3021 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3022 static int32_t param17_init[] = {3}; 3023 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3024 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3025 // Phase 3, inputs and outputs 3026 model->identifyInputsAndOutputs( 3027 {op11}, 3028 {op41}); 3029 assert(model->isValid()); 3030 } 3031 3032 inline bool is_ignored_dynamic_output_shape_nhwc_float16_2(int i) { 3033 static std::set<int> ignore = {}; 3034 return ignore.find(i) != ignore.end(); 3035 } 3036 3037 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_2(Model *model) { 3038 OperandType type0(Type::BOOL, {}); 3039 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3040 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3041 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3042 OperandType type4(Type::INT32, {}); 3043 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 3044 // Phase 1, operands 3045 auto op11 = model->addOperand(&type5); 3046 auto op21 = model->addOperand(&type1); 3047 auto op31 = model->addOperand(&type3); 3048 auto param9 = model->addOperand(&type4); 3049 auto param10 = model->addOperand(&type4); 3050 auto param11 = model->addOperand(&type4); 3051 auto param12 = model->addOperand(&type4); 3052 auto param13 = model->addOperand(&type4); 3053 auto param14 = model->addOperand(&type4); 3054 auto param15 = model->addOperand(&type4); 3055 auto layout = model->addOperand(&type0); 3056 auto param16 = model->addOperand(&type4); 3057 auto param17 = model->addOperand(&type4); 3058 auto op41 = model->addOperand(&type19); 3059 // Phase 2, operations 3060 static int32_t param9_init[] = {0}; 3061 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3062 static int32_t param10_init[] = {0}; 3063 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3064 static int32_t param11_init[] = {0}; 3065 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3066 static int32_t param12_init[] = {0}; 3067 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3068 static int32_t param13_init[] = {1}; 3069 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3070 static int32_t param14_init[] = {1}; 3071 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3072 static int32_t param15_init[] = {0}; 3073 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3074 static bool8 layout_init[] = {false}; 3075 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3076 static int32_t param16_init[] = {3}; 3077 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3078 static int32_t param17_init[] = {3}; 3079 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3080 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3081 // Phase 3, inputs and outputs 3082 model->identifyInputsAndOutputs( 3083 {op11, op21, op31}, 3084 {op41}); 3085 assert(model->isValid()); 3086 } 3087 3088 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_2(int i) { 3089 static std::set<int> ignore = {}; 3090 return ignore.find(i) != ignore.end(); 3091 } 3092 3093 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_relaxed_2(Model *model) { 3094 OperandType type0(Type::BOOL, {}); 3095 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3096 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3097 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3098 OperandType type4(Type::INT32, {}); 3099 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 3100 // Phase 1, operands 3101 auto op11 = model->addOperand(&type5); 3102 auto op21 = model->addOperand(&type1); 3103 auto op31 = model->addOperand(&type3); 3104 auto param9 = model->addOperand(&type4); 3105 auto param10 = model->addOperand(&type4); 3106 auto param11 = model->addOperand(&type4); 3107 auto param12 = model->addOperand(&type4); 3108 auto param13 = model->addOperand(&type4); 3109 auto param14 = model->addOperand(&type4); 3110 auto param15 = model->addOperand(&type4); 3111 auto layout = model->addOperand(&type0); 3112 auto param16 = model->addOperand(&type4); 3113 auto param17 = model->addOperand(&type4); 3114 auto op41 = model->addOperand(&type19); 3115 // Phase 2, operations 3116 static int32_t param9_init[] = {0}; 3117 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3118 static int32_t param10_init[] = {0}; 3119 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3120 static int32_t param11_init[] = {0}; 3121 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3122 static int32_t param12_init[] = {0}; 3123 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3124 static int32_t param13_init[] = {1}; 3125 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3126 static int32_t param14_init[] = {1}; 3127 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3128 static int32_t param15_init[] = {0}; 3129 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3130 static bool8 layout_init[] = {false}; 3131 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3132 static int32_t param16_init[] = {3}; 3133 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3134 static int32_t param17_init[] = {3}; 3135 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3136 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3137 // Phase 3, inputs and outputs 3138 model->identifyInputsAndOutputs( 3139 {op11, op21, op31}, 3140 {op41}); 3141 // Phase 4: set relaxed execution 3142 model->relaxComputationFloat32toFloat16(true); 3143 assert(model->isValid()); 3144 } 3145 3146 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_relaxed_2(int i) { 3147 static std::set<int> ignore = {}; 3148 return ignore.find(i) != ignore.end(); 3149 } 3150 3151 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_quant8_2(Model *model) { 3152 OperandType type0(Type::BOOL, {}); 3153 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 3154 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 9, 9, 1}, 0.5f, 0); 3155 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 3156 OperandType type4(Type::INT32, {}); 3157 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 3158 // Phase 1, operands 3159 auto op11 = model->addOperand(&type22); 3160 auto op21 = model->addOperand(&type23); 3161 auto op31 = model->addOperand(&type9); 3162 auto param9 = model->addOperand(&type4); 3163 auto param10 = model->addOperand(&type4); 3164 auto param11 = model->addOperand(&type4); 3165 auto param12 = model->addOperand(&type4); 3166 auto param13 = model->addOperand(&type4); 3167 auto param14 = model->addOperand(&type4); 3168 auto param15 = model->addOperand(&type4); 3169 auto layout = model->addOperand(&type0); 3170 auto param16 = model->addOperand(&type4); 3171 auto param17 = model->addOperand(&type4); 3172 auto op41 = model->addOperand(&type20); 3173 // Phase 2, operations 3174 static int32_t param9_init[] = {0}; 3175 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3176 static int32_t param10_init[] = {0}; 3177 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3178 static int32_t param11_init[] = {0}; 3179 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3180 static int32_t param12_init[] = {0}; 3181 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3182 static int32_t param13_init[] = {1}; 3183 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3184 static int32_t param14_init[] = {1}; 3185 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3186 static int32_t param15_init[] = {0}; 3187 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3188 static bool8 layout_init[] = {false}; 3189 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3190 static int32_t param16_init[] = {3}; 3191 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3192 static int32_t param17_init[] = {3}; 3193 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3194 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3195 // Phase 3, inputs and outputs 3196 model->identifyInputsAndOutputs( 3197 {op11, op21, op31}, 3198 {op41}); 3199 assert(model->isValid()); 3200 } 3201 3202 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_quant8_2(int i) { 3203 static std::set<int> ignore = {}; 3204 return ignore.find(i) != ignore.end(); 3205 } 3206 3207 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_float16_2(Model *model) { 3208 OperandType type0(Type::BOOL, {}); 3209 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 3210 OperandType type12(Type::TENSOR_FLOAT16, {1}); 3211 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 3212 OperandType type24(Type::TENSOR_FLOAT16, {1, 9, 9, 1}); 3213 OperandType type4(Type::INT32, {}); 3214 // Phase 1, operands 3215 auto op11 = model->addOperand(&type24); 3216 auto op21 = model->addOperand(&type10); 3217 auto op31 = model->addOperand(&type12); 3218 auto param9 = model->addOperand(&type4); 3219 auto param10 = model->addOperand(&type4); 3220 auto param11 = model->addOperand(&type4); 3221 auto param12 = model->addOperand(&type4); 3222 auto param13 = model->addOperand(&type4); 3223 auto param14 = model->addOperand(&type4); 3224 auto param15 = model->addOperand(&type4); 3225 auto layout = model->addOperand(&type0); 3226 auto param16 = model->addOperand(&type4); 3227 auto param17 = model->addOperand(&type4); 3228 auto op41 = model->addOperand(&type21); 3229 // Phase 2, operations 3230 static int32_t param9_init[] = {0}; 3231 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3232 static int32_t param10_init[] = {0}; 3233 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3234 static int32_t param11_init[] = {0}; 3235 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3236 static int32_t param12_init[] = {0}; 3237 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3238 static int32_t param13_init[] = {1}; 3239 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3240 static int32_t param14_init[] = {1}; 3241 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3242 static int32_t param15_init[] = {0}; 3243 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3244 static bool8 layout_init[] = {false}; 3245 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3246 static int32_t param16_init[] = {3}; 3247 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3248 static int32_t param17_init[] = {3}; 3249 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3250 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3251 // Phase 3, inputs and outputs 3252 model->identifyInputsAndOutputs( 3253 {op11, op21, op31}, 3254 {op41}); 3255 assert(model->isValid()); 3256 } 3257 3258 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_float16_2(int i) { 3259 static std::set<int> ignore = {}; 3260 return ignore.find(i) != ignore.end(); 3261 } 3262 3263 void CreateModel_dynamic_output_shape_nchw_2(Model *model) { 3264 OperandType type0(Type::BOOL, {}); 3265 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3266 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3267 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 3268 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3269 OperandType type4(Type::INT32, {}); 3270 // Phase 1, operands 3271 auto op11 = model->addOperand(&type25); 3272 auto op21 = model->addOperand(&type1); 3273 auto op31 = model->addOperand(&type3); 3274 auto param9 = model->addOperand(&type4); 3275 auto param10 = model->addOperand(&type4); 3276 auto param11 = model->addOperand(&type4); 3277 auto param12 = model->addOperand(&type4); 3278 auto param13 = model->addOperand(&type4); 3279 auto param14 = model->addOperand(&type4); 3280 auto param15 = model->addOperand(&type4); 3281 auto layout = model->addOperand(&type0); 3282 auto param16 = model->addOperand(&type4); 3283 auto param17 = model->addOperand(&type4); 3284 auto op41 = model->addOperand(&type19); 3285 // Phase 2, operations 3286 static float op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 3287 model->setOperandValue(op21, op21_init, sizeof(float) * 9); 3288 static float op31_init[] = {0.0f}; 3289 model->setOperandValue(op31, op31_init, sizeof(float) * 1); 3290 static int32_t param9_init[] = {0}; 3291 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3292 static int32_t param10_init[] = {0}; 3293 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3294 static int32_t param11_init[] = {0}; 3295 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3296 static int32_t param12_init[] = {0}; 3297 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3298 static int32_t param13_init[] = {1}; 3299 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3300 static int32_t param14_init[] = {1}; 3301 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3302 static int32_t param15_init[] = {0}; 3303 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3304 static bool8 layout_init[] = {true}; 3305 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3306 static int32_t param16_init[] = {3}; 3307 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3308 static int32_t param17_init[] = {3}; 3309 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3310 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3311 // Phase 3, inputs and outputs 3312 model->identifyInputsAndOutputs( 3313 {op11}, 3314 {op41}); 3315 assert(model->isValid()); 3316 } 3317 3318 inline bool is_ignored_dynamic_output_shape_nchw_2(int i) { 3319 static std::set<int> ignore = {}; 3320 return ignore.find(i) != ignore.end(); 3321 } 3322 3323 void CreateModel_dynamic_output_shape_nchw_relaxed_2(Model *model) { 3324 OperandType type0(Type::BOOL, {}); 3325 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3326 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3327 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 3328 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3329 OperandType type4(Type::INT32, {}); 3330 // Phase 1, operands 3331 auto op11 = model->addOperand(&type25); 3332 auto op21 = model->addOperand(&type1); 3333 auto op31 = model->addOperand(&type3); 3334 auto param9 = model->addOperand(&type4); 3335 auto param10 = model->addOperand(&type4); 3336 auto param11 = model->addOperand(&type4); 3337 auto param12 = model->addOperand(&type4); 3338 auto param13 = model->addOperand(&type4); 3339 auto param14 = model->addOperand(&type4); 3340 auto param15 = model->addOperand(&type4); 3341 auto layout = model->addOperand(&type0); 3342 auto param16 = model->addOperand(&type4); 3343 auto param17 = model->addOperand(&type4); 3344 auto op41 = model->addOperand(&type19); 3345 // Phase 2, operations 3346 static float op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 3347 model->setOperandValue(op21, op21_init, sizeof(float) * 9); 3348 static float op31_init[] = {0.0f}; 3349 model->setOperandValue(op31, op31_init, sizeof(float) * 1); 3350 static int32_t param9_init[] = {0}; 3351 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3352 static int32_t param10_init[] = {0}; 3353 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3354 static int32_t param11_init[] = {0}; 3355 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3356 static int32_t param12_init[] = {0}; 3357 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3358 static int32_t param13_init[] = {1}; 3359 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3360 static int32_t param14_init[] = {1}; 3361 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3362 static int32_t param15_init[] = {0}; 3363 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3364 static bool8 layout_init[] = {true}; 3365 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3366 static int32_t param16_init[] = {3}; 3367 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3368 static int32_t param17_init[] = {3}; 3369 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3370 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3371 // Phase 3, inputs and outputs 3372 model->identifyInputsAndOutputs( 3373 {op11}, 3374 {op41}); 3375 // Phase 4: set relaxed execution 3376 model->relaxComputationFloat32toFloat16(true); 3377 assert(model->isValid()); 3378 } 3379 3380 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_2(int i) { 3381 static std::set<int> ignore = {}; 3382 return ignore.find(i) != ignore.end(); 3383 } 3384 3385 void CreateModel_dynamic_output_shape_nchw_quant8_2(Model *model) { 3386 OperandType type0(Type::BOOL, {}); 3387 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 3388 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 3389 OperandType type26(Type::TENSOR_QUANT8_ASYMM, {1, 1, 9, 9}, 0.5f, 0); 3390 OperandType type4(Type::INT32, {}); 3391 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 3392 // Phase 1, operands 3393 auto op11 = model->addOperand(&type26); 3394 auto op21 = model->addOperand(&type23); 3395 auto op31 = model->addOperand(&type9); 3396 auto param9 = model->addOperand(&type4); 3397 auto param10 = model->addOperand(&type4); 3398 auto param11 = model->addOperand(&type4); 3399 auto param12 = model->addOperand(&type4); 3400 auto param13 = model->addOperand(&type4); 3401 auto param14 = model->addOperand(&type4); 3402 auto param15 = model->addOperand(&type4); 3403 auto layout = model->addOperand(&type0); 3404 auto param16 = model->addOperand(&type4); 3405 auto param17 = model->addOperand(&type4); 3406 auto op41 = model->addOperand(&type20); 3407 // Phase 2, operations 3408 static uint8_t op21_init[] = {8, 16, 24, 32, 40, 48, 56, 64, 72}; 3409 model->setOperandValue(op21, op21_init, sizeof(uint8_t) * 9); 3410 static int32_t op31_init[] = {0}; 3411 model->setOperandValue(op31, op31_init, sizeof(int32_t) * 1); 3412 static int32_t param9_init[] = {0}; 3413 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3414 static int32_t param10_init[] = {0}; 3415 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3416 static int32_t param11_init[] = {0}; 3417 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3418 static int32_t param12_init[] = {0}; 3419 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3420 static int32_t param13_init[] = {1}; 3421 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3422 static int32_t param14_init[] = {1}; 3423 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3424 static int32_t param15_init[] = {0}; 3425 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3426 static bool8 layout_init[] = {true}; 3427 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3428 static int32_t param16_init[] = {3}; 3429 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3430 static int32_t param17_init[] = {3}; 3431 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3432 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3433 // Phase 3, inputs and outputs 3434 model->identifyInputsAndOutputs( 3435 {op11}, 3436 {op41}); 3437 assert(model->isValid()); 3438 } 3439 3440 inline bool is_ignored_dynamic_output_shape_nchw_quant8_2(int i) { 3441 static std::set<int> ignore = {}; 3442 return ignore.find(i) != ignore.end(); 3443 } 3444 3445 void CreateModel_dynamic_output_shape_nchw_float16_2(Model *model) { 3446 OperandType type0(Type::BOOL, {}); 3447 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 3448 OperandType type12(Type::TENSOR_FLOAT16, {1}); 3449 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 3450 OperandType type28(Type::TENSOR_FLOAT16, {1, 1, 9, 9}); 3451 OperandType type4(Type::INT32, {}); 3452 // Phase 1, operands 3453 auto op11 = model->addOperand(&type28); 3454 auto op21 = model->addOperand(&type10); 3455 auto op31 = model->addOperand(&type12); 3456 auto param9 = model->addOperand(&type4); 3457 auto param10 = model->addOperand(&type4); 3458 auto param11 = model->addOperand(&type4); 3459 auto param12 = model->addOperand(&type4); 3460 auto param13 = model->addOperand(&type4); 3461 auto param14 = model->addOperand(&type4); 3462 auto param15 = model->addOperand(&type4); 3463 auto layout = model->addOperand(&type0); 3464 auto param16 = model->addOperand(&type4); 3465 auto param17 = model->addOperand(&type4); 3466 auto op41 = model->addOperand(&type21); 3467 // Phase 2, operations 3468 static _Float16 op21_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 3469 model->setOperandValue(op21, op21_init, sizeof(_Float16) * 9); 3470 static _Float16 op31_init[] = {0.0f}; 3471 model->setOperandValue(op31, op31_init, sizeof(_Float16) * 1); 3472 static int32_t param9_init[] = {0}; 3473 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3474 static int32_t param10_init[] = {0}; 3475 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3476 static int32_t param11_init[] = {0}; 3477 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3478 static int32_t param12_init[] = {0}; 3479 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3480 static int32_t param13_init[] = {1}; 3481 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3482 static int32_t param14_init[] = {1}; 3483 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3484 static int32_t param15_init[] = {0}; 3485 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3486 static bool8 layout_init[] = {true}; 3487 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3488 static int32_t param16_init[] = {3}; 3489 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3490 static int32_t param17_init[] = {3}; 3491 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3492 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3493 // Phase 3, inputs and outputs 3494 model->identifyInputsAndOutputs( 3495 {op11}, 3496 {op41}); 3497 assert(model->isValid()); 3498 } 3499 3500 inline bool is_ignored_dynamic_output_shape_nchw_float16_2(int i) { 3501 static std::set<int> ignore = {}; 3502 return ignore.find(i) != ignore.end(); 3503 } 3504 3505 void CreateModel_dynamic_output_shape_nchw_weight_as_input_2(Model *model) { 3506 OperandType type0(Type::BOOL, {}); 3507 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3508 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3509 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 3510 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3511 OperandType type4(Type::INT32, {}); 3512 // Phase 1, operands 3513 auto op11 = model->addOperand(&type25); 3514 auto op21 = model->addOperand(&type1); 3515 auto op31 = model->addOperand(&type3); 3516 auto param9 = model->addOperand(&type4); 3517 auto param10 = model->addOperand(&type4); 3518 auto param11 = model->addOperand(&type4); 3519 auto param12 = model->addOperand(&type4); 3520 auto param13 = model->addOperand(&type4); 3521 auto param14 = model->addOperand(&type4); 3522 auto param15 = model->addOperand(&type4); 3523 auto layout = model->addOperand(&type0); 3524 auto param16 = model->addOperand(&type4); 3525 auto param17 = model->addOperand(&type4); 3526 auto op41 = model->addOperand(&type19); 3527 // Phase 2, operations 3528 static int32_t param9_init[] = {0}; 3529 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3530 static int32_t param10_init[] = {0}; 3531 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3532 static int32_t param11_init[] = {0}; 3533 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3534 static int32_t param12_init[] = {0}; 3535 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3536 static int32_t param13_init[] = {1}; 3537 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3538 static int32_t param14_init[] = {1}; 3539 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3540 static int32_t param15_init[] = {0}; 3541 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3542 static bool8 layout_init[] = {true}; 3543 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3544 static int32_t param16_init[] = {3}; 3545 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3546 static int32_t param17_init[] = {3}; 3547 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3548 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3549 // Phase 3, inputs and outputs 3550 model->identifyInputsAndOutputs( 3551 {op11, op21, op31}, 3552 {op41}); 3553 assert(model->isValid()); 3554 } 3555 3556 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_2(int i) { 3557 static std::set<int> ignore = {}; 3558 return ignore.find(i) != ignore.end(); 3559 } 3560 3561 void CreateModel_dynamic_output_shape_nchw_weight_as_input_relaxed_2(Model *model) { 3562 OperandType type0(Type::BOOL, {}); 3563 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3564 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3565 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 3566 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3567 OperandType type4(Type::INT32, {}); 3568 // Phase 1, operands 3569 auto op11 = model->addOperand(&type25); 3570 auto op21 = model->addOperand(&type1); 3571 auto op31 = model->addOperand(&type3); 3572 auto param9 = model->addOperand(&type4); 3573 auto param10 = model->addOperand(&type4); 3574 auto param11 = model->addOperand(&type4); 3575 auto param12 = model->addOperand(&type4); 3576 auto param13 = model->addOperand(&type4); 3577 auto param14 = model->addOperand(&type4); 3578 auto param15 = model->addOperand(&type4); 3579 auto layout = model->addOperand(&type0); 3580 auto param16 = model->addOperand(&type4); 3581 auto param17 = model->addOperand(&type4); 3582 auto op41 = model->addOperand(&type19); 3583 // Phase 2, operations 3584 static int32_t param9_init[] = {0}; 3585 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3586 static int32_t param10_init[] = {0}; 3587 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3588 static int32_t param11_init[] = {0}; 3589 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3590 static int32_t param12_init[] = {0}; 3591 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3592 static int32_t param13_init[] = {1}; 3593 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3594 static int32_t param14_init[] = {1}; 3595 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3596 static int32_t param15_init[] = {0}; 3597 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3598 static bool8 layout_init[] = {true}; 3599 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3600 static int32_t param16_init[] = {3}; 3601 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3602 static int32_t param17_init[] = {3}; 3603 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3604 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3605 // Phase 3, inputs and outputs 3606 model->identifyInputsAndOutputs( 3607 {op11, op21, op31}, 3608 {op41}); 3609 // Phase 4: set relaxed execution 3610 model->relaxComputationFloat32toFloat16(true); 3611 assert(model->isValid()); 3612 } 3613 3614 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_relaxed_2(int i) { 3615 static std::set<int> ignore = {}; 3616 return ignore.find(i) != ignore.end(); 3617 } 3618 3619 void CreateModel_dynamic_output_shape_nchw_weight_as_input_quant8_2(Model *model) { 3620 OperandType type0(Type::BOOL, {}); 3621 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 3622 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 3623 OperandType type26(Type::TENSOR_QUANT8_ASYMM, {1, 1, 9, 9}, 0.5f, 0); 3624 OperandType type4(Type::INT32, {}); 3625 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 3626 // Phase 1, operands 3627 auto op11 = model->addOperand(&type26); 3628 auto op21 = model->addOperand(&type23); 3629 auto op31 = model->addOperand(&type9); 3630 auto param9 = model->addOperand(&type4); 3631 auto param10 = model->addOperand(&type4); 3632 auto param11 = model->addOperand(&type4); 3633 auto param12 = model->addOperand(&type4); 3634 auto param13 = model->addOperand(&type4); 3635 auto param14 = model->addOperand(&type4); 3636 auto param15 = model->addOperand(&type4); 3637 auto layout = model->addOperand(&type0); 3638 auto param16 = model->addOperand(&type4); 3639 auto param17 = model->addOperand(&type4); 3640 auto op41 = model->addOperand(&type20); 3641 // Phase 2, operations 3642 static int32_t param9_init[] = {0}; 3643 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3644 static int32_t param10_init[] = {0}; 3645 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3646 static int32_t param11_init[] = {0}; 3647 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3648 static int32_t param12_init[] = {0}; 3649 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3650 static int32_t param13_init[] = {1}; 3651 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3652 static int32_t param14_init[] = {1}; 3653 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3654 static int32_t param15_init[] = {0}; 3655 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3656 static bool8 layout_init[] = {true}; 3657 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3658 static int32_t param16_init[] = {3}; 3659 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3660 static int32_t param17_init[] = {3}; 3661 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3662 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3663 // Phase 3, inputs and outputs 3664 model->identifyInputsAndOutputs( 3665 {op11, op21, op31}, 3666 {op41}); 3667 assert(model->isValid()); 3668 } 3669 3670 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_quant8_2(int i) { 3671 static std::set<int> ignore = {}; 3672 return ignore.find(i) != ignore.end(); 3673 } 3674 3675 void CreateModel_dynamic_output_shape_nchw_weight_as_input_float16_2(Model *model) { 3676 OperandType type0(Type::BOOL, {}); 3677 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 3678 OperandType type12(Type::TENSOR_FLOAT16, {1}); 3679 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 3680 OperandType type28(Type::TENSOR_FLOAT16, {1, 1, 9, 9}); 3681 OperandType type4(Type::INT32, {}); 3682 // Phase 1, operands 3683 auto op11 = model->addOperand(&type28); 3684 auto op21 = model->addOperand(&type10); 3685 auto op31 = model->addOperand(&type12); 3686 auto param9 = model->addOperand(&type4); 3687 auto param10 = model->addOperand(&type4); 3688 auto param11 = model->addOperand(&type4); 3689 auto param12 = model->addOperand(&type4); 3690 auto param13 = model->addOperand(&type4); 3691 auto param14 = model->addOperand(&type4); 3692 auto param15 = model->addOperand(&type4); 3693 auto layout = model->addOperand(&type0); 3694 auto param16 = model->addOperand(&type4); 3695 auto param17 = model->addOperand(&type4); 3696 auto op41 = model->addOperand(&type21); 3697 // Phase 2, operations 3698 static int32_t param9_init[] = {0}; 3699 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 3700 static int32_t param10_init[] = {0}; 3701 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 3702 static int32_t param11_init[] = {0}; 3703 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 3704 static int32_t param12_init[] = {0}; 3705 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 3706 static int32_t param13_init[] = {1}; 3707 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 3708 static int32_t param14_init[] = {1}; 3709 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 3710 static int32_t param15_init[] = {0}; 3711 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 3712 static bool8 layout_init[] = {true}; 3713 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3714 static int32_t param16_init[] = {3}; 3715 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 3716 static int32_t param17_init[] = {3}; 3717 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 3718 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param9, param10, param11, param12, param13, param14, param15, layout, param16, param17}, {op41}); 3719 // Phase 3, inputs and outputs 3720 model->identifyInputsAndOutputs( 3721 {op11, op21, op31}, 3722 {op41}); 3723 assert(model->isValid()); 3724 } 3725 3726 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_float16_2(int i) { 3727 static std::set<int> ignore = {}; 3728 return ignore.find(i) != ignore.end(); 3729 } 3730 3731 void CreateModel_nhwc_3(Model *model) { 3732 OperandType type0(Type::BOOL, {}); 3733 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3734 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 3735 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3736 OperandType type4(Type::INT32, {}); 3737 // Phase 1, operands 3738 auto op12 = model->addOperand(&type1); 3739 auto op22 = model->addOperand(&type2); 3740 auto op32 = model->addOperand(&type3); 3741 auto param18 = model->addOperand(&type4); 3742 auto param19 = model->addOperand(&type4); 3743 auto param20 = model->addOperand(&type4); 3744 auto param21 = model->addOperand(&type4); 3745 auto layout = model->addOperand(&type0); 3746 auto param22 = model->addOperand(&type4); 3747 auto param23 = model->addOperand(&type4); 3748 auto op42 = model->addOperand(&type2); 3749 // Phase 2, operations 3750 static float op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 3751 model->setOperandValue(op22, op22_init, sizeof(float) * 4); 3752 static float op32_init[] = {0.0f}; 3753 model->setOperandValue(op32, op32_init, sizeof(float) * 1); 3754 static int32_t param18_init[] = {2}; 3755 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 3756 static int32_t param19_init[] = {1}; 3757 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 3758 static int32_t param20_init[] = {1}; 3759 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 3760 static int32_t param21_init[] = {0}; 3761 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 3762 static bool8 layout_init[] = {false}; 3763 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3764 static int32_t param22_init[] = {1}; 3765 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3766 static int32_t param23_init[] = {1}; 3767 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3768 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 3769 // Phase 3, inputs and outputs 3770 model->identifyInputsAndOutputs( 3771 {op12}, 3772 {op42}); 3773 assert(model->isValid()); 3774 } 3775 3776 inline bool is_ignored_nhwc_3(int i) { 3777 static std::set<int> ignore = {}; 3778 return ignore.find(i) != ignore.end(); 3779 } 3780 3781 void CreateModel_nhwc_relaxed_3(Model *model) { 3782 OperandType type0(Type::BOOL, {}); 3783 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3784 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 3785 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3786 OperandType type4(Type::INT32, {}); 3787 // Phase 1, operands 3788 auto op12 = model->addOperand(&type1); 3789 auto op22 = model->addOperand(&type2); 3790 auto op32 = model->addOperand(&type3); 3791 auto param18 = model->addOperand(&type4); 3792 auto param19 = model->addOperand(&type4); 3793 auto param20 = model->addOperand(&type4); 3794 auto param21 = model->addOperand(&type4); 3795 auto layout = model->addOperand(&type0); 3796 auto param22 = model->addOperand(&type4); 3797 auto param23 = model->addOperand(&type4); 3798 auto op42 = model->addOperand(&type2); 3799 // Phase 2, operations 3800 static float op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 3801 model->setOperandValue(op22, op22_init, sizeof(float) * 4); 3802 static float op32_init[] = {0.0f}; 3803 model->setOperandValue(op32, op32_init, sizeof(float) * 1); 3804 static int32_t param18_init[] = {2}; 3805 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 3806 static int32_t param19_init[] = {1}; 3807 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 3808 static int32_t param20_init[] = {1}; 3809 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 3810 static int32_t param21_init[] = {0}; 3811 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 3812 static bool8 layout_init[] = {false}; 3813 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3814 static int32_t param22_init[] = {1}; 3815 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3816 static int32_t param23_init[] = {1}; 3817 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3818 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 3819 // Phase 3, inputs and outputs 3820 model->identifyInputsAndOutputs( 3821 {op12}, 3822 {op42}); 3823 // Phase 4: set relaxed execution 3824 model->relaxComputationFloat32toFloat16(true); 3825 assert(model->isValid()); 3826 } 3827 3828 inline bool is_ignored_nhwc_relaxed_3(int i) { 3829 static std::set<int> ignore = {}; 3830 return ignore.find(i) != ignore.end(); 3831 } 3832 3833 void CreateModel_nhwc_quant8_3(Model *model) { 3834 OperandType type0(Type::BOOL, {}); 3835 OperandType type4(Type::INT32, {}); 3836 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.5f, 0); 3837 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 3838 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 3839 // Phase 1, operands 3840 auto op12 = model->addOperand(&type7); 3841 auto op22 = model->addOperand(&type8); 3842 auto op32 = model->addOperand(&type9); 3843 auto param18 = model->addOperand(&type4); 3844 auto param19 = model->addOperand(&type4); 3845 auto param20 = model->addOperand(&type4); 3846 auto param21 = model->addOperand(&type4); 3847 auto layout = model->addOperand(&type0); 3848 auto param22 = model->addOperand(&type4); 3849 auto param23 = model->addOperand(&type4); 3850 auto op42 = model->addOperand(&type8); 3851 // Phase 2, operations 3852 static uint8_t op22_init[] = {2, 2, 2, 2}; 3853 model->setOperandValue(op22, op22_init, sizeof(uint8_t) * 4); 3854 static int32_t op32_init[] = {0}; 3855 model->setOperandValue(op32, op32_init, sizeof(int32_t) * 1); 3856 static int32_t param18_init[] = {2}; 3857 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 3858 static int32_t param19_init[] = {1}; 3859 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 3860 static int32_t param20_init[] = {1}; 3861 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 3862 static int32_t param21_init[] = {0}; 3863 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 3864 static bool8 layout_init[] = {false}; 3865 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3866 static int32_t param22_init[] = {1}; 3867 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3868 static int32_t param23_init[] = {1}; 3869 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3870 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 3871 // Phase 3, inputs and outputs 3872 model->identifyInputsAndOutputs( 3873 {op12}, 3874 {op42}); 3875 assert(model->isValid()); 3876 } 3877 3878 inline bool is_ignored_nhwc_quant8_3(int i) { 3879 static std::set<int> ignore = {}; 3880 return ignore.find(i) != ignore.end(); 3881 } 3882 3883 void CreateModel_nhwc_float16_3(Model *model) { 3884 OperandType type0(Type::BOOL, {}); 3885 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 3886 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 3887 OperandType type12(Type::TENSOR_FLOAT16, {1}); 3888 OperandType type4(Type::INT32, {}); 3889 // Phase 1, operands 3890 auto op12 = model->addOperand(&type10); 3891 auto op22 = model->addOperand(&type11); 3892 auto op32 = model->addOperand(&type12); 3893 auto param18 = model->addOperand(&type4); 3894 auto param19 = model->addOperand(&type4); 3895 auto param20 = model->addOperand(&type4); 3896 auto param21 = model->addOperand(&type4); 3897 auto layout = model->addOperand(&type0); 3898 auto param22 = model->addOperand(&type4); 3899 auto param23 = model->addOperand(&type4); 3900 auto op42 = model->addOperand(&type11); 3901 // Phase 2, operations 3902 static _Float16 op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 3903 model->setOperandValue(op22, op22_init, sizeof(_Float16) * 4); 3904 static _Float16 op32_init[] = {0.0f}; 3905 model->setOperandValue(op32, op32_init, sizeof(_Float16) * 1); 3906 static int32_t param18_init[] = {2}; 3907 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 3908 static int32_t param19_init[] = {1}; 3909 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 3910 static int32_t param20_init[] = {1}; 3911 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 3912 static int32_t param21_init[] = {0}; 3913 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 3914 static bool8 layout_init[] = {false}; 3915 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3916 static int32_t param22_init[] = {1}; 3917 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3918 static int32_t param23_init[] = {1}; 3919 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3920 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 3921 // Phase 3, inputs and outputs 3922 model->identifyInputsAndOutputs( 3923 {op12}, 3924 {op42}); 3925 assert(model->isValid()); 3926 } 3927 3928 inline bool is_ignored_nhwc_float16_3(int i) { 3929 static std::set<int> ignore = {}; 3930 return ignore.find(i) != ignore.end(); 3931 } 3932 3933 void CreateModel_nhwc_weight_as_input_3(Model *model) { 3934 OperandType type0(Type::BOOL, {}); 3935 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3936 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 3937 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3938 OperandType type4(Type::INT32, {}); 3939 // Phase 1, operands 3940 auto op12 = model->addOperand(&type1); 3941 auto op22 = model->addOperand(&type2); 3942 auto op32 = model->addOperand(&type3); 3943 auto param18 = model->addOperand(&type4); 3944 auto param19 = model->addOperand(&type4); 3945 auto param20 = model->addOperand(&type4); 3946 auto param21 = model->addOperand(&type4); 3947 auto layout = model->addOperand(&type0); 3948 auto param22 = model->addOperand(&type4); 3949 auto param23 = model->addOperand(&type4); 3950 auto op42 = model->addOperand(&type2); 3951 // Phase 2, operations 3952 static int32_t param18_init[] = {2}; 3953 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 3954 static int32_t param19_init[] = {1}; 3955 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 3956 static int32_t param20_init[] = {1}; 3957 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 3958 static int32_t param21_init[] = {0}; 3959 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 3960 static bool8 layout_init[] = {false}; 3961 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3962 static int32_t param22_init[] = {1}; 3963 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3964 static int32_t param23_init[] = {1}; 3965 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3966 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 3967 // Phase 3, inputs and outputs 3968 model->identifyInputsAndOutputs( 3969 {op12, op22, op32}, 3970 {op42}); 3971 assert(model->isValid()); 3972 } 3973 3974 inline bool is_ignored_nhwc_weight_as_input_3(int i) { 3975 static std::set<int> ignore = {}; 3976 return ignore.find(i) != ignore.end(); 3977 } 3978 3979 void CreateModel_nhwc_weight_as_input_relaxed_3(Model *model) { 3980 OperandType type0(Type::BOOL, {}); 3981 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 3982 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 3983 OperandType type3(Type::TENSOR_FLOAT32, {1}); 3984 OperandType type4(Type::INT32, {}); 3985 // Phase 1, operands 3986 auto op12 = model->addOperand(&type1); 3987 auto op22 = model->addOperand(&type2); 3988 auto op32 = model->addOperand(&type3); 3989 auto param18 = model->addOperand(&type4); 3990 auto param19 = model->addOperand(&type4); 3991 auto param20 = model->addOperand(&type4); 3992 auto param21 = model->addOperand(&type4); 3993 auto layout = model->addOperand(&type0); 3994 auto param22 = model->addOperand(&type4); 3995 auto param23 = model->addOperand(&type4); 3996 auto op42 = model->addOperand(&type2); 3997 // Phase 2, operations 3998 static int32_t param18_init[] = {2}; 3999 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4000 static int32_t param19_init[] = {1}; 4001 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4002 static int32_t param20_init[] = {1}; 4003 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4004 static int32_t param21_init[] = {0}; 4005 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4006 static bool8 layout_init[] = {false}; 4007 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4008 static int32_t param22_init[] = {1}; 4009 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4010 static int32_t param23_init[] = {1}; 4011 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4012 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4013 // Phase 3, inputs and outputs 4014 model->identifyInputsAndOutputs( 4015 {op12, op22, op32}, 4016 {op42}); 4017 // Phase 4: set relaxed execution 4018 model->relaxComputationFloat32toFloat16(true); 4019 assert(model->isValid()); 4020 } 4021 4022 inline bool is_ignored_nhwc_weight_as_input_relaxed_3(int i) { 4023 static std::set<int> ignore = {}; 4024 return ignore.find(i) != ignore.end(); 4025 } 4026 4027 void CreateModel_nhwc_weight_as_input_quant8_3(Model *model) { 4028 OperandType type0(Type::BOOL, {}); 4029 OperandType type4(Type::INT32, {}); 4030 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.5f, 0); 4031 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 4032 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 4033 // Phase 1, operands 4034 auto op12 = model->addOperand(&type7); 4035 auto op22 = model->addOperand(&type8); 4036 auto op32 = model->addOperand(&type9); 4037 auto param18 = model->addOperand(&type4); 4038 auto param19 = model->addOperand(&type4); 4039 auto param20 = model->addOperand(&type4); 4040 auto param21 = model->addOperand(&type4); 4041 auto layout = model->addOperand(&type0); 4042 auto param22 = model->addOperand(&type4); 4043 auto param23 = model->addOperand(&type4); 4044 auto op42 = model->addOperand(&type8); 4045 // Phase 2, operations 4046 static int32_t param18_init[] = {2}; 4047 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4048 static int32_t param19_init[] = {1}; 4049 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4050 static int32_t param20_init[] = {1}; 4051 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4052 static int32_t param21_init[] = {0}; 4053 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4054 static bool8 layout_init[] = {false}; 4055 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4056 static int32_t param22_init[] = {1}; 4057 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4058 static int32_t param23_init[] = {1}; 4059 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4060 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4061 // Phase 3, inputs and outputs 4062 model->identifyInputsAndOutputs( 4063 {op12, op22, op32}, 4064 {op42}); 4065 assert(model->isValid()); 4066 } 4067 4068 inline bool is_ignored_nhwc_weight_as_input_quant8_3(int i) { 4069 static std::set<int> ignore = {}; 4070 return ignore.find(i) != ignore.end(); 4071 } 4072 4073 void CreateModel_nhwc_weight_as_input_float16_3(Model *model) { 4074 OperandType type0(Type::BOOL, {}); 4075 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 4076 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 4077 OperandType type12(Type::TENSOR_FLOAT16, {1}); 4078 OperandType type4(Type::INT32, {}); 4079 // Phase 1, operands 4080 auto op12 = model->addOperand(&type10); 4081 auto op22 = model->addOperand(&type11); 4082 auto op32 = model->addOperand(&type12); 4083 auto param18 = model->addOperand(&type4); 4084 auto param19 = model->addOperand(&type4); 4085 auto param20 = model->addOperand(&type4); 4086 auto param21 = model->addOperand(&type4); 4087 auto layout = model->addOperand(&type0); 4088 auto param22 = model->addOperand(&type4); 4089 auto param23 = model->addOperand(&type4); 4090 auto op42 = model->addOperand(&type11); 4091 // Phase 2, operations 4092 static int32_t param18_init[] = {2}; 4093 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4094 static int32_t param19_init[] = {1}; 4095 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4096 static int32_t param20_init[] = {1}; 4097 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4098 static int32_t param21_init[] = {0}; 4099 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4100 static bool8 layout_init[] = {false}; 4101 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4102 static int32_t param22_init[] = {1}; 4103 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4104 static int32_t param23_init[] = {1}; 4105 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4106 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4107 // Phase 3, inputs and outputs 4108 model->identifyInputsAndOutputs( 4109 {op12, op22, op32}, 4110 {op42}); 4111 assert(model->isValid()); 4112 } 4113 4114 inline bool is_ignored_nhwc_weight_as_input_float16_3(int i) { 4115 static std::set<int> ignore = {}; 4116 return ignore.find(i) != ignore.end(); 4117 } 4118 4119 void CreateModel_nchw_3(Model *model) { 4120 OperandType type0(Type::BOOL, {}); 4121 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 4122 OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 2, 2}); 4123 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4124 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4125 OperandType type4(Type::INT32, {}); 4126 // Phase 1, operands 4127 auto op12 = model->addOperand(&type13); 4128 auto op22 = model->addOperand(&type2); 4129 auto op32 = model->addOperand(&type3); 4130 auto param18 = model->addOperand(&type4); 4131 auto param19 = model->addOperand(&type4); 4132 auto param20 = model->addOperand(&type4); 4133 auto param21 = model->addOperand(&type4); 4134 auto layout = model->addOperand(&type0); 4135 auto param22 = model->addOperand(&type4); 4136 auto param23 = model->addOperand(&type4); 4137 auto op42 = model->addOperand(&type14); 4138 // Phase 2, operations 4139 static float op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 4140 model->setOperandValue(op22, op22_init, sizeof(float) * 4); 4141 static float op32_init[] = {0.0f}; 4142 model->setOperandValue(op32, op32_init, sizeof(float) * 1); 4143 static int32_t param18_init[] = {2}; 4144 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4145 static int32_t param19_init[] = {1}; 4146 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4147 static int32_t param20_init[] = {1}; 4148 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4149 static int32_t param21_init[] = {0}; 4150 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4151 static bool8 layout_init[] = {true}; 4152 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4153 static int32_t param22_init[] = {1}; 4154 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4155 static int32_t param23_init[] = {1}; 4156 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4157 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4158 // Phase 3, inputs and outputs 4159 model->identifyInputsAndOutputs( 4160 {op12}, 4161 {op42}); 4162 assert(model->isValid()); 4163 } 4164 4165 inline bool is_ignored_nchw_3(int i) { 4166 static std::set<int> ignore = {}; 4167 return ignore.find(i) != ignore.end(); 4168 } 4169 4170 void CreateModel_nchw_relaxed_3(Model *model) { 4171 OperandType type0(Type::BOOL, {}); 4172 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 4173 OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 2, 2}); 4174 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4175 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4176 OperandType type4(Type::INT32, {}); 4177 // Phase 1, operands 4178 auto op12 = model->addOperand(&type13); 4179 auto op22 = model->addOperand(&type2); 4180 auto op32 = model->addOperand(&type3); 4181 auto param18 = model->addOperand(&type4); 4182 auto param19 = model->addOperand(&type4); 4183 auto param20 = model->addOperand(&type4); 4184 auto param21 = model->addOperand(&type4); 4185 auto layout = model->addOperand(&type0); 4186 auto param22 = model->addOperand(&type4); 4187 auto param23 = model->addOperand(&type4); 4188 auto op42 = model->addOperand(&type14); 4189 // Phase 2, operations 4190 static float op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 4191 model->setOperandValue(op22, op22_init, sizeof(float) * 4); 4192 static float op32_init[] = {0.0f}; 4193 model->setOperandValue(op32, op32_init, sizeof(float) * 1); 4194 static int32_t param18_init[] = {2}; 4195 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4196 static int32_t param19_init[] = {1}; 4197 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4198 static int32_t param20_init[] = {1}; 4199 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4200 static int32_t param21_init[] = {0}; 4201 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4202 static bool8 layout_init[] = {true}; 4203 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4204 static int32_t param22_init[] = {1}; 4205 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4206 static int32_t param23_init[] = {1}; 4207 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4208 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4209 // Phase 3, inputs and outputs 4210 model->identifyInputsAndOutputs( 4211 {op12}, 4212 {op42}); 4213 // Phase 4: set relaxed execution 4214 model->relaxComputationFloat32toFloat16(true); 4215 assert(model->isValid()); 4216 } 4217 4218 inline bool is_ignored_nchw_relaxed_3(int i) { 4219 static std::set<int> ignore = {}; 4220 return ignore.find(i) != ignore.end(); 4221 } 4222 4223 void CreateModel_nchw_quant8_3(Model *model) { 4224 OperandType type0(Type::BOOL, {}); 4225 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.5f, 0); 4226 OperandType type16(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 2}, 0.125f, 0); 4227 OperandType type4(Type::INT32, {}); 4228 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 4229 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 4230 // Phase 1, operands 4231 auto op12 = model->addOperand(&type15); 4232 auto op22 = model->addOperand(&type8); 4233 auto op32 = model->addOperand(&type9); 4234 auto param18 = model->addOperand(&type4); 4235 auto param19 = model->addOperand(&type4); 4236 auto param20 = model->addOperand(&type4); 4237 auto param21 = model->addOperand(&type4); 4238 auto layout = model->addOperand(&type0); 4239 auto param22 = model->addOperand(&type4); 4240 auto param23 = model->addOperand(&type4); 4241 auto op42 = model->addOperand(&type16); 4242 // Phase 2, operations 4243 static uint8_t op22_init[] = {2, 2, 2, 2}; 4244 model->setOperandValue(op22, op22_init, sizeof(uint8_t) * 4); 4245 static int32_t op32_init[] = {0}; 4246 model->setOperandValue(op32, op32_init, sizeof(int32_t) * 1); 4247 static int32_t param18_init[] = {2}; 4248 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4249 static int32_t param19_init[] = {1}; 4250 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4251 static int32_t param20_init[] = {1}; 4252 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4253 static int32_t param21_init[] = {0}; 4254 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4255 static bool8 layout_init[] = {true}; 4256 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4257 static int32_t param22_init[] = {1}; 4258 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4259 static int32_t param23_init[] = {1}; 4260 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4261 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4262 // Phase 3, inputs and outputs 4263 model->identifyInputsAndOutputs( 4264 {op12}, 4265 {op42}); 4266 assert(model->isValid()); 4267 } 4268 4269 inline bool is_ignored_nchw_quant8_3(int i) { 4270 static std::set<int> ignore = {}; 4271 return ignore.find(i) != ignore.end(); 4272 } 4273 4274 void CreateModel_nchw_float16_3(Model *model) { 4275 OperandType type0(Type::BOOL, {}); 4276 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 4277 OperandType type12(Type::TENSOR_FLOAT16, {1}); 4278 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 4279 OperandType type18(Type::TENSOR_FLOAT16, {1, 1, 2, 2}); 4280 OperandType type4(Type::INT32, {}); 4281 // Phase 1, operands 4282 auto op12 = model->addOperand(&type17); 4283 auto op22 = model->addOperand(&type11); 4284 auto op32 = model->addOperand(&type12); 4285 auto param18 = model->addOperand(&type4); 4286 auto param19 = model->addOperand(&type4); 4287 auto param20 = model->addOperand(&type4); 4288 auto param21 = model->addOperand(&type4); 4289 auto layout = model->addOperand(&type0); 4290 auto param22 = model->addOperand(&type4); 4291 auto param23 = model->addOperand(&type4); 4292 auto op42 = model->addOperand(&type18); 4293 // Phase 2, operations 4294 static _Float16 op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 4295 model->setOperandValue(op22, op22_init, sizeof(_Float16) * 4); 4296 static _Float16 op32_init[] = {0.0f}; 4297 model->setOperandValue(op32, op32_init, sizeof(_Float16) * 1); 4298 static int32_t param18_init[] = {2}; 4299 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4300 static int32_t param19_init[] = {1}; 4301 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4302 static int32_t param20_init[] = {1}; 4303 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4304 static int32_t param21_init[] = {0}; 4305 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4306 static bool8 layout_init[] = {true}; 4307 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4308 static int32_t param22_init[] = {1}; 4309 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4310 static int32_t param23_init[] = {1}; 4311 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4312 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4313 // Phase 3, inputs and outputs 4314 model->identifyInputsAndOutputs( 4315 {op12}, 4316 {op42}); 4317 assert(model->isValid()); 4318 } 4319 4320 inline bool is_ignored_nchw_float16_3(int i) { 4321 static std::set<int> ignore = {}; 4322 return ignore.find(i) != ignore.end(); 4323 } 4324 4325 void CreateModel_nchw_weight_as_input_3(Model *model) { 4326 OperandType type0(Type::BOOL, {}); 4327 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 4328 OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 2, 2}); 4329 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4330 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4331 OperandType type4(Type::INT32, {}); 4332 // Phase 1, operands 4333 auto op12 = model->addOperand(&type13); 4334 auto op22 = model->addOperand(&type2); 4335 auto op32 = model->addOperand(&type3); 4336 auto param18 = model->addOperand(&type4); 4337 auto param19 = model->addOperand(&type4); 4338 auto param20 = model->addOperand(&type4); 4339 auto param21 = model->addOperand(&type4); 4340 auto layout = model->addOperand(&type0); 4341 auto param22 = model->addOperand(&type4); 4342 auto param23 = model->addOperand(&type4); 4343 auto op42 = model->addOperand(&type14); 4344 // Phase 2, operations 4345 static int32_t param18_init[] = {2}; 4346 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4347 static int32_t param19_init[] = {1}; 4348 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4349 static int32_t param20_init[] = {1}; 4350 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4351 static int32_t param21_init[] = {0}; 4352 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4353 static bool8 layout_init[] = {true}; 4354 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4355 static int32_t param22_init[] = {1}; 4356 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4357 static int32_t param23_init[] = {1}; 4358 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4359 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4360 // Phase 3, inputs and outputs 4361 model->identifyInputsAndOutputs( 4362 {op12, op22, op32}, 4363 {op42}); 4364 assert(model->isValid()); 4365 } 4366 4367 inline bool is_ignored_nchw_weight_as_input_3(int i) { 4368 static std::set<int> ignore = {}; 4369 return ignore.find(i) != ignore.end(); 4370 } 4371 4372 void CreateModel_nchw_weight_as_input_relaxed_3(Model *model) { 4373 OperandType type0(Type::BOOL, {}); 4374 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 4375 OperandType type14(Type::TENSOR_FLOAT32, {1, 1, 2, 2}); 4376 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4377 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4378 OperandType type4(Type::INT32, {}); 4379 // Phase 1, operands 4380 auto op12 = model->addOperand(&type13); 4381 auto op22 = model->addOperand(&type2); 4382 auto op32 = model->addOperand(&type3); 4383 auto param18 = model->addOperand(&type4); 4384 auto param19 = model->addOperand(&type4); 4385 auto param20 = model->addOperand(&type4); 4386 auto param21 = model->addOperand(&type4); 4387 auto layout = model->addOperand(&type0); 4388 auto param22 = model->addOperand(&type4); 4389 auto param23 = model->addOperand(&type4); 4390 auto op42 = model->addOperand(&type14); 4391 // Phase 2, operations 4392 static int32_t param18_init[] = {2}; 4393 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4394 static int32_t param19_init[] = {1}; 4395 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4396 static int32_t param20_init[] = {1}; 4397 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4398 static int32_t param21_init[] = {0}; 4399 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4400 static bool8 layout_init[] = {true}; 4401 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4402 static int32_t param22_init[] = {1}; 4403 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4404 static int32_t param23_init[] = {1}; 4405 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4406 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4407 // Phase 3, inputs and outputs 4408 model->identifyInputsAndOutputs( 4409 {op12, op22, op32}, 4410 {op42}); 4411 // Phase 4: set relaxed execution 4412 model->relaxComputationFloat32toFloat16(true); 4413 assert(model->isValid()); 4414 } 4415 4416 inline bool is_ignored_nchw_weight_as_input_relaxed_3(int i) { 4417 static std::set<int> ignore = {}; 4418 return ignore.find(i) != ignore.end(); 4419 } 4420 4421 void CreateModel_nchw_weight_as_input_quant8_3(Model *model) { 4422 OperandType type0(Type::BOOL, {}); 4423 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.5f, 0); 4424 OperandType type16(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 2}, 0.125f, 0); 4425 OperandType type4(Type::INT32, {}); 4426 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 4427 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 4428 // Phase 1, operands 4429 auto op12 = model->addOperand(&type15); 4430 auto op22 = model->addOperand(&type8); 4431 auto op32 = model->addOperand(&type9); 4432 auto param18 = model->addOperand(&type4); 4433 auto param19 = model->addOperand(&type4); 4434 auto param20 = model->addOperand(&type4); 4435 auto param21 = model->addOperand(&type4); 4436 auto layout = model->addOperand(&type0); 4437 auto param22 = model->addOperand(&type4); 4438 auto param23 = model->addOperand(&type4); 4439 auto op42 = model->addOperand(&type16); 4440 // Phase 2, operations 4441 static int32_t param18_init[] = {2}; 4442 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4443 static int32_t param19_init[] = {1}; 4444 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4445 static int32_t param20_init[] = {1}; 4446 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4447 static int32_t param21_init[] = {0}; 4448 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4449 static bool8 layout_init[] = {true}; 4450 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4451 static int32_t param22_init[] = {1}; 4452 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4453 static int32_t param23_init[] = {1}; 4454 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4455 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4456 // Phase 3, inputs and outputs 4457 model->identifyInputsAndOutputs( 4458 {op12, op22, op32}, 4459 {op42}); 4460 assert(model->isValid()); 4461 } 4462 4463 inline bool is_ignored_nchw_weight_as_input_quant8_3(int i) { 4464 static std::set<int> ignore = {}; 4465 return ignore.find(i) != ignore.end(); 4466 } 4467 4468 void CreateModel_nchw_weight_as_input_float16_3(Model *model) { 4469 OperandType type0(Type::BOOL, {}); 4470 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 4471 OperandType type12(Type::TENSOR_FLOAT16, {1}); 4472 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 4473 OperandType type18(Type::TENSOR_FLOAT16, {1, 1, 2, 2}); 4474 OperandType type4(Type::INT32, {}); 4475 // Phase 1, operands 4476 auto op12 = model->addOperand(&type17); 4477 auto op22 = model->addOperand(&type11); 4478 auto op32 = model->addOperand(&type12); 4479 auto param18 = model->addOperand(&type4); 4480 auto param19 = model->addOperand(&type4); 4481 auto param20 = model->addOperand(&type4); 4482 auto param21 = model->addOperand(&type4); 4483 auto layout = model->addOperand(&type0); 4484 auto param22 = model->addOperand(&type4); 4485 auto param23 = model->addOperand(&type4); 4486 auto op42 = model->addOperand(&type18); 4487 // Phase 2, operations 4488 static int32_t param18_init[] = {2}; 4489 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4490 static int32_t param19_init[] = {1}; 4491 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4492 static int32_t param20_init[] = {1}; 4493 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4494 static int32_t param21_init[] = {0}; 4495 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4496 static bool8 layout_init[] = {true}; 4497 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4498 static int32_t param22_init[] = {1}; 4499 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4500 static int32_t param23_init[] = {1}; 4501 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4502 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4503 // Phase 3, inputs and outputs 4504 model->identifyInputsAndOutputs( 4505 {op12, op22, op32}, 4506 {op42}); 4507 assert(model->isValid()); 4508 } 4509 4510 inline bool is_ignored_nchw_weight_as_input_float16_3(int i) { 4511 static std::set<int> ignore = {}; 4512 return ignore.find(i) != ignore.end(); 4513 } 4514 4515 void CreateModel_dynamic_output_shape_nhwc_3(Model *model) { 4516 OperandType type0(Type::BOOL, {}); 4517 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 4518 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 4519 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4520 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4521 OperandType type4(Type::INT32, {}); 4522 // Phase 1, operands 4523 auto op12 = model->addOperand(&type1); 4524 auto op22 = model->addOperand(&type2); 4525 auto op32 = model->addOperand(&type3); 4526 auto param18 = model->addOperand(&type4); 4527 auto param19 = model->addOperand(&type4); 4528 auto param20 = model->addOperand(&type4); 4529 auto param21 = model->addOperand(&type4); 4530 auto layout = model->addOperand(&type0); 4531 auto param22 = model->addOperand(&type4); 4532 auto param23 = model->addOperand(&type4); 4533 auto op42 = model->addOperand(&type19); 4534 // Phase 2, operations 4535 static float op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 4536 model->setOperandValue(op22, op22_init, sizeof(float) * 4); 4537 static float op32_init[] = {0.0f}; 4538 model->setOperandValue(op32, op32_init, sizeof(float) * 1); 4539 static int32_t param18_init[] = {2}; 4540 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4541 static int32_t param19_init[] = {1}; 4542 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4543 static int32_t param20_init[] = {1}; 4544 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4545 static int32_t param21_init[] = {0}; 4546 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4547 static bool8 layout_init[] = {false}; 4548 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4549 static int32_t param22_init[] = {1}; 4550 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4551 static int32_t param23_init[] = {1}; 4552 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4553 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4554 // Phase 3, inputs and outputs 4555 model->identifyInputsAndOutputs( 4556 {op12}, 4557 {op42}); 4558 assert(model->isValid()); 4559 } 4560 4561 inline bool is_ignored_dynamic_output_shape_nhwc_3(int i) { 4562 static std::set<int> ignore = {}; 4563 return ignore.find(i) != ignore.end(); 4564 } 4565 4566 void CreateModel_dynamic_output_shape_nhwc_relaxed_3(Model *model) { 4567 OperandType type0(Type::BOOL, {}); 4568 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 4569 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 4570 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4571 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4572 OperandType type4(Type::INT32, {}); 4573 // Phase 1, operands 4574 auto op12 = model->addOperand(&type1); 4575 auto op22 = model->addOperand(&type2); 4576 auto op32 = model->addOperand(&type3); 4577 auto param18 = model->addOperand(&type4); 4578 auto param19 = model->addOperand(&type4); 4579 auto param20 = model->addOperand(&type4); 4580 auto param21 = model->addOperand(&type4); 4581 auto layout = model->addOperand(&type0); 4582 auto param22 = model->addOperand(&type4); 4583 auto param23 = model->addOperand(&type4); 4584 auto op42 = model->addOperand(&type19); 4585 // Phase 2, operations 4586 static float op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 4587 model->setOperandValue(op22, op22_init, sizeof(float) * 4); 4588 static float op32_init[] = {0.0f}; 4589 model->setOperandValue(op32, op32_init, sizeof(float) * 1); 4590 static int32_t param18_init[] = {2}; 4591 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4592 static int32_t param19_init[] = {1}; 4593 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4594 static int32_t param20_init[] = {1}; 4595 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4596 static int32_t param21_init[] = {0}; 4597 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4598 static bool8 layout_init[] = {false}; 4599 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4600 static int32_t param22_init[] = {1}; 4601 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4602 static int32_t param23_init[] = {1}; 4603 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4604 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4605 // Phase 3, inputs and outputs 4606 model->identifyInputsAndOutputs( 4607 {op12}, 4608 {op42}); 4609 // Phase 4: set relaxed execution 4610 model->relaxComputationFloat32toFloat16(true); 4611 assert(model->isValid()); 4612 } 4613 4614 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_3(int i) { 4615 static std::set<int> ignore = {}; 4616 return ignore.find(i) != ignore.end(); 4617 } 4618 4619 void CreateModel_dynamic_output_shape_nhwc_quant8_3(Model *model) { 4620 OperandType type0(Type::BOOL, {}); 4621 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 4622 OperandType type4(Type::INT32, {}); 4623 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.5f, 0); 4624 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 4625 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 4626 // Phase 1, operands 4627 auto op12 = model->addOperand(&type7); 4628 auto op22 = model->addOperand(&type8); 4629 auto op32 = model->addOperand(&type9); 4630 auto param18 = model->addOperand(&type4); 4631 auto param19 = model->addOperand(&type4); 4632 auto param20 = model->addOperand(&type4); 4633 auto param21 = model->addOperand(&type4); 4634 auto layout = model->addOperand(&type0); 4635 auto param22 = model->addOperand(&type4); 4636 auto param23 = model->addOperand(&type4); 4637 auto op42 = model->addOperand(&type20); 4638 // Phase 2, operations 4639 static uint8_t op22_init[] = {2, 2, 2, 2}; 4640 model->setOperandValue(op22, op22_init, sizeof(uint8_t) * 4); 4641 static int32_t op32_init[] = {0}; 4642 model->setOperandValue(op32, op32_init, sizeof(int32_t) * 1); 4643 static int32_t param18_init[] = {2}; 4644 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4645 static int32_t param19_init[] = {1}; 4646 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4647 static int32_t param20_init[] = {1}; 4648 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4649 static int32_t param21_init[] = {0}; 4650 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4651 static bool8 layout_init[] = {false}; 4652 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4653 static int32_t param22_init[] = {1}; 4654 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4655 static int32_t param23_init[] = {1}; 4656 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4657 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4658 // Phase 3, inputs and outputs 4659 model->identifyInputsAndOutputs( 4660 {op12}, 4661 {op42}); 4662 assert(model->isValid()); 4663 } 4664 4665 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_3(int i) { 4666 static std::set<int> ignore = {}; 4667 return ignore.find(i) != ignore.end(); 4668 } 4669 4670 void CreateModel_dynamic_output_shape_nhwc_float16_3(Model *model) { 4671 OperandType type0(Type::BOOL, {}); 4672 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 4673 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 4674 OperandType type12(Type::TENSOR_FLOAT16, {1}); 4675 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 4676 OperandType type4(Type::INT32, {}); 4677 // Phase 1, operands 4678 auto op12 = model->addOperand(&type10); 4679 auto op22 = model->addOperand(&type11); 4680 auto op32 = model->addOperand(&type12); 4681 auto param18 = model->addOperand(&type4); 4682 auto param19 = model->addOperand(&type4); 4683 auto param20 = model->addOperand(&type4); 4684 auto param21 = model->addOperand(&type4); 4685 auto layout = model->addOperand(&type0); 4686 auto param22 = model->addOperand(&type4); 4687 auto param23 = model->addOperand(&type4); 4688 auto op42 = model->addOperand(&type21); 4689 // Phase 2, operations 4690 static _Float16 op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 4691 model->setOperandValue(op22, op22_init, sizeof(_Float16) * 4); 4692 static _Float16 op32_init[] = {0.0f}; 4693 model->setOperandValue(op32, op32_init, sizeof(_Float16) * 1); 4694 static int32_t param18_init[] = {2}; 4695 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4696 static int32_t param19_init[] = {1}; 4697 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4698 static int32_t param20_init[] = {1}; 4699 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4700 static int32_t param21_init[] = {0}; 4701 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4702 static bool8 layout_init[] = {false}; 4703 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4704 static int32_t param22_init[] = {1}; 4705 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4706 static int32_t param23_init[] = {1}; 4707 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4708 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4709 // Phase 3, inputs and outputs 4710 model->identifyInputsAndOutputs( 4711 {op12}, 4712 {op42}); 4713 assert(model->isValid()); 4714 } 4715 4716 inline bool is_ignored_dynamic_output_shape_nhwc_float16_3(int i) { 4717 static std::set<int> ignore = {}; 4718 return ignore.find(i) != ignore.end(); 4719 } 4720 4721 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_3(Model *model) { 4722 OperandType type0(Type::BOOL, {}); 4723 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 4724 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 4725 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4726 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4727 OperandType type4(Type::INT32, {}); 4728 // Phase 1, operands 4729 auto op12 = model->addOperand(&type1); 4730 auto op22 = model->addOperand(&type2); 4731 auto op32 = model->addOperand(&type3); 4732 auto param18 = model->addOperand(&type4); 4733 auto param19 = model->addOperand(&type4); 4734 auto param20 = model->addOperand(&type4); 4735 auto param21 = model->addOperand(&type4); 4736 auto layout = model->addOperand(&type0); 4737 auto param22 = model->addOperand(&type4); 4738 auto param23 = model->addOperand(&type4); 4739 auto op42 = model->addOperand(&type19); 4740 // Phase 2, operations 4741 static int32_t param18_init[] = {2}; 4742 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4743 static int32_t param19_init[] = {1}; 4744 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4745 static int32_t param20_init[] = {1}; 4746 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4747 static int32_t param21_init[] = {0}; 4748 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4749 static bool8 layout_init[] = {false}; 4750 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4751 static int32_t param22_init[] = {1}; 4752 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4753 static int32_t param23_init[] = {1}; 4754 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4755 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4756 // Phase 3, inputs and outputs 4757 model->identifyInputsAndOutputs( 4758 {op12, op22, op32}, 4759 {op42}); 4760 assert(model->isValid()); 4761 } 4762 4763 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_3(int i) { 4764 static std::set<int> ignore = {}; 4765 return ignore.find(i) != ignore.end(); 4766 } 4767 4768 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_relaxed_3(Model *model) { 4769 OperandType type0(Type::BOOL, {}); 4770 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 4771 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 4772 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4773 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4774 OperandType type4(Type::INT32, {}); 4775 // Phase 1, operands 4776 auto op12 = model->addOperand(&type1); 4777 auto op22 = model->addOperand(&type2); 4778 auto op32 = model->addOperand(&type3); 4779 auto param18 = model->addOperand(&type4); 4780 auto param19 = model->addOperand(&type4); 4781 auto param20 = model->addOperand(&type4); 4782 auto param21 = model->addOperand(&type4); 4783 auto layout = model->addOperand(&type0); 4784 auto param22 = model->addOperand(&type4); 4785 auto param23 = model->addOperand(&type4); 4786 auto op42 = model->addOperand(&type19); 4787 // Phase 2, operations 4788 static int32_t param18_init[] = {2}; 4789 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4790 static int32_t param19_init[] = {1}; 4791 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4792 static int32_t param20_init[] = {1}; 4793 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4794 static int32_t param21_init[] = {0}; 4795 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4796 static bool8 layout_init[] = {false}; 4797 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4798 static int32_t param22_init[] = {1}; 4799 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4800 static int32_t param23_init[] = {1}; 4801 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4802 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4803 // Phase 3, inputs and outputs 4804 model->identifyInputsAndOutputs( 4805 {op12, op22, op32}, 4806 {op42}); 4807 // Phase 4: set relaxed execution 4808 model->relaxComputationFloat32toFloat16(true); 4809 assert(model->isValid()); 4810 } 4811 4812 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_relaxed_3(int i) { 4813 static std::set<int> ignore = {}; 4814 return ignore.find(i) != ignore.end(); 4815 } 4816 4817 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_quant8_3(Model *model) { 4818 OperandType type0(Type::BOOL, {}); 4819 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 4820 OperandType type4(Type::INT32, {}); 4821 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.5f, 0); 4822 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 4823 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 4824 // Phase 1, operands 4825 auto op12 = model->addOperand(&type7); 4826 auto op22 = model->addOperand(&type8); 4827 auto op32 = model->addOperand(&type9); 4828 auto param18 = model->addOperand(&type4); 4829 auto param19 = model->addOperand(&type4); 4830 auto param20 = model->addOperand(&type4); 4831 auto param21 = model->addOperand(&type4); 4832 auto layout = model->addOperand(&type0); 4833 auto param22 = model->addOperand(&type4); 4834 auto param23 = model->addOperand(&type4); 4835 auto op42 = model->addOperand(&type20); 4836 // Phase 2, operations 4837 static int32_t param18_init[] = {2}; 4838 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4839 static int32_t param19_init[] = {1}; 4840 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4841 static int32_t param20_init[] = {1}; 4842 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4843 static int32_t param21_init[] = {0}; 4844 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4845 static bool8 layout_init[] = {false}; 4846 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4847 static int32_t param22_init[] = {1}; 4848 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4849 static int32_t param23_init[] = {1}; 4850 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4851 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4852 // Phase 3, inputs and outputs 4853 model->identifyInputsAndOutputs( 4854 {op12, op22, op32}, 4855 {op42}); 4856 assert(model->isValid()); 4857 } 4858 4859 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_quant8_3(int i) { 4860 static std::set<int> ignore = {}; 4861 return ignore.find(i) != ignore.end(); 4862 } 4863 4864 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_float16_3(Model *model) { 4865 OperandType type0(Type::BOOL, {}); 4866 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 4867 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 4868 OperandType type12(Type::TENSOR_FLOAT16, {1}); 4869 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 4870 OperandType type4(Type::INT32, {}); 4871 // Phase 1, operands 4872 auto op12 = model->addOperand(&type10); 4873 auto op22 = model->addOperand(&type11); 4874 auto op32 = model->addOperand(&type12); 4875 auto param18 = model->addOperand(&type4); 4876 auto param19 = model->addOperand(&type4); 4877 auto param20 = model->addOperand(&type4); 4878 auto param21 = model->addOperand(&type4); 4879 auto layout = model->addOperand(&type0); 4880 auto param22 = model->addOperand(&type4); 4881 auto param23 = model->addOperand(&type4); 4882 auto op42 = model->addOperand(&type21); 4883 // Phase 2, operations 4884 static int32_t param18_init[] = {2}; 4885 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4886 static int32_t param19_init[] = {1}; 4887 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4888 static int32_t param20_init[] = {1}; 4889 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4890 static int32_t param21_init[] = {0}; 4891 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4892 static bool8 layout_init[] = {false}; 4893 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4894 static int32_t param22_init[] = {1}; 4895 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4896 static int32_t param23_init[] = {1}; 4897 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4898 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4899 // Phase 3, inputs and outputs 4900 model->identifyInputsAndOutputs( 4901 {op12, op22, op32}, 4902 {op42}); 4903 assert(model->isValid()); 4904 } 4905 4906 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_float16_3(int i) { 4907 static std::set<int> ignore = {}; 4908 return ignore.find(i) != ignore.end(); 4909 } 4910 4911 void CreateModel_dynamic_output_shape_nchw_3(Model *model) { 4912 OperandType type0(Type::BOOL, {}); 4913 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 4914 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 4915 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4916 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4917 OperandType type4(Type::INT32, {}); 4918 // Phase 1, operands 4919 auto op12 = model->addOperand(&type13); 4920 auto op22 = model->addOperand(&type2); 4921 auto op32 = model->addOperand(&type3); 4922 auto param18 = model->addOperand(&type4); 4923 auto param19 = model->addOperand(&type4); 4924 auto param20 = model->addOperand(&type4); 4925 auto param21 = model->addOperand(&type4); 4926 auto layout = model->addOperand(&type0); 4927 auto param22 = model->addOperand(&type4); 4928 auto param23 = model->addOperand(&type4); 4929 auto op42 = model->addOperand(&type19); 4930 // Phase 2, operations 4931 static float op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 4932 model->setOperandValue(op22, op22_init, sizeof(float) * 4); 4933 static float op32_init[] = {0.0f}; 4934 model->setOperandValue(op32, op32_init, sizeof(float) * 1); 4935 static int32_t param18_init[] = {2}; 4936 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4937 static int32_t param19_init[] = {1}; 4938 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4939 static int32_t param20_init[] = {1}; 4940 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4941 static int32_t param21_init[] = {0}; 4942 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4943 static bool8 layout_init[] = {true}; 4944 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4945 static int32_t param22_init[] = {1}; 4946 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4947 static int32_t param23_init[] = {1}; 4948 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 4949 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 4950 // Phase 3, inputs and outputs 4951 model->identifyInputsAndOutputs( 4952 {op12}, 4953 {op42}); 4954 assert(model->isValid()); 4955 } 4956 4957 inline bool is_ignored_dynamic_output_shape_nchw_3(int i) { 4958 static std::set<int> ignore = {}; 4959 return ignore.find(i) != ignore.end(); 4960 } 4961 4962 void CreateModel_dynamic_output_shape_nchw_relaxed_3(Model *model) { 4963 OperandType type0(Type::BOOL, {}); 4964 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 4965 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 4966 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 4967 OperandType type3(Type::TENSOR_FLOAT32, {1}); 4968 OperandType type4(Type::INT32, {}); 4969 // Phase 1, operands 4970 auto op12 = model->addOperand(&type13); 4971 auto op22 = model->addOperand(&type2); 4972 auto op32 = model->addOperand(&type3); 4973 auto param18 = model->addOperand(&type4); 4974 auto param19 = model->addOperand(&type4); 4975 auto param20 = model->addOperand(&type4); 4976 auto param21 = model->addOperand(&type4); 4977 auto layout = model->addOperand(&type0); 4978 auto param22 = model->addOperand(&type4); 4979 auto param23 = model->addOperand(&type4); 4980 auto op42 = model->addOperand(&type19); 4981 // Phase 2, operations 4982 static float op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 4983 model->setOperandValue(op22, op22_init, sizeof(float) * 4); 4984 static float op32_init[] = {0.0f}; 4985 model->setOperandValue(op32, op32_init, sizeof(float) * 1); 4986 static int32_t param18_init[] = {2}; 4987 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 4988 static int32_t param19_init[] = {1}; 4989 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 4990 static int32_t param20_init[] = {1}; 4991 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 4992 static int32_t param21_init[] = {0}; 4993 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 4994 static bool8 layout_init[] = {true}; 4995 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4996 static int32_t param22_init[] = {1}; 4997 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 4998 static int32_t param23_init[] = {1}; 4999 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 5000 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 5001 // Phase 3, inputs and outputs 5002 model->identifyInputsAndOutputs( 5003 {op12}, 5004 {op42}); 5005 // Phase 4: set relaxed execution 5006 model->relaxComputationFloat32toFloat16(true); 5007 assert(model->isValid()); 5008 } 5009 5010 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_3(int i) { 5011 static std::set<int> ignore = {}; 5012 return ignore.find(i) != ignore.end(); 5013 } 5014 5015 void CreateModel_dynamic_output_shape_nchw_quant8_3(Model *model) { 5016 OperandType type0(Type::BOOL, {}); 5017 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.5f, 0); 5018 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 5019 OperandType type4(Type::INT32, {}); 5020 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 5021 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 5022 // Phase 1, operands 5023 auto op12 = model->addOperand(&type15); 5024 auto op22 = model->addOperand(&type8); 5025 auto op32 = model->addOperand(&type9); 5026 auto param18 = model->addOperand(&type4); 5027 auto param19 = model->addOperand(&type4); 5028 auto param20 = model->addOperand(&type4); 5029 auto param21 = model->addOperand(&type4); 5030 auto layout = model->addOperand(&type0); 5031 auto param22 = model->addOperand(&type4); 5032 auto param23 = model->addOperand(&type4); 5033 auto op42 = model->addOperand(&type20); 5034 // Phase 2, operations 5035 static uint8_t op22_init[] = {2, 2, 2, 2}; 5036 model->setOperandValue(op22, op22_init, sizeof(uint8_t) * 4); 5037 static int32_t op32_init[] = {0}; 5038 model->setOperandValue(op32, op32_init, sizeof(int32_t) * 1); 5039 static int32_t param18_init[] = {2}; 5040 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 5041 static int32_t param19_init[] = {1}; 5042 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 5043 static int32_t param20_init[] = {1}; 5044 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 5045 static int32_t param21_init[] = {0}; 5046 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 5047 static bool8 layout_init[] = {true}; 5048 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5049 static int32_t param22_init[] = {1}; 5050 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 5051 static int32_t param23_init[] = {1}; 5052 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 5053 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 5054 // Phase 3, inputs and outputs 5055 model->identifyInputsAndOutputs( 5056 {op12}, 5057 {op42}); 5058 assert(model->isValid()); 5059 } 5060 5061 inline bool is_ignored_dynamic_output_shape_nchw_quant8_3(int i) { 5062 static std::set<int> ignore = {}; 5063 return ignore.find(i) != ignore.end(); 5064 } 5065 5066 void CreateModel_dynamic_output_shape_nchw_float16_3(Model *model) { 5067 OperandType type0(Type::BOOL, {}); 5068 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 5069 OperandType type12(Type::TENSOR_FLOAT16, {1}); 5070 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 5071 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 5072 OperandType type4(Type::INT32, {}); 5073 // Phase 1, operands 5074 auto op12 = model->addOperand(&type17); 5075 auto op22 = model->addOperand(&type11); 5076 auto op32 = model->addOperand(&type12); 5077 auto param18 = model->addOperand(&type4); 5078 auto param19 = model->addOperand(&type4); 5079 auto param20 = model->addOperand(&type4); 5080 auto param21 = model->addOperand(&type4); 5081 auto layout = model->addOperand(&type0); 5082 auto param22 = model->addOperand(&type4); 5083 auto param23 = model->addOperand(&type4); 5084 auto op42 = model->addOperand(&type21); 5085 // Phase 2, operations 5086 static _Float16 op22_init[] = {0.25f, 0.25f, 0.25f, 0.25f}; 5087 model->setOperandValue(op22, op22_init, sizeof(_Float16) * 4); 5088 static _Float16 op32_init[] = {0.0f}; 5089 model->setOperandValue(op32, op32_init, sizeof(_Float16) * 1); 5090 static int32_t param18_init[] = {2}; 5091 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 5092 static int32_t param19_init[] = {1}; 5093 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 5094 static int32_t param20_init[] = {1}; 5095 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 5096 static int32_t param21_init[] = {0}; 5097 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 5098 static bool8 layout_init[] = {true}; 5099 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5100 static int32_t param22_init[] = {1}; 5101 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 5102 static int32_t param23_init[] = {1}; 5103 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 5104 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 5105 // Phase 3, inputs and outputs 5106 model->identifyInputsAndOutputs( 5107 {op12}, 5108 {op42}); 5109 assert(model->isValid()); 5110 } 5111 5112 inline bool is_ignored_dynamic_output_shape_nchw_float16_3(int i) { 5113 static std::set<int> ignore = {}; 5114 return ignore.find(i) != ignore.end(); 5115 } 5116 5117 void CreateModel_dynamic_output_shape_nchw_weight_as_input_3(Model *model) { 5118 OperandType type0(Type::BOOL, {}); 5119 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 5120 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 5121 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 5122 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5123 OperandType type4(Type::INT32, {}); 5124 // Phase 1, operands 5125 auto op12 = model->addOperand(&type13); 5126 auto op22 = model->addOperand(&type2); 5127 auto op32 = model->addOperand(&type3); 5128 auto param18 = model->addOperand(&type4); 5129 auto param19 = model->addOperand(&type4); 5130 auto param20 = model->addOperand(&type4); 5131 auto param21 = model->addOperand(&type4); 5132 auto layout = model->addOperand(&type0); 5133 auto param22 = model->addOperand(&type4); 5134 auto param23 = model->addOperand(&type4); 5135 auto op42 = model->addOperand(&type19); 5136 // Phase 2, operations 5137 static int32_t param18_init[] = {2}; 5138 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 5139 static int32_t param19_init[] = {1}; 5140 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 5141 static int32_t param20_init[] = {1}; 5142 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 5143 static int32_t param21_init[] = {0}; 5144 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 5145 static bool8 layout_init[] = {true}; 5146 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5147 static int32_t param22_init[] = {1}; 5148 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 5149 static int32_t param23_init[] = {1}; 5150 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 5151 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 5152 // Phase 3, inputs and outputs 5153 model->identifyInputsAndOutputs( 5154 {op12, op22, op32}, 5155 {op42}); 5156 assert(model->isValid()); 5157 } 5158 5159 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_3(int i) { 5160 static std::set<int> ignore = {}; 5161 return ignore.find(i) != ignore.end(); 5162 } 5163 5164 void CreateModel_dynamic_output_shape_nchw_weight_as_input_relaxed_3(Model *model) { 5165 OperandType type0(Type::BOOL, {}); 5166 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 5167 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 5168 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 5169 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5170 OperandType type4(Type::INT32, {}); 5171 // Phase 1, operands 5172 auto op12 = model->addOperand(&type13); 5173 auto op22 = model->addOperand(&type2); 5174 auto op32 = model->addOperand(&type3); 5175 auto param18 = model->addOperand(&type4); 5176 auto param19 = model->addOperand(&type4); 5177 auto param20 = model->addOperand(&type4); 5178 auto param21 = model->addOperand(&type4); 5179 auto layout = model->addOperand(&type0); 5180 auto param22 = model->addOperand(&type4); 5181 auto param23 = model->addOperand(&type4); 5182 auto op42 = model->addOperand(&type19); 5183 // Phase 2, operations 5184 static int32_t param18_init[] = {2}; 5185 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 5186 static int32_t param19_init[] = {1}; 5187 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 5188 static int32_t param20_init[] = {1}; 5189 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 5190 static int32_t param21_init[] = {0}; 5191 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 5192 static bool8 layout_init[] = {true}; 5193 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5194 static int32_t param22_init[] = {1}; 5195 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 5196 static int32_t param23_init[] = {1}; 5197 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 5198 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 5199 // Phase 3, inputs and outputs 5200 model->identifyInputsAndOutputs( 5201 {op12, op22, op32}, 5202 {op42}); 5203 // Phase 4: set relaxed execution 5204 model->relaxComputationFloat32toFloat16(true); 5205 assert(model->isValid()); 5206 } 5207 5208 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_relaxed_3(int i) { 5209 static std::set<int> ignore = {}; 5210 return ignore.find(i) != ignore.end(); 5211 } 5212 5213 void CreateModel_dynamic_output_shape_nchw_weight_as_input_quant8_3(Model *model) { 5214 OperandType type0(Type::BOOL, {}); 5215 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.5f, 0); 5216 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 5217 OperandType type4(Type::INT32, {}); 5218 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 5219 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 5220 // Phase 1, operands 5221 auto op12 = model->addOperand(&type15); 5222 auto op22 = model->addOperand(&type8); 5223 auto op32 = model->addOperand(&type9); 5224 auto param18 = model->addOperand(&type4); 5225 auto param19 = model->addOperand(&type4); 5226 auto param20 = model->addOperand(&type4); 5227 auto param21 = model->addOperand(&type4); 5228 auto layout = model->addOperand(&type0); 5229 auto param22 = model->addOperand(&type4); 5230 auto param23 = model->addOperand(&type4); 5231 auto op42 = model->addOperand(&type20); 5232 // Phase 2, operations 5233 static int32_t param18_init[] = {2}; 5234 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 5235 static int32_t param19_init[] = {1}; 5236 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 5237 static int32_t param20_init[] = {1}; 5238 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 5239 static int32_t param21_init[] = {0}; 5240 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 5241 static bool8 layout_init[] = {true}; 5242 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5243 static int32_t param22_init[] = {1}; 5244 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 5245 static int32_t param23_init[] = {1}; 5246 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 5247 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 5248 // Phase 3, inputs and outputs 5249 model->identifyInputsAndOutputs( 5250 {op12, op22, op32}, 5251 {op42}); 5252 assert(model->isValid()); 5253 } 5254 5255 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_quant8_3(int i) { 5256 static std::set<int> ignore = {}; 5257 return ignore.find(i) != ignore.end(); 5258 } 5259 5260 void CreateModel_dynamic_output_shape_nchw_weight_as_input_float16_3(Model *model) { 5261 OperandType type0(Type::BOOL, {}); 5262 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 5263 OperandType type12(Type::TENSOR_FLOAT16, {1}); 5264 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 5265 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 5266 OperandType type4(Type::INT32, {}); 5267 // Phase 1, operands 5268 auto op12 = model->addOperand(&type17); 5269 auto op22 = model->addOperand(&type11); 5270 auto op32 = model->addOperand(&type12); 5271 auto param18 = model->addOperand(&type4); 5272 auto param19 = model->addOperand(&type4); 5273 auto param20 = model->addOperand(&type4); 5274 auto param21 = model->addOperand(&type4); 5275 auto layout = model->addOperand(&type0); 5276 auto param22 = model->addOperand(&type4); 5277 auto param23 = model->addOperand(&type4); 5278 auto op42 = model->addOperand(&type21); 5279 // Phase 2, operations 5280 static int32_t param18_init[] = {2}; 5281 model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1); 5282 static int32_t param19_init[] = {1}; 5283 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 5284 static int32_t param20_init[] = {1}; 5285 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 5286 static int32_t param21_init[] = {0}; 5287 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 5288 static bool8 layout_init[] = {true}; 5289 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5290 static int32_t param22_init[] = {1}; 5291 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 5292 static int32_t param23_init[] = {1}; 5293 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 5294 model->addOperation(ANEURALNETWORKS_CONV_2D, {op12, op22, op32, param18, param19, param20, param21, layout, param22, param23}, {op42}); 5295 // Phase 3, inputs and outputs 5296 model->identifyInputsAndOutputs( 5297 {op12, op22, op32}, 5298 {op42}); 5299 assert(model->isValid()); 5300 } 5301 5302 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_float16_3(int i) { 5303 static std::set<int> ignore = {}; 5304 return ignore.find(i) != ignore.end(); 5305 } 5306 5307 void CreateModel_nhwc_4(Model *model) { 5308 OperandType type0(Type::BOOL, {}); 5309 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 5310 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5311 OperandType type4(Type::INT32, {}); 5312 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 5313 // Phase 1, operands 5314 auto op13 = model->addOperand(&type5); 5315 auto op23 = model->addOperand(&type1); 5316 auto op33 = model->addOperand(&type3); 5317 auto param24 = model->addOperand(&type4); 5318 auto param25 = model->addOperand(&type4); 5319 auto param26 = model->addOperand(&type4); 5320 auto param27 = model->addOperand(&type4); 5321 auto layout = model->addOperand(&type0); 5322 auto param28 = model->addOperand(&type4); 5323 auto param29 = model->addOperand(&type4); 5324 auto op43 = model->addOperand(&type1); 5325 // Phase 2, operations 5326 static float op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 5327 model->setOperandValue(op23, op23_init, sizeof(float) * 9); 5328 static float op33_init[] = {0.0f}; 5329 model->setOperandValue(op33, op33_init, sizeof(float) * 1); 5330 static int32_t param24_init[] = {2}; 5331 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5332 static int32_t param25_init[] = {1}; 5333 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5334 static int32_t param26_init[] = {1}; 5335 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5336 static int32_t param27_init[] = {0}; 5337 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5338 static bool8 layout_init[] = {false}; 5339 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5340 static int32_t param28_init[] = {3}; 5341 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5342 static int32_t param29_init[] = {3}; 5343 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5344 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5345 // Phase 3, inputs and outputs 5346 model->identifyInputsAndOutputs( 5347 {op13}, 5348 {op43}); 5349 assert(model->isValid()); 5350 } 5351 5352 inline bool is_ignored_nhwc_4(int i) { 5353 static std::set<int> ignore = {}; 5354 return ignore.find(i) != ignore.end(); 5355 } 5356 5357 void CreateModel_nhwc_relaxed_4(Model *model) { 5358 OperandType type0(Type::BOOL, {}); 5359 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 5360 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5361 OperandType type4(Type::INT32, {}); 5362 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 5363 // Phase 1, operands 5364 auto op13 = model->addOperand(&type5); 5365 auto op23 = model->addOperand(&type1); 5366 auto op33 = model->addOperand(&type3); 5367 auto param24 = model->addOperand(&type4); 5368 auto param25 = model->addOperand(&type4); 5369 auto param26 = model->addOperand(&type4); 5370 auto param27 = model->addOperand(&type4); 5371 auto layout = model->addOperand(&type0); 5372 auto param28 = model->addOperand(&type4); 5373 auto param29 = model->addOperand(&type4); 5374 auto op43 = model->addOperand(&type1); 5375 // Phase 2, operations 5376 static float op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 5377 model->setOperandValue(op23, op23_init, sizeof(float) * 9); 5378 static float op33_init[] = {0.0f}; 5379 model->setOperandValue(op33, op33_init, sizeof(float) * 1); 5380 static int32_t param24_init[] = {2}; 5381 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5382 static int32_t param25_init[] = {1}; 5383 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5384 static int32_t param26_init[] = {1}; 5385 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5386 static int32_t param27_init[] = {0}; 5387 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5388 static bool8 layout_init[] = {false}; 5389 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5390 static int32_t param28_init[] = {3}; 5391 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5392 static int32_t param29_init[] = {3}; 5393 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5394 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5395 // Phase 3, inputs and outputs 5396 model->identifyInputsAndOutputs( 5397 {op13}, 5398 {op43}); 5399 // Phase 4: set relaxed execution 5400 model->relaxComputationFloat32toFloat16(true); 5401 assert(model->isValid()); 5402 } 5403 5404 inline bool is_ignored_nhwc_relaxed_4(int i) { 5405 static std::set<int> ignore = {}; 5406 return ignore.find(i) != ignore.end(); 5407 } 5408 5409 void CreateModel_nhwc_quant8_4(Model *model) { 5410 OperandType type0(Type::BOOL, {}); 5411 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 9, 9, 1}, 0.5f, 0); 5412 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 5413 OperandType type4(Type::INT32, {}); 5414 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 5415 // Phase 1, operands 5416 auto op13 = model->addOperand(&type22); 5417 auto op23 = model->addOperand(&type23); 5418 auto op33 = model->addOperand(&type9); 5419 auto param24 = model->addOperand(&type4); 5420 auto param25 = model->addOperand(&type4); 5421 auto param26 = model->addOperand(&type4); 5422 auto param27 = model->addOperand(&type4); 5423 auto layout = model->addOperand(&type0); 5424 auto param28 = model->addOperand(&type4); 5425 auto param29 = model->addOperand(&type4); 5426 auto op43 = model->addOperand(&type23); 5427 // Phase 2, operations 5428 static uint8_t op23_init[] = {8, 16, 24, 32, 40, 48, 56, 64, 72}; 5429 model->setOperandValue(op23, op23_init, sizeof(uint8_t) * 9); 5430 static int32_t op33_init[] = {0}; 5431 model->setOperandValue(op33, op33_init, sizeof(int32_t) * 1); 5432 static int32_t param24_init[] = {2}; 5433 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5434 static int32_t param25_init[] = {1}; 5435 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5436 static int32_t param26_init[] = {1}; 5437 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5438 static int32_t param27_init[] = {0}; 5439 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5440 static bool8 layout_init[] = {false}; 5441 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5442 static int32_t param28_init[] = {3}; 5443 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5444 static int32_t param29_init[] = {3}; 5445 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5446 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5447 // Phase 3, inputs and outputs 5448 model->identifyInputsAndOutputs( 5449 {op13}, 5450 {op43}); 5451 assert(model->isValid()); 5452 } 5453 5454 inline bool is_ignored_nhwc_quant8_4(int i) { 5455 static std::set<int> ignore = {}; 5456 return ignore.find(i) != ignore.end(); 5457 } 5458 5459 void CreateModel_nhwc_float16_4(Model *model) { 5460 OperandType type0(Type::BOOL, {}); 5461 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 5462 OperandType type12(Type::TENSOR_FLOAT16, {1}); 5463 OperandType type24(Type::TENSOR_FLOAT16, {1, 9, 9, 1}); 5464 OperandType type4(Type::INT32, {}); 5465 // Phase 1, operands 5466 auto op13 = model->addOperand(&type24); 5467 auto op23 = model->addOperand(&type10); 5468 auto op33 = model->addOperand(&type12); 5469 auto param24 = model->addOperand(&type4); 5470 auto param25 = model->addOperand(&type4); 5471 auto param26 = model->addOperand(&type4); 5472 auto param27 = model->addOperand(&type4); 5473 auto layout = model->addOperand(&type0); 5474 auto param28 = model->addOperand(&type4); 5475 auto param29 = model->addOperand(&type4); 5476 auto op43 = model->addOperand(&type10); 5477 // Phase 2, operations 5478 static _Float16 op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 5479 model->setOperandValue(op23, op23_init, sizeof(_Float16) * 9); 5480 static _Float16 op33_init[] = {0.0f}; 5481 model->setOperandValue(op33, op33_init, sizeof(_Float16) * 1); 5482 static int32_t param24_init[] = {2}; 5483 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5484 static int32_t param25_init[] = {1}; 5485 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5486 static int32_t param26_init[] = {1}; 5487 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5488 static int32_t param27_init[] = {0}; 5489 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5490 static bool8 layout_init[] = {false}; 5491 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5492 static int32_t param28_init[] = {3}; 5493 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5494 static int32_t param29_init[] = {3}; 5495 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5496 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5497 // Phase 3, inputs and outputs 5498 model->identifyInputsAndOutputs( 5499 {op13}, 5500 {op43}); 5501 assert(model->isValid()); 5502 } 5503 5504 inline bool is_ignored_nhwc_float16_4(int i) { 5505 static std::set<int> ignore = {}; 5506 return ignore.find(i) != ignore.end(); 5507 } 5508 5509 void CreateModel_nhwc_weight_as_input_4(Model *model) { 5510 OperandType type0(Type::BOOL, {}); 5511 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 5512 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5513 OperandType type4(Type::INT32, {}); 5514 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 5515 // Phase 1, operands 5516 auto op13 = model->addOperand(&type5); 5517 auto op23 = model->addOperand(&type1); 5518 auto op33 = model->addOperand(&type3); 5519 auto param24 = model->addOperand(&type4); 5520 auto param25 = model->addOperand(&type4); 5521 auto param26 = model->addOperand(&type4); 5522 auto param27 = model->addOperand(&type4); 5523 auto layout = model->addOperand(&type0); 5524 auto param28 = model->addOperand(&type4); 5525 auto param29 = model->addOperand(&type4); 5526 auto op43 = model->addOperand(&type1); 5527 // Phase 2, operations 5528 static int32_t param24_init[] = {2}; 5529 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5530 static int32_t param25_init[] = {1}; 5531 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5532 static int32_t param26_init[] = {1}; 5533 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5534 static int32_t param27_init[] = {0}; 5535 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5536 static bool8 layout_init[] = {false}; 5537 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5538 static int32_t param28_init[] = {3}; 5539 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5540 static int32_t param29_init[] = {3}; 5541 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5542 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5543 // Phase 3, inputs and outputs 5544 model->identifyInputsAndOutputs( 5545 {op13, op23, op33}, 5546 {op43}); 5547 assert(model->isValid()); 5548 } 5549 5550 inline bool is_ignored_nhwc_weight_as_input_4(int i) { 5551 static std::set<int> ignore = {}; 5552 return ignore.find(i) != ignore.end(); 5553 } 5554 5555 void CreateModel_nhwc_weight_as_input_relaxed_4(Model *model) { 5556 OperandType type0(Type::BOOL, {}); 5557 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 5558 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5559 OperandType type4(Type::INT32, {}); 5560 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 5561 // Phase 1, operands 5562 auto op13 = model->addOperand(&type5); 5563 auto op23 = model->addOperand(&type1); 5564 auto op33 = model->addOperand(&type3); 5565 auto param24 = model->addOperand(&type4); 5566 auto param25 = model->addOperand(&type4); 5567 auto param26 = model->addOperand(&type4); 5568 auto param27 = model->addOperand(&type4); 5569 auto layout = model->addOperand(&type0); 5570 auto param28 = model->addOperand(&type4); 5571 auto param29 = model->addOperand(&type4); 5572 auto op43 = model->addOperand(&type1); 5573 // Phase 2, operations 5574 static int32_t param24_init[] = {2}; 5575 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5576 static int32_t param25_init[] = {1}; 5577 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5578 static int32_t param26_init[] = {1}; 5579 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5580 static int32_t param27_init[] = {0}; 5581 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5582 static bool8 layout_init[] = {false}; 5583 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5584 static int32_t param28_init[] = {3}; 5585 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5586 static int32_t param29_init[] = {3}; 5587 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5588 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5589 // Phase 3, inputs and outputs 5590 model->identifyInputsAndOutputs( 5591 {op13, op23, op33}, 5592 {op43}); 5593 // Phase 4: set relaxed execution 5594 model->relaxComputationFloat32toFloat16(true); 5595 assert(model->isValid()); 5596 } 5597 5598 inline bool is_ignored_nhwc_weight_as_input_relaxed_4(int i) { 5599 static std::set<int> ignore = {}; 5600 return ignore.find(i) != ignore.end(); 5601 } 5602 5603 void CreateModel_nhwc_weight_as_input_quant8_4(Model *model) { 5604 OperandType type0(Type::BOOL, {}); 5605 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 9, 9, 1}, 0.5f, 0); 5606 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 5607 OperandType type4(Type::INT32, {}); 5608 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 5609 // Phase 1, operands 5610 auto op13 = model->addOperand(&type22); 5611 auto op23 = model->addOperand(&type23); 5612 auto op33 = model->addOperand(&type9); 5613 auto param24 = model->addOperand(&type4); 5614 auto param25 = model->addOperand(&type4); 5615 auto param26 = model->addOperand(&type4); 5616 auto param27 = model->addOperand(&type4); 5617 auto layout = model->addOperand(&type0); 5618 auto param28 = model->addOperand(&type4); 5619 auto param29 = model->addOperand(&type4); 5620 auto op43 = model->addOperand(&type23); 5621 // Phase 2, operations 5622 static int32_t param24_init[] = {2}; 5623 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5624 static int32_t param25_init[] = {1}; 5625 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5626 static int32_t param26_init[] = {1}; 5627 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5628 static int32_t param27_init[] = {0}; 5629 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5630 static bool8 layout_init[] = {false}; 5631 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5632 static int32_t param28_init[] = {3}; 5633 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5634 static int32_t param29_init[] = {3}; 5635 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5636 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5637 // Phase 3, inputs and outputs 5638 model->identifyInputsAndOutputs( 5639 {op13, op23, op33}, 5640 {op43}); 5641 assert(model->isValid()); 5642 } 5643 5644 inline bool is_ignored_nhwc_weight_as_input_quant8_4(int i) { 5645 static std::set<int> ignore = {}; 5646 return ignore.find(i) != ignore.end(); 5647 } 5648 5649 void CreateModel_nhwc_weight_as_input_float16_4(Model *model) { 5650 OperandType type0(Type::BOOL, {}); 5651 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 5652 OperandType type12(Type::TENSOR_FLOAT16, {1}); 5653 OperandType type24(Type::TENSOR_FLOAT16, {1, 9, 9, 1}); 5654 OperandType type4(Type::INT32, {}); 5655 // Phase 1, operands 5656 auto op13 = model->addOperand(&type24); 5657 auto op23 = model->addOperand(&type10); 5658 auto op33 = model->addOperand(&type12); 5659 auto param24 = model->addOperand(&type4); 5660 auto param25 = model->addOperand(&type4); 5661 auto param26 = model->addOperand(&type4); 5662 auto param27 = model->addOperand(&type4); 5663 auto layout = model->addOperand(&type0); 5664 auto param28 = model->addOperand(&type4); 5665 auto param29 = model->addOperand(&type4); 5666 auto op43 = model->addOperand(&type10); 5667 // Phase 2, operations 5668 static int32_t param24_init[] = {2}; 5669 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5670 static int32_t param25_init[] = {1}; 5671 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5672 static int32_t param26_init[] = {1}; 5673 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5674 static int32_t param27_init[] = {0}; 5675 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5676 static bool8 layout_init[] = {false}; 5677 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5678 static int32_t param28_init[] = {3}; 5679 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5680 static int32_t param29_init[] = {3}; 5681 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5682 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5683 // Phase 3, inputs and outputs 5684 model->identifyInputsAndOutputs( 5685 {op13, op23, op33}, 5686 {op43}); 5687 assert(model->isValid()); 5688 } 5689 5690 inline bool is_ignored_nhwc_weight_as_input_float16_4(int i) { 5691 static std::set<int> ignore = {}; 5692 return ignore.find(i) != ignore.end(); 5693 } 5694 5695 void CreateModel_nchw_4(Model *model) { 5696 OperandType type0(Type::BOOL, {}); 5697 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 5698 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 5699 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 5700 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5701 OperandType type4(Type::INT32, {}); 5702 // Phase 1, operands 5703 auto op13 = model->addOperand(&type25); 5704 auto op23 = model->addOperand(&type1); 5705 auto op33 = model->addOperand(&type3); 5706 auto param24 = model->addOperand(&type4); 5707 auto param25 = model->addOperand(&type4); 5708 auto param26 = model->addOperand(&type4); 5709 auto param27 = model->addOperand(&type4); 5710 auto layout = model->addOperand(&type0); 5711 auto param28 = model->addOperand(&type4); 5712 auto param29 = model->addOperand(&type4); 5713 auto op43 = model->addOperand(&type13); 5714 // Phase 2, operations 5715 static float op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 5716 model->setOperandValue(op23, op23_init, sizeof(float) * 9); 5717 static float op33_init[] = {0.0f}; 5718 model->setOperandValue(op33, op33_init, sizeof(float) * 1); 5719 static int32_t param24_init[] = {2}; 5720 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5721 static int32_t param25_init[] = {1}; 5722 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5723 static int32_t param26_init[] = {1}; 5724 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5725 static int32_t param27_init[] = {0}; 5726 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5727 static bool8 layout_init[] = {true}; 5728 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5729 static int32_t param28_init[] = {3}; 5730 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5731 static int32_t param29_init[] = {3}; 5732 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5733 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5734 // Phase 3, inputs and outputs 5735 model->identifyInputsAndOutputs( 5736 {op13}, 5737 {op43}); 5738 assert(model->isValid()); 5739 } 5740 5741 inline bool is_ignored_nchw_4(int i) { 5742 static std::set<int> ignore = {}; 5743 return ignore.find(i) != ignore.end(); 5744 } 5745 5746 void CreateModel_nchw_relaxed_4(Model *model) { 5747 OperandType type0(Type::BOOL, {}); 5748 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 5749 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 5750 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 5751 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5752 OperandType type4(Type::INT32, {}); 5753 // Phase 1, operands 5754 auto op13 = model->addOperand(&type25); 5755 auto op23 = model->addOperand(&type1); 5756 auto op33 = model->addOperand(&type3); 5757 auto param24 = model->addOperand(&type4); 5758 auto param25 = model->addOperand(&type4); 5759 auto param26 = model->addOperand(&type4); 5760 auto param27 = model->addOperand(&type4); 5761 auto layout = model->addOperand(&type0); 5762 auto param28 = model->addOperand(&type4); 5763 auto param29 = model->addOperand(&type4); 5764 auto op43 = model->addOperand(&type13); 5765 // Phase 2, operations 5766 static float op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 5767 model->setOperandValue(op23, op23_init, sizeof(float) * 9); 5768 static float op33_init[] = {0.0f}; 5769 model->setOperandValue(op33, op33_init, sizeof(float) * 1); 5770 static int32_t param24_init[] = {2}; 5771 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5772 static int32_t param25_init[] = {1}; 5773 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5774 static int32_t param26_init[] = {1}; 5775 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5776 static int32_t param27_init[] = {0}; 5777 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5778 static bool8 layout_init[] = {true}; 5779 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5780 static int32_t param28_init[] = {3}; 5781 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5782 static int32_t param29_init[] = {3}; 5783 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5784 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5785 // Phase 3, inputs and outputs 5786 model->identifyInputsAndOutputs( 5787 {op13}, 5788 {op43}); 5789 // Phase 4: set relaxed execution 5790 model->relaxComputationFloat32toFloat16(true); 5791 assert(model->isValid()); 5792 } 5793 5794 inline bool is_ignored_nchw_relaxed_4(int i) { 5795 static std::set<int> ignore = {}; 5796 return ignore.find(i) != ignore.end(); 5797 } 5798 5799 void CreateModel_nchw_quant8_4(Model *model) { 5800 OperandType type0(Type::BOOL, {}); 5801 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 5802 OperandType type26(Type::TENSOR_QUANT8_ASYMM, {1, 1, 9, 9}, 0.5f, 0); 5803 OperandType type27(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.125f, 0); 5804 OperandType type4(Type::INT32, {}); 5805 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 5806 // Phase 1, operands 5807 auto op13 = model->addOperand(&type26); 5808 auto op23 = model->addOperand(&type23); 5809 auto op33 = model->addOperand(&type9); 5810 auto param24 = model->addOperand(&type4); 5811 auto param25 = model->addOperand(&type4); 5812 auto param26 = model->addOperand(&type4); 5813 auto param27 = model->addOperand(&type4); 5814 auto layout = model->addOperand(&type0); 5815 auto param28 = model->addOperand(&type4); 5816 auto param29 = model->addOperand(&type4); 5817 auto op43 = model->addOperand(&type27); 5818 // Phase 2, operations 5819 static uint8_t op23_init[] = {8, 16, 24, 32, 40, 48, 56, 64, 72}; 5820 model->setOperandValue(op23, op23_init, sizeof(uint8_t) * 9); 5821 static int32_t op33_init[] = {0}; 5822 model->setOperandValue(op33, op33_init, sizeof(int32_t) * 1); 5823 static int32_t param24_init[] = {2}; 5824 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5825 static int32_t param25_init[] = {1}; 5826 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5827 static int32_t param26_init[] = {1}; 5828 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5829 static int32_t param27_init[] = {0}; 5830 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5831 static bool8 layout_init[] = {true}; 5832 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5833 static int32_t param28_init[] = {3}; 5834 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5835 static int32_t param29_init[] = {3}; 5836 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5837 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5838 // Phase 3, inputs and outputs 5839 model->identifyInputsAndOutputs( 5840 {op13}, 5841 {op43}); 5842 assert(model->isValid()); 5843 } 5844 5845 inline bool is_ignored_nchw_quant8_4(int i) { 5846 static std::set<int> ignore = {}; 5847 return ignore.find(i) != ignore.end(); 5848 } 5849 5850 void CreateModel_nchw_float16_4(Model *model) { 5851 OperandType type0(Type::BOOL, {}); 5852 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 5853 OperandType type12(Type::TENSOR_FLOAT16, {1}); 5854 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 5855 OperandType type28(Type::TENSOR_FLOAT16, {1, 1, 9, 9}); 5856 OperandType type4(Type::INT32, {}); 5857 // Phase 1, operands 5858 auto op13 = model->addOperand(&type28); 5859 auto op23 = model->addOperand(&type10); 5860 auto op33 = model->addOperand(&type12); 5861 auto param24 = model->addOperand(&type4); 5862 auto param25 = model->addOperand(&type4); 5863 auto param26 = model->addOperand(&type4); 5864 auto param27 = model->addOperand(&type4); 5865 auto layout = model->addOperand(&type0); 5866 auto param28 = model->addOperand(&type4); 5867 auto param29 = model->addOperand(&type4); 5868 auto op43 = model->addOperand(&type17); 5869 // Phase 2, operations 5870 static _Float16 op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 5871 model->setOperandValue(op23, op23_init, sizeof(_Float16) * 9); 5872 static _Float16 op33_init[] = {0.0f}; 5873 model->setOperandValue(op33, op33_init, sizeof(_Float16) * 1); 5874 static int32_t param24_init[] = {2}; 5875 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5876 static int32_t param25_init[] = {1}; 5877 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5878 static int32_t param26_init[] = {1}; 5879 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5880 static int32_t param27_init[] = {0}; 5881 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5882 static bool8 layout_init[] = {true}; 5883 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5884 static int32_t param28_init[] = {3}; 5885 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5886 static int32_t param29_init[] = {3}; 5887 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5888 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5889 // Phase 3, inputs and outputs 5890 model->identifyInputsAndOutputs( 5891 {op13}, 5892 {op43}); 5893 assert(model->isValid()); 5894 } 5895 5896 inline bool is_ignored_nchw_float16_4(int i) { 5897 static std::set<int> ignore = {}; 5898 return ignore.find(i) != ignore.end(); 5899 } 5900 5901 void CreateModel_nchw_weight_as_input_4(Model *model) { 5902 OperandType type0(Type::BOOL, {}); 5903 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 5904 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 5905 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 5906 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5907 OperandType type4(Type::INT32, {}); 5908 // Phase 1, operands 5909 auto op13 = model->addOperand(&type25); 5910 auto op23 = model->addOperand(&type1); 5911 auto op33 = model->addOperand(&type3); 5912 auto param24 = model->addOperand(&type4); 5913 auto param25 = model->addOperand(&type4); 5914 auto param26 = model->addOperand(&type4); 5915 auto param27 = model->addOperand(&type4); 5916 auto layout = model->addOperand(&type0); 5917 auto param28 = model->addOperand(&type4); 5918 auto param29 = model->addOperand(&type4); 5919 auto op43 = model->addOperand(&type13); 5920 // Phase 2, operations 5921 static int32_t param24_init[] = {2}; 5922 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5923 static int32_t param25_init[] = {1}; 5924 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5925 static int32_t param26_init[] = {1}; 5926 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5927 static int32_t param27_init[] = {0}; 5928 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5929 static bool8 layout_init[] = {true}; 5930 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5931 static int32_t param28_init[] = {3}; 5932 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5933 static int32_t param29_init[] = {3}; 5934 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5935 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5936 // Phase 3, inputs and outputs 5937 model->identifyInputsAndOutputs( 5938 {op13, op23, op33}, 5939 {op43}); 5940 assert(model->isValid()); 5941 } 5942 5943 inline bool is_ignored_nchw_weight_as_input_4(int i) { 5944 static std::set<int> ignore = {}; 5945 return ignore.find(i) != ignore.end(); 5946 } 5947 5948 void CreateModel_nchw_weight_as_input_relaxed_4(Model *model) { 5949 OperandType type0(Type::BOOL, {}); 5950 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 5951 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 5952 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 5953 OperandType type3(Type::TENSOR_FLOAT32, {1}); 5954 OperandType type4(Type::INT32, {}); 5955 // Phase 1, operands 5956 auto op13 = model->addOperand(&type25); 5957 auto op23 = model->addOperand(&type1); 5958 auto op33 = model->addOperand(&type3); 5959 auto param24 = model->addOperand(&type4); 5960 auto param25 = model->addOperand(&type4); 5961 auto param26 = model->addOperand(&type4); 5962 auto param27 = model->addOperand(&type4); 5963 auto layout = model->addOperand(&type0); 5964 auto param28 = model->addOperand(&type4); 5965 auto param29 = model->addOperand(&type4); 5966 auto op43 = model->addOperand(&type13); 5967 // Phase 2, operations 5968 static int32_t param24_init[] = {2}; 5969 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 5970 static int32_t param25_init[] = {1}; 5971 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 5972 static int32_t param26_init[] = {1}; 5973 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 5974 static int32_t param27_init[] = {0}; 5975 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 5976 static bool8 layout_init[] = {true}; 5977 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5978 static int32_t param28_init[] = {3}; 5979 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 5980 static int32_t param29_init[] = {3}; 5981 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 5982 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 5983 // Phase 3, inputs and outputs 5984 model->identifyInputsAndOutputs( 5985 {op13, op23, op33}, 5986 {op43}); 5987 // Phase 4: set relaxed execution 5988 model->relaxComputationFloat32toFloat16(true); 5989 assert(model->isValid()); 5990 } 5991 5992 inline bool is_ignored_nchw_weight_as_input_relaxed_4(int i) { 5993 static std::set<int> ignore = {}; 5994 return ignore.find(i) != ignore.end(); 5995 } 5996 5997 void CreateModel_nchw_weight_as_input_quant8_4(Model *model) { 5998 OperandType type0(Type::BOOL, {}); 5999 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 6000 OperandType type26(Type::TENSOR_QUANT8_ASYMM, {1, 1, 9, 9}, 0.5f, 0); 6001 OperandType type27(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.125f, 0); 6002 OperandType type4(Type::INT32, {}); 6003 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 6004 // Phase 1, operands 6005 auto op13 = model->addOperand(&type26); 6006 auto op23 = model->addOperand(&type23); 6007 auto op33 = model->addOperand(&type9); 6008 auto param24 = model->addOperand(&type4); 6009 auto param25 = model->addOperand(&type4); 6010 auto param26 = model->addOperand(&type4); 6011 auto param27 = model->addOperand(&type4); 6012 auto layout = model->addOperand(&type0); 6013 auto param28 = model->addOperand(&type4); 6014 auto param29 = model->addOperand(&type4); 6015 auto op43 = model->addOperand(&type27); 6016 // Phase 2, operations 6017 static int32_t param24_init[] = {2}; 6018 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6019 static int32_t param25_init[] = {1}; 6020 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6021 static int32_t param26_init[] = {1}; 6022 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6023 static int32_t param27_init[] = {0}; 6024 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6025 static bool8 layout_init[] = {true}; 6026 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6027 static int32_t param28_init[] = {3}; 6028 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6029 static int32_t param29_init[] = {3}; 6030 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6031 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6032 // Phase 3, inputs and outputs 6033 model->identifyInputsAndOutputs( 6034 {op13, op23, op33}, 6035 {op43}); 6036 assert(model->isValid()); 6037 } 6038 6039 inline bool is_ignored_nchw_weight_as_input_quant8_4(int i) { 6040 static std::set<int> ignore = {}; 6041 return ignore.find(i) != ignore.end(); 6042 } 6043 6044 void CreateModel_nchw_weight_as_input_float16_4(Model *model) { 6045 OperandType type0(Type::BOOL, {}); 6046 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 6047 OperandType type12(Type::TENSOR_FLOAT16, {1}); 6048 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 6049 OperandType type28(Type::TENSOR_FLOAT16, {1, 1, 9, 9}); 6050 OperandType type4(Type::INT32, {}); 6051 // Phase 1, operands 6052 auto op13 = model->addOperand(&type28); 6053 auto op23 = model->addOperand(&type10); 6054 auto op33 = model->addOperand(&type12); 6055 auto param24 = model->addOperand(&type4); 6056 auto param25 = model->addOperand(&type4); 6057 auto param26 = model->addOperand(&type4); 6058 auto param27 = model->addOperand(&type4); 6059 auto layout = model->addOperand(&type0); 6060 auto param28 = model->addOperand(&type4); 6061 auto param29 = model->addOperand(&type4); 6062 auto op43 = model->addOperand(&type17); 6063 // Phase 2, operations 6064 static int32_t param24_init[] = {2}; 6065 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6066 static int32_t param25_init[] = {1}; 6067 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6068 static int32_t param26_init[] = {1}; 6069 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6070 static int32_t param27_init[] = {0}; 6071 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6072 static bool8 layout_init[] = {true}; 6073 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6074 static int32_t param28_init[] = {3}; 6075 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6076 static int32_t param29_init[] = {3}; 6077 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6078 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6079 // Phase 3, inputs and outputs 6080 model->identifyInputsAndOutputs( 6081 {op13, op23, op33}, 6082 {op43}); 6083 assert(model->isValid()); 6084 } 6085 6086 inline bool is_ignored_nchw_weight_as_input_float16_4(int i) { 6087 static std::set<int> ignore = {}; 6088 return ignore.find(i) != ignore.end(); 6089 } 6090 6091 void CreateModel_dynamic_output_shape_nhwc_4(Model *model) { 6092 OperandType type0(Type::BOOL, {}); 6093 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6094 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 6095 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6096 OperandType type4(Type::INT32, {}); 6097 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 6098 // Phase 1, operands 6099 auto op13 = model->addOperand(&type5); 6100 auto op23 = model->addOperand(&type1); 6101 auto op33 = model->addOperand(&type3); 6102 auto param24 = model->addOperand(&type4); 6103 auto param25 = model->addOperand(&type4); 6104 auto param26 = model->addOperand(&type4); 6105 auto param27 = model->addOperand(&type4); 6106 auto layout = model->addOperand(&type0); 6107 auto param28 = model->addOperand(&type4); 6108 auto param29 = model->addOperand(&type4); 6109 auto op43 = model->addOperand(&type19); 6110 // Phase 2, operations 6111 static float op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 6112 model->setOperandValue(op23, op23_init, sizeof(float) * 9); 6113 static float op33_init[] = {0.0f}; 6114 model->setOperandValue(op33, op33_init, sizeof(float) * 1); 6115 static int32_t param24_init[] = {2}; 6116 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6117 static int32_t param25_init[] = {1}; 6118 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6119 static int32_t param26_init[] = {1}; 6120 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6121 static int32_t param27_init[] = {0}; 6122 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6123 static bool8 layout_init[] = {false}; 6124 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6125 static int32_t param28_init[] = {3}; 6126 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6127 static int32_t param29_init[] = {3}; 6128 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6129 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6130 // Phase 3, inputs and outputs 6131 model->identifyInputsAndOutputs( 6132 {op13}, 6133 {op43}); 6134 assert(model->isValid()); 6135 } 6136 6137 inline bool is_ignored_dynamic_output_shape_nhwc_4(int i) { 6138 static std::set<int> ignore = {}; 6139 return ignore.find(i) != ignore.end(); 6140 } 6141 6142 void CreateModel_dynamic_output_shape_nhwc_relaxed_4(Model *model) { 6143 OperandType type0(Type::BOOL, {}); 6144 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6145 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 6146 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6147 OperandType type4(Type::INT32, {}); 6148 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 6149 // Phase 1, operands 6150 auto op13 = model->addOperand(&type5); 6151 auto op23 = model->addOperand(&type1); 6152 auto op33 = model->addOperand(&type3); 6153 auto param24 = model->addOperand(&type4); 6154 auto param25 = model->addOperand(&type4); 6155 auto param26 = model->addOperand(&type4); 6156 auto param27 = model->addOperand(&type4); 6157 auto layout = model->addOperand(&type0); 6158 auto param28 = model->addOperand(&type4); 6159 auto param29 = model->addOperand(&type4); 6160 auto op43 = model->addOperand(&type19); 6161 // Phase 2, operations 6162 static float op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 6163 model->setOperandValue(op23, op23_init, sizeof(float) * 9); 6164 static float op33_init[] = {0.0f}; 6165 model->setOperandValue(op33, op33_init, sizeof(float) * 1); 6166 static int32_t param24_init[] = {2}; 6167 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6168 static int32_t param25_init[] = {1}; 6169 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6170 static int32_t param26_init[] = {1}; 6171 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6172 static int32_t param27_init[] = {0}; 6173 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6174 static bool8 layout_init[] = {false}; 6175 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6176 static int32_t param28_init[] = {3}; 6177 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6178 static int32_t param29_init[] = {3}; 6179 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6180 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6181 // Phase 3, inputs and outputs 6182 model->identifyInputsAndOutputs( 6183 {op13}, 6184 {op43}); 6185 // Phase 4: set relaxed execution 6186 model->relaxComputationFloat32toFloat16(true); 6187 assert(model->isValid()); 6188 } 6189 6190 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_4(int i) { 6191 static std::set<int> ignore = {}; 6192 return ignore.find(i) != ignore.end(); 6193 } 6194 6195 void CreateModel_dynamic_output_shape_nhwc_quant8_4(Model *model) { 6196 OperandType type0(Type::BOOL, {}); 6197 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 6198 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 9, 9, 1}, 0.5f, 0); 6199 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 6200 OperandType type4(Type::INT32, {}); 6201 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 6202 // Phase 1, operands 6203 auto op13 = model->addOperand(&type22); 6204 auto op23 = model->addOperand(&type23); 6205 auto op33 = model->addOperand(&type9); 6206 auto param24 = model->addOperand(&type4); 6207 auto param25 = model->addOperand(&type4); 6208 auto param26 = model->addOperand(&type4); 6209 auto param27 = model->addOperand(&type4); 6210 auto layout = model->addOperand(&type0); 6211 auto param28 = model->addOperand(&type4); 6212 auto param29 = model->addOperand(&type4); 6213 auto op43 = model->addOperand(&type20); 6214 // Phase 2, operations 6215 static uint8_t op23_init[] = {8, 16, 24, 32, 40, 48, 56, 64, 72}; 6216 model->setOperandValue(op23, op23_init, sizeof(uint8_t) * 9); 6217 static int32_t op33_init[] = {0}; 6218 model->setOperandValue(op33, op33_init, sizeof(int32_t) * 1); 6219 static int32_t param24_init[] = {2}; 6220 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6221 static int32_t param25_init[] = {1}; 6222 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6223 static int32_t param26_init[] = {1}; 6224 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6225 static int32_t param27_init[] = {0}; 6226 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6227 static bool8 layout_init[] = {false}; 6228 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6229 static int32_t param28_init[] = {3}; 6230 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6231 static int32_t param29_init[] = {3}; 6232 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6233 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6234 // Phase 3, inputs and outputs 6235 model->identifyInputsAndOutputs( 6236 {op13}, 6237 {op43}); 6238 assert(model->isValid()); 6239 } 6240 6241 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_4(int i) { 6242 static std::set<int> ignore = {}; 6243 return ignore.find(i) != ignore.end(); 6244 } 6245 6246 void CreateModel_dynamic_output_shape_nhwc_float16_4(Model *model) { 6247 OperandType type0(Type::BOOL, {}); 6248 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 6249 OperandType type12(Type::TENSOR_FLOAT16, {1}); 6250 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 6251 OperandType type24(Type::TENSOR_FLOAT16, {1, 9, 9, 1}); 6252 OperandType type4(Type::INT32, {}); 6253 // Phase 1, operands 6254 auto op13 = model->addOperand(&type24); 6255 auto op23 = model->addOperand(&type10); 6256 auto op33 = model->addOperand(&type12); 6257 auto param24 = model->addOperand(&type4); 6258 auto param25 = model->addOperand(&type4); 6259 auto param26 = model->addOperand(&type4); 6260 auto param27 = model->addOperand(&type4); 6261 auto layout = model->addOperand(&type0); 6262 auto param28 = model->addOperand(&type4); 6263 auto param29 = model->addOperand(&type4); 6264 auto op43 = model->addOperand(&type21); 6265 // Phase 2, operations 6266 static _Float16 op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 6267 model->setOperandValue(op23, op23_init, sizeof(_Float16) * 9); 6268 static _Float16 op33_init[] = {0.0f}; 6269 model->setOperandValue(op33, op33_init, sizeof(_Float16) * 1); 6270 static int32_t param24_init[] = {2}; 6271 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6272 static int32_t param25_init[] = {1}; 6273 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6274 static int32_t param26_init[] = {1}; 6275 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6276 static int32_t param27_init[] = {0}; 6277 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6278 static bool8 layout_init[] = {false}; 6279 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6280 static int32_t param28_init[] = {3}; 6281 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6282 static int32_t param29_init[] = {3}; 6283 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6284 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6285 // Phase 3, inputs and outputs 6286 model->identifyInputsAndOutputs( 6287 {op13}, 6288 {op43}); 6289 assert(model->isValid()); 6290 } 6291 6292 inline bool is_ignored_dynamic_output_shape_nhwc_float16_4(int i) { 6293 static std::set<int> ignore = {}; 6294 return ignore.find(i) != ignore.end(); 6295 } 6296 6297 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_4(Model *model) { 6298 OperandType type0(Type::BOOL, {}); 6299 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6300 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 6301 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6302 OperandType type4(Type::INT32, {}); 6303 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 6304 // Phase 1, operands 6305 auto op13 = model->addOperand(&type5); 6306 auto op23 = model->addOperand(&type1); 6307 auto op33 = model->addOperand(&type3); 6308 auto param24 = model->addOperand(&type4); 6309 auto param25 = model->addOperand(&type4); 6310 auto param26 = model->addOperand(&type4); 6311 auto param27 = model->addOperand(&type4); 6312 auto layout = model->addOperand(&type0); 6313 auto param28 = model->addOperand(&type4); 6314 auto param29 = model->addOperand(&type4); 6315 auto op43 = model->addOperand(&type19); 6316 // Phase 2, operations 6317 static int32_t param24_init[] = {2}; 6318 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6319 static int32_t param25_init[] = {1}; 6320 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6321 static int32_t param26_init[] = {1}; 6322 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6323 static int32_t param27_init[] = {0}; 6324 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6325 static bool8 layout_init[] = {false}; 6326 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6327 static int32_t param28_init[] = {3}; 6328 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6329 static int32_t param29_init[] = {3}; 6330 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6331 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6332 // Phase 3, inputs and outputs 6333 model->identifyInputsAndOutputs( 6334 {op13, op23, op33}, 6335 {op43}); 6336 assert(model->isValid()); 6337 } 6338 6339 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_4(int i) { 6340 static std::set<int> ignore = {}; 6341 return ignore.find(i) != ignore.end(); 6342 } 6343 6344 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_relaxed_4(Model *model) { 6345 OperandType type0(Type::BOOL, {}); 6346 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6347 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 6348 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6349 OperandType type4(Type::INT32, {}); 6350 OperandType type5(Type::TENSOR_FLOAT32, {1, 9, 9, 1}); 6351 // Phase 1, operands 6352 auto op13 = model->addOperand(&type5); 6353 auto op23 = model->addOperand(&type1); 6354 auto op33 = model->addOperand(&type3); 6355 auto param24 = model->addOperand(&type4); 6356 auto param25 = model->addOperand(&type4); 6357 auto param26 = model->addOperand(&type4); 6358 auto param27 = model->addOperand(&type4); 6359 auto layout = model->addOperand(&type0); 6360 auto param28 = model->addOperand(&type4); 6361 auto param29 = model->addOperand(&type4); 6362 auto op43 = model->addOperand(&type19); 6363 // Phase 2, operations 6364 static int32_t param24_init[] = {2}; 6365 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6366 static int32_t param25_init[] = {1}; 6367 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6368 static int32_t param26_init[] = {1}; 6369 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6370 static int32_t param27_init[] = {0}; 6371 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6372 static bool8 layout_init[] = {false}; 6373 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6374 static int32_t param28_init[] = {3}; 6375 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6376 static int32_t param29_init[] = {3}; 6377 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6378 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6379 // Phase 3, inputs and outputs 6380 model->identifyInputsAndOutputs( 6381 {op13, op23, op33}, 6382 {op43}); 6383 // Phase 4: set relaxed execution 6384 model->relaxComputationFloat32toFloat16(true); 6385 assert(model->isValid()); 6386 } 6387 6388 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_relaxed_4(int i) { 6389 static std::set<int> ignore = {}; 6390 return ignore.find(i) != ignore.end(); 6391 } 6392 6393 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_quant8_4(Model *model) { 6394 OperandType type0(Type::BOOL, {}); 6395 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 6396 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 9, 9, 1}, 0.5f, 0); 6397 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 6398 OperandType type4(Type::INT32, {}); 6399 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 6400 // Phase 1, operands 6401 auto op13 = model->addOperand(&type22); 6402 auto op23 = model->addOperand(&type23); 6403 auto op33 = model->addOperand(&type9); 6404 auto param24 = model->addOperand(&type4); 6405 auto param25 = model->addOperand(&type4); 6406 auto param26 = model->addOperand(&type4); 6407 auto param27 = model->addOperand(&type4); 6408 auto layout = model->addOperand(&type0); 6409 auto param28 = model->addOperand(&type4); 6410 auto param29 = model->addOperand(&type4); 6411 auto op43 = model->addOperand(&type20); 6412 // Phase 2, operations 6413 static int32_t param24_init[] = {2}; 6414 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6415 static int32_t param25_init[] = {1}; 6416 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6417 static int32_t param26_init[] = {1}; 6418 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6419 static int32_t param27_init[] = {0}; 6420 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6421 static bool8 layout_init[] = {false}; 6422 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6423 static int32_t param28_init[] = {3}; 6424 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6425 static int32_t param29_init[] = {3}; 6426 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6427 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6428 // Phase 3, inputs and outputs 6429 model->identifyInputsAndOutputs( 6430 {op13, op23, op33}, 6431 {op43}); 6432 assert(model->isValid()); 6433 } 6434 6435 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_quant8_4(int i) { 6436 static std::set<int> ignore = {}; 6437 return ignore.find(i) != ignore.end(); 6438 } 6439 6440 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_float16_4(Model *model) { 6441 OperandType type0(Type::BOOL, {}); 6442 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 6443 OperandType type12(Type::TENSOR_FLOAT16, {1}); 6444 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 6445 OperandType type24(Type::TENSOR_FLOAT16, {1, 9, 9, 1}); 6446 OperandType type4(Type::INT32, {}); 6447 // Phase 1, operands 6448 auto op13 = model->addOperand(&type24); 6449 auto op23 = model->addOperand(&type10); 6450 auto op33 = model->addOperand(&type12); 6451 auto param24 = model->addOperand(&type4); 6452 auto param25 = model->addOperand(&type4); 6453 auto param26 = model->addOperand(&type4); 6454 auto param27 = model->addOperand(&type4); 6455 auto layout = model->addOperand(&type0); 6456 auto param28 = model->addOperand(&type4); 6457 auto param29 = model->addOperand(&type4); 6458 auto op43 = model->addOperand(&type21); 6459 // Phase 2, operations 6460 static int32_t param24_init[] = {2}; 6461 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6462 static int32_t param25_init[] = {1}; 6463 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6464 static int32_t param26_init[] = {1}; 6465 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6466 static int32_t param27_init[] = {0}; 6467 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6468 static bool8 layout_init[] = {false}; 6469 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6470 static int32_t param28_init[] = {3}; 6471 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6472 static int32_t param29_init[] = {3}; 6473 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6474 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6475 // Phase 3, inputs and outputs 6476 model->identifyInputsAndOutputs( 6477 {op13, op23, op33}, 6478 {op43}); 6479 assert(model->isValid()); 6480 } 6481 6482 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_float16_4(int i) { 6483 static std::set<int> ignore = {}; 6484 return ignore.find(i) != ignore.end(); 6485 } 6486 6487 void CreateModel_dynamic_output_shape_nchw_4(Model *model) { 6488 OperandType type0(Type::BOOL, {}); 6489 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6490 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 6491 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 6492 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6493 OperandType type4(Type::INT32, {}); 6494 // Phase 1, operands 6495 auto op13 = model->addOperand(&type25); 6496 auto op23 = model->addOperand(&type1); 6497 auto op33 = model->addOperand(&type3); 6498 auto param24 = model->addOperand(&type4); 6499 auto param25 = model->addOperand(&type4); 6500 auto param26 = model->addOperand(&type4); 6501 auto param27 = model->addOperand(&type4); 6502 auto layout = model->addOperand(&type0); 6503 auto param28 = model->addOperand(&type4); 6504 auto param29 = model->addOperand(&type4); 6505 auto op43 = model->addOperand(&type19); 6506 // Phase 2, operations 6507 static float op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 6508 model->setOperandValue(op23, op23_init, sizeof(float) * 9); 6509 static float op33_init[] = {0.0f}; 6510 model->setOperandValue(op33, op33_init, sizeof(float) * 1); 6511 static int32_t param24_init[] = {2}; 6512 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6513 static int32_t param25_init[] = {1}; 6514 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6515 static int32_t param26_init[] = {1}; 6516 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6517 static int32_t param27_init[] = {0}; 6518 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6519 static bool8 layout_init[] = {true}; 6520 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6521 static int32_t param28_init[] = {3}; 6522 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6523 static int32_t param29_init[] = {3}; 6524 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6525 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6526 // Phase 3, inputs and outputs 6527 model->identifyInputsAndOutputs( 6528 {op13}, 6529 {op43}); 6530 assert(model->isValid()); 6531 } 6532 6533 inline bool is_ignored_dynamic_output_shape_nchw_4(int i) { 6534 static std::set<int> ignore = {}; 6535 return ignore.find(i) != ignore.end(); 6536 } 6537 6538 void CreateModel_dynamic_output_shape_nchw_relaxed_4(Model *model) { 6539 OperandType type0(Type::BOOL, {}); 6540 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6541 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 6542 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 6543 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6544 OperandType type4(Type::INT32, {}); 6545 // Phase 1, operands 6546 auto op13 = model->addOperand(&type25); 6547 auto op23 = model->addOperand(&type1); 6548 auto op33 = model->addOperand(&type3); 6549 auto param24 = model->addOperand(&type4); 6550 auto param25 = model->addOperand(&type4); 6551 auto param26 = model->addOperand(&type4); 6552 auto param27 = model->addOperand(&type4); 6553 auto layout = model->addOperand(&type0); 6554 auto param28 = model->addOperand(&type4); 6555 auto param29 = model->addOperand(&type4); 6556 auto op43 = model->addOperand(&type19); 6557 // Phase 2, operations 6558 static float op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 6559 model->setOperandValue(op23, op23_init, sizeof(float) * 9); 6560 static float op33_init[] = {0.0f}; 6561 model->setOperandValue(op33, op33_init, sizeof(float) * 1); 6562 static int32_t param24_init[] = {2}; 6563 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6564 static int32_t param25_init[] = {1}; 6565 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6566 static int32_t param26_init[] = {1}; 6567 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6568 static int32_t param27_init[] = {0}; 6569 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6570 static bool8 layout_init[] = {true}; 6571 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6572 static int32_t param28_init[] = {3}; 6573 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6574 static int32_t param29_init[] = {3}; 6575 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6576 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6577 // Phase 3, inputs and outputs 6578 model->identifyInputsAndOutputs( 6579 {op13}, 6580 {op43}); 6581 // Phase 4: set relaxed execution 6582 model->relaxComputationFloat32toFloat16(true); 6583 assert(model->isValid()); 6584 } 6585 6586 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_4(int i) { 6587 static std::set<int> ignore = {}; 6588 return ignore.find(i) != ignore.end(); 6589 } 6590 6591 void CreateModel_dynamic_output_shape_nchw_quant8_4(Model *model) { 6592 OperandType type0(Type::BOOL, {}); 6593 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 6594 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 6595 OperandType type26(Type::TENSOR_QUANT8_ASYMM, {1, 1, 9, 9}, 0.5f, 0); 6596 OperandType type4(Type::INT32, {}); 6597 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 6598 // Phase 1, operands 6599 auto op13 = model->addOperand(&type26); 6600 auto op23 = model->addOperand(&type23); 6601 auto op33 = model->addOperand(&type9); 6602 auto param24 = model->addOperand(&type4); 6603 auto param25 = model->addOperand(&type4); 6604 auto param26 = model->addOperand(&type4); 6605 auto param27 = model->addOperand(&type4); 6606 auto layout = model->addOperand(&type0); 6607 auto param28 = model->addOperand(&type4); 6608 auto param29 = model->addOperand(&type4); 6609 auto op43 = model->addOperand(&type20); 6610 // Phase 2, operations 6611 static uint8_t op23_init[] = {8, 16, 24, 32, 40, 48, 56, 64, 72}; 6612 model->setOperandValue(op23, op23_init, sizeof(uint8_t) * 9); 6613 static int32_t op33_init[] = {0}; 6614 model->setOperandValue(op33, op33_init, sizeof(int32_t) * 1); 6615 static int32_t param24_init[] = {2}; 6616 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6617 static int32_t param25_init[] = {1}; 6618 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6619 static int32_t param26_init[] = {1}; 6620 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6621 static int32_t param27_init[] = {0}; 6622 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6623 static bool8 layout_init[] = {true}; 6624 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6625 static int32_t param28_init[] = {3}; 6626 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6627 static int32_t param29_init[] = {3}; 6628 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6629 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6630 // Phase 3, inputs and outputs 6631 model->identifyInputsAndOutputs( 6632 {op13}, 6633 {op43}); 6634 assert(model->isValid()); 6635 } 6636 6637 inline bool is_ignored_dynamic_output_shape_nchw_quant8_4(int i) { 6638 static std::set<int> ignore = {}; 6639 return ignore.find(i) != ignore.end(); 6640 } 6641 6642 void CreateModel_dynamic_output_shape_nchw_float16_4(Model *model) { 6643 OperandType type0(Type::BOOL, {}); 6644 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 6645 OperandType type12(Type::TENSOR_FLOAT16, {1}); 6646 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 6647 OperandType type28(Type::TENSOR_FLOAT16, {1, 1, 9, 9}); 6648 OperandType type4(Type::INT32, {}); 6649 // Phase 1, operands 6650 auto op13 = model->addOperand(&type28); 6651 auto op23 = model->addOperand(&type10); 6652 auto op33 = model->addOperand(&type12); 6653 auto param24 = model->addOperand(&type4); 6654 auto param25 = model->addOperand(&type4); 6655 auto param26 = model->addOperand(&type4); 6656 auto param27 = model->addOperand(&type4); 6657 auto layout = model->addOperand(&type0); 6658 auto param28 = model->addOperand(&type4); 6659 auto param29 = model->addOperand(&type4); 6660 auto op43 = model->addOperand(&type21); 6661 // Phase 2, operations 6662 static _Float16 op23_init[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; 6663 model->setOperandValue(op23, op23_init, sizeof(_Float16) * 9); 6664 static _Float16 op33_init[] = {0.0f}; 6665 model->setOperandValue(op33, op33_init, sizeof(_Float16) * 1); 6666 static int32_t param24_init[] = {2}; 6667 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6668 static int32_t param25_init[] = {1}; 6669 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6670 static int32_t param26_init[] = {1}; 6671 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6672 static int32_t param27_init[] = {0}; 6673 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6674 static bool8 layout_init[] = {true}; 6675 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6676 static int32_t param28_init[] = {3}; 6677 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6678 static int32_t param29_init[] = {3}; 6679 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6680 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6681 // Phase 3, inputs and outputs 6682 model->identifyInputsAndOutputs( 6683 {op13}, 6684 {op43}); 6685 assert(model->isValid()); 6686 } 6687 6688 inline bool is_ignored_dynamic_output_shape_nchw_float16_4(int i) { 6689 static std::set<int> ignore = {}; 6690 return ignore.find(i) != ignore.end(); 6691 } 6692 6693 void CreateModel_dynamic_output_shape_nchw_weight_as_input_4(Model *model) { 6694 OperandType type0(Type::BOOL, {}); 6695 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6696 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 6697 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 6698 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6699 OperandType type4(Type::INT32, {}); 6700 // Phase 1, operands 6701 auto op13 = model->addOperand(&type25); 6702 auto op23 = model->addOperand(&type1); 6703 auto op33 = model->addOperand(&type3); 6704 auto param24 = model->addOperand(&type4); 6705 auto param25 = model->addOperand(&type4); 6706 auto param26 = model->addOperand(&type4); 6707 auto param27 = model->addOperand(&type4); 6708 auto layout = model->addOperand(&type0); 6709 auto param28 = model->addOperand(&type4); 6710 auto param29 = model->addOperand(&type4); 6711 auto op43 = model->addOperand(&type19); 6712 // Phase 2, operations 6713 static int32_t param24_init[] = {2}; 6714 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6715 static int32_t param25_init[] = {1}; 6716 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6717 static int32_t param26_init[] = {1}; 6718 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6719 static int32_t param27_init[] = {0}; 6720 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6721 static bool8 layout_init[] = {true}; 6722 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6723 static int32_t param28_init[] = {3}; 6724 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6725 static int32_t param29_init[] = {3}; 6726 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6727 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6728 // Phase 3, inputs and outputs 6729 model->identifyInputsAndOutputs( 6730 {op13, op23, op33}, 6731 {op43}); 6732 assert(model->isValid()); 6733 } 6734 6735 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_4(int i) { 6736 static std::set<int> ignore = {}; 6737 return ignore.find(i) != ignore.end(); 6738 } 6739 6740 void CreateModel_dynamic_output_shape_nchw_weight_as_input_relaxed_4(Model *model) { 6741 OperandType type0(Type::BOOL, {}); 6742 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6743 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 6744 OperandType type25(Type::TENSOR_FLOAT32, {1, 1, 9, 9}); 6745 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6746 OperandType type4(Type::INT32, {}); 6747 // Phase 1, operands 6748 auto op13 = model->addOperand(&type25); 6749 auto op23 = model->addOperand(&type1); 6750 auto op33 = model->addOperand(&type3); 6751 auto param24 = model->addOperand(&type4); 6752 auto param25 = model->addOperand(&type4); 6753 auto param26 = model->addOperand(&type4); 6754 auto param27 = model->addOperand(&type4); 6755 auto layout = model->addOperand(&type0); 6756 auto param28 = model->addOperand(&type4); 6757 auto param29 = model->addOperand(&type4); 6758 auto op43 = model->addOperand(&type19); 6759 // Phase 2, operations 6760 static int32_t param24_init[] = {2}; 6761 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6762 static int32_t param25_init[] = {1}; 6763 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6764 static int32_t param26_init[] = {1}; 6765 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6766 static int32_t param27_init[] = {0}; 6767 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6768 static bool8 layout_init[] = {true}; 6769 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6770 static int32_t param28_init[] = {3}; 6771 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6772 static int32_t param29_init[] = {3}; 6773 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6774 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6775 // Phase 3, inputs and outputs 6776 model->identifyInputsAndOutputs( 6777 {op13, op23, op33}, 6778 {op43}); 6779 // Phase 4: set relaxed execution 6780 model->relaxComputationFloat32toFloat16(true); 6781 assert(model->isValid()); 6782 } 6783 6784 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_relaxed_4(int i) { 6785 static std::set<int> ignore = {}; 6786 return ignore.find(i) != ignore.end(); 6787 } 6788 6789 void CreateModel_dynamic_output_shape_nchw_weight_as_input_quant8_4(Model *model) { 6790 OperandType type0(Type::BOOL, {}); 6791 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 6792 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 6793 OperandType type26(Type::TENSOR_QUANT8_ASYMM, {1, 1, 9, 9}, 0.5f, 0); 6794 OperandType type4(Type::INT32, {}); 6795 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 6796 // Phase 1, operands 6797 auto op13 = model->addOperand(&type26); 6798 auto op23 = model->addOperand(&type23); 6799 auto op33 = model->addOperand(&type9); 6800 auto param24 = model->addOperand(&type4); 6801 auto param25 = model->addOperand(&type4); 6802 auto param26 = model->addOperand(&type4); 6803 auto param27 = model->addOperand(&type4); 6804 auto layout = model->addOperand(&type0); 6805 auto param28 = model->addOperand(&type4); 6806 auto param29 = model->addOperand(&type4); 6807 auto op43 = model->addOperand(&type20); 6808 // Phase 2, operations 6809 static int32_t param24_init[] = {2}; 6810 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6811 static int32_t param25_init[] = {1}; 6812 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6813 static int32_t param26_init[] = {1}; 6814 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6815 static int32_t param27_init[] = {0}; 6816 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6817 static bool8 layout_init[] = {true}; 6818 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6819 static int32_t param28_init[] = {3}; 6820 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6821 static int32_t param29_init[] = {3}; 6822 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6823 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6824 // Phase 3, inputs and outputs 6825 model->identifyInputsAndOutputs( 6826 {op13, op23, op33}, 6827 {op43}); 6828 assert(model->isValid()); 6829 } 6830 6831 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_quant8_4(int i) { 6832 static std::set<int> ignore = {}; 6833 return ignore.find(i) != ignore.end(); 6834 } 6835 6836 void CreateModel_dynamic_output_shape_nchw_weight_as_input_float16_4(Model *model) { 6837 OperandType type0(Type::BOOL, {}); 6838 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 6839 OperandType type12(Type::TENSOR_FLOAT16, {1}); 6840 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 6841 OperandType type28(Type::TENSOR_FLOAT16, {1, 1, 9, 9}); 6842 OperandType type4(Type::INT32, {}); 6843 // Phase 1, operands 6844 auto op13 = model->addOperand(&type28); 6845 auto op23 = model->addOperand(&type10); 6846 auto op33 = model->addOperand(&type12); 6847 auto param24 = model->addOperand(&type4); 6848 auto param25 = model->addOperand(&type4); 6849 auto param26 = model->addOperand(&type4); 6850 auto param27 = model->addOperand(&type4); 6851 auto layout = model->addOperand(&type0); 6852 auto param28 = model->addOperand(&type4); 6853 auto param29 = model->addOperand(&type4); 6854 auto op43 = model->addOperand(&type21); 6855 // Phase 2, operations 6856 static int32_t param24_init[] = {2}; 6857 model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1); 6858 static int32_t param25_init[] = {1}; 6859 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 6860 static int32_t param26_init[] = {1}; 6861 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 6862 static int32_t param27_init[] = {0}; 6863 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 6864 static bool8 layout_init[] = {true}; 6865 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6866 static int32_t param28_init[] = {3}; 6867 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 6868 static int32_t param29_init[] = {3}; 6869 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 6870 model->addOperation(ANEURALNETWORKS_CONV_2D, {op13, op23, op33, param24, param25, param26, param27, layout, param28, param29}, {op43}); 6871 // Phase 3, inputs and outputs 6872 model->identifyInputsAndOutputs( 6873 {op13, op23, op33}, 6874 {op43}); 6875 assert(model->isValid()); 6876 } 6877 6878 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_float16_4(int i) { 6879 static std::set<int> ignore = {}; 6880 return ignore.find(i) != ignore.end(); 6881 } 6882 6883 void CreateModel_nhwc_5(Model *model) { 6884 OperandType type0(Type::BOOL, {}); 6885 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6886 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 6887 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6888 OperandType type4(Type::INT32, {}); 6889 OperandType type6(Type::TENSOR_FLOAT32, {1, 6, 6, 1}); 6890 // Phase 1, operands 6891 auto op14 = model->addOperand(&type6); 6892 auto op24 = model->addOperand(&type2); 6893 auto op34 = model->addOperand(&type3); 6894 auto param30 = model->addOperand(&type4); 6895 auto param31 = model->addOperand(&type4); 6896 auto param32 = model->addOperand(&type4); 6897 auto param33 = model->addOperand(&type4); 6898 auto layout = model->addOperand(&type0); 6899 auto param34 = model->addOperand(&type4); 6900 auto param35 = model->addOperand(&type4); 6901 auto op44 = model->addOperand(&type1); 6902 // Phase 2, operations 6903 static float op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 6904 model->setOperandValue(op24, op24_init, sizeof(float) * 4); 6905 static float op34_init[] = {0.0f}; 6906 model->setOperandValue(op34, op34_init, sizeof(float) * 1); 6907 static int32_t param30_init[] = {1}; 6908 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 6909 static int32_t param31_init[] = {2}; 6910 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 6911 static int32_t param32_init[] = {2}; 6912 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 6913 static int32_t param33_init[] = {0}; 6914 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 6915 static bool8 layout_init[] = {false}; 6916 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6917 static int32_t param34_init[] = {3}; 6918 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 6919 static int32_t param35_init[] = {3}; 6920 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 6921 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 6922 // Phase 3, inputs and outputs 6923 model->identifyInputsAndOutputs( 6924 {op14}, 6925 {op44}); 6926 assert(model->isValid()); 6927 } 6928 6929 inline bool is_ignored_nhwc_5(int i) { 6930 static std::set<int> ignore = {}; 6931 return ignore.find(i) != ignore.end(); 6932 } 6933 6934 void CreateModel_nhwc_relaxed_5(Model *model) { 6935 OperandType type0(Type::BOOL, {}); 6936 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 6937 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 6938 OperandType type3(Type::TENSOR_FLOAT32, {1}); 6939 OperandType type4(Type::INT32, {}); 6940 OperandType type6(Type::TENSOR_FLOAT32, {1, 6, 6, 1}); 6941 // Phase 1, operands 6942 auto op14 = model->addOperand(&type6); 6943 auto op24 = model->addOperand(&type2); 6944 auto op34 = model->addOperand(&type3); 6945 auto param30 = model->addOperand(&type4); 6946 auto param31 = model->addOperand(&type4); 6947 auto param32 = model->addOperand(&type4); 6948 auto param33 = model->addOperand(&type4); 6949 auto layout = model->addOperand(&type0); 6950 auto param34 = model->addOperand(&type4); 6951 auto param35 = model->addOperand(&type4); 6952 auto op44 = model->addOperand(&type1); 6953 // Phase 2, operations 6954 static float op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 6955 model->setOperandValue(op24, op24_init, sizeof(float) * 4); 6956 static float op34_init[] = {0.0f}; 6957 model->setOperandValue(op34, op34_init, sizeof(float) * 1); 6958 static int32_t param30_init[] = {1}; 6959 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 6960 static int32_t param31_init[] = {2}; 6961 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 6962 static int32_t param32_init[] = {2}; 6963 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 6964 static int32_t param33_init[] = {0}; 6965 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 6966 static bool8 layout_init[] = {false}; 6967 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 6968 static int32_t param34_init[] = {3}; 6969 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 6970 static int32_t param35_init[] = {3}; 6971 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 6972 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 6973 // Phase 3, inputs and outputs 6974 model->identifyInputsAndOutputs( 6975 {op14}, 6976 {op44}); 6977 // Phase 4: set relaxed execution 6978 model->relaxComputationFloat32toFloat16(true); 6979 assert(model->isValid()); 6980 } 6981 6982 inline bool is_ignored_nhwc_relaxed_5(int i) { 6983 static std::set<int> ignore = {}; 6984 return ignore.find(i) != ignore.end(); 6985 } 6986 6987 void CreateModel_nhwc_quant8_5(Model *model) { 6988 OperandType type0(Type::BOOL, {}); 6989 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 6990 OperandType type29(Type::TENSOR_QUANT8_ASYMM, {1, 6, 6, 1}, 0.5f, 0); 6991 OperandType type4(Type::INT32, {}); 6992 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 6993 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 6994 // Phase 1, operands 6995 auto op14 = model->addOperand(&type29); 6996 auto op24 = model->addOperand(&type8); 6997 auto op34 = model->addOperand(&type9); 6998 auto param30 = model->addOperand(&type4); 6999 auto param31 = model->addOperand(&type4); 7000 auto param32 = model->addOperand(&type4); 7001 auto param33 = model->addOperand(&type4); 7002 auto layout = model->addOperand(&type0); 7003 auto param34 = model->addOperand(&type4); 7004 auto param35 = model->addOperand(&type4); 7005 auto op44 = model->addOperand(&type23); 7006 // Phase 2, operations 7007 static uint8_t op24_init[] = {8, 16, 24, 32}; 7008 model->setOperandValue(op24, op24_init, sizeof(uint8_t) * 4); 7009 static int32_t op34_init[] = {0}; 7010 model->setOperandValue(op34, op34_init, sizeof(int32_t) * 1); 7011 static int32_t param30_init[] = {1}; 7012 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7013 static int32_t param31_init[] = {2}; 7014 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7015 static int32_t param32_init[] = {2}; 7016 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7017 static int32_t param33_init[] = {0}; 7018 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7019 static bool8 layout_init[] = {false}; 7020 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7021 static int32_t param34_init[] = {3}; 7022 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7023 static int32_t param35_init[] = {3}; 7024 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7025 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7026 // Phase 3, inputs and outputs 7027 model->identifyInputsAndOutputs( 7028 {op14}, 7029 {op44}); 7030 assert(model->isValid()); 7031 } 7032 7033 inline bool is_ignored_nhwc_quant8_5(int i) { 7034 static std::set<int> ignore = {}; 7035 return ignore.find(i) != ignore.end(); 7036 } 7037 7038 void CreateModel_nhwc_float16_5(Model *model) { 7039 OperandType type0(Type::BOOL, {}); 7040 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 7041 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 7042 OperandType type12(Type::TENSOR_FLOAT16, {1}); 7043 OperandType type30(Type::TENSOR_FLOAT16, {1, 6, 6, 1}); 7044 OperandType type4(Type::INT32, {}); 7045 // Phase 1, operands 7046 auto op14 = model->addOperand(&type30); 7047 auto op24 = model->addOperand(&type11); 7048 auto op34 = model->addOperand(&type12); 7049 auto param30 = model->addOperand(&type4); 7050 auto param31 = model->addOperand(&type4); 7051 auto param32 = model->addOperand(&type4); 7052 auto param33 = model->addOperand(&type4); 7053 auto layout = model->addOperand(&type0); 7054 auto param34 = model->addOperand(&type4); 7055 auto param35 = model->addOperand(&type4); 7056 auto op44 = model->addOperand(&type10); 7057 // Phase 2, operations 7058 static _Float16 op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 7059 model->setOperandValue(op24, op24_init, sizeof(_Float16) * 4); 7060 static _Float16 op34_init[] = {0.0f}; 7061 model->setOperandValue(op34, op34_init, sizeof(_Float16) * 1); 7062 static int32_t param30_init[] = {1}; 7063 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7064 static int32_t param31_init[] = {2}; 7065 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7066 static int32_t param32_init[] = {2}; 7067 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7068 static int32_t param33_init[] = {0}; 7069 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7070 static bool8 layout_init[] = {false}; 7071 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7072 static int32_t param34_init[] = {3}; 7073 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7074 static int32_t param35_init[] = {3}; 7075 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7076 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7077 // Phase 3, inputs and outputs 7078 model->identifyInputsAndOutputs( 7079 {op14}, 7080 {op44}); 7081 assert(model->isValid()); 7082 } 7083 7084 inline bool is_ignored_nhwc_float16_5(int i) { 7085 static std::set<int> ignore = {}; 7086 return ignore.find(i) != ignore.end(); 7087 } 7088 7089 void CreateModel_nhwc_weight_as_input_5(Model *model) { 7090 OperandType type0(Type::BOOL, {}); 7091 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 7092 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7093 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7094 OperandType type4(Type::INT32, {}); 7095 OperandType type6(Type::TENSOR_FLOAT32, {1, 6, 6, 1}); 7096 // Phase 1, operands 7097 auto op14 = model->addOperand(&type6); 7098 auto op24 = model->addOperand(&type2); 7099 auto op34 = model->addOperand(&type3); 7100 auto param30 = model->addOperand(&type4); 7101 auto param31 = model->addOperand(&type4); 7102 auto param32 = model->addOperand(&type4); 7103 auto param33 = model->addOperand(&type4); 7104 auto layout = model->addOperand(&type0); 7105 auto param34 = model->addOperand(&type4); 7106 auto param35 = model->addOperand(&type4); 7107 auto op44 = model->addOperand(&type1); 7108 // Phase 2, operations 7109 static int32_t param30_init[] = {1}; 7110 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7111 static int32_t param31_init[] = {2}; 7112 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7113 static int32_t param32_init[] = {2}; 7114 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7115 static int32_t param33_init[] = {0}; 7116 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7117 static bool8 layout_init[] = {false}; 7118 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7119 static int32_t param34_init[] = {3}; 7120 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7121 static int32_t param35_init[] = {3}; 7122 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7123 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7124 // Phase 3, inputs and outputs 7125 model->identifyInputsAndOutputs( 7126 {op14, op24, op34}, 7127 {op44}); 7128 assert(model->isValid()); 7129 } 7130 7131 inline bool is_ignored_nhwc_weight_as_input_5(int i) { 7132 static std::set<int> ignore = {}; 7133 return ignore.find(i) != ignore.end(); 7134 } 7135 7136 void CreateModel_nhwc_weight_as_input_relaxed_5(Model *model) { 7137 OperandType type0(Type::BOOL, {}); 7138 OperandType type1(Type::TENSOR_FLOAT32, {1, 3, 3, 1}); 7139 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7140 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7141 OperandType type4(Type::INT32, {}); 7142 OperandType type6(Type::TENSOR_FLOAT32, {1, 6, 6, 1}); 7143 // Phase 1, operands 7144 auto op14 = model->addOperand(&type6); 7145 auto op24 = model->addOperand(&type2); 7146 auto op34 = model->addOperand(&type3); 7147 auto param30 = model->addOperand(&type4); 7148 auto param31 = model->addOperand(&type4); 7149 auto param32 = model->addOperand(&type4); 7150 auto param33 = model->addOperand(&type4); 7151 auto layout = model->addOperand(&type0); 7152 auto param34 = model->addOperand(&type4); 7153 auto param35 = model->addOperand(&type4); 7154 auto op44 = model->addOperand(&type1); 7155 // Phase 2, operations 7156 static int32_t param30_init[] = {1}; 7157 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7158 static int32_t param31_init[] = {2}; 7159 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7160 static int32_t param32_init[] = {2}; 7161 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7162 static int32_t param33_init[] = {0}; 7163 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7164 static bool8 layout_init[] = {false}; 7165 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7166 static int32_t param34_init[] = {3}; 7167 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7168 static int32_t param35_init[] = {3}; 7169 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7170 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7171 // Phase 3, inputs and outputs 7172 model->identifyInputsAndOutputs( 7173 {op14, op24, op34}, 7174 {op44}); 7175 // Phase 4: set relaxed execution 7176 model->relaxComputationFloat32toFloat16(true); 7177 assert(model->isValid()); 7178 } 7179 7180 inline bool is_ignored_nhwc_weight_as_input_relaxed_5(int i) { 7181 static std::set<int> ignore = {}; 7182 return ignore.find(i) != ignore.end(); 7183 } 7184 7185 void CreateModel_nhwc_weight_as_input_quant8_5(Model *model) { 7186 OperandType type0(Type::BOOL, {}); 7187 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 0.125f, 0); 7188 OperandType type29(Type::TENSOR_QUANT8_ASYMM, {1, 6, 6, 1}, 0.5f, 0); 7189 OperandType type4(Type::INT32, {}); 7190 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 7191 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 7192 // Phase 1, operands 7193 auto op14 = model->addOperand(&type29); 7194 auto op24 = model->addOperand(&type8); 7195 auto op34 = model->addOperand(&type9); 7196 auto param30 = model->addOperand(&type4); 7197 auto param31 = model->addOperand(&type4); 7198 auto param32 = model->addOperand(&type4); 7199 auto param33 = model->addOperand(&type4); 7200 auto layout = model->addOperand(&type0); 7201 auto param34 = model->addOperand(&type4); 7202 auto param35 = model->addOperand(&type4); 7203 auto op44 = model->addOperand(&type23); 7204 // Phase 2, operations 7205 static int32_t param30_init[] = {1}; 7206 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7207 static int32_t param31_init[] = {2}; 7208 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7209 static int32_t param32_init[] = {2}; 7210 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7211 static int32_t param33_init[] = {0}; 7212 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7213 static bool8 layout_init[] = {false}; 7214 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7215 static int32_t param34_init[] = {3}; 7216 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7217 static int32_t param35_init[] = {3}; 7218 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7219 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7220 // Phase 3, inputs and outputs 7221 model->identifyInputsAndOutputs( 7222 {op14, op24, op34}, 7223 {op44}); 7224 assert(model->isValid()); 7225 } 7226 7227 inline bool is_ignored_nhwc_weight_as_input_quant8_5(int i) { 7228 static std::set<int> ignore = {}; 7229 return ignore.find(i) != ignore.end(); 7230 } 7231 7232 void CreateModel_nhwc_weight_as_input_float16_5(Model *model) { 7233 OperandType type0(Type::BOOL, {}); 7234 OperandType type10(Type::TENSOR_FLOAT16, {1, 3, 3, 1}); 7235 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 7236 OperandType type12(Type::TENSOR_FLOAT16, {1}); 7237 OperandType type30(Type::TENSOR_FLOAT16, {1, 6, 6, 1}); 7238 OperandType type4(Type::INT32, {}); 7239 // Phase 1, operands 7240 auto op14 = model->addOperand(&type30); 7241 auto op24 = model->addOperand(&type11); 7242 auto op34 = model->addOperand(&type12); 7243 auto param30 = model->addOperand(&type4); 7244 auto param31 = model->addOperand(&type4); 7245 auto param32 = model->addOperand(&type4); 7246 auto param33 = model->addOperand(&type4); 7247 auto layout = model->addOperand(&type0); 7248 auto param34 = model->addOperand(&type4); 7249 auto param35 = model->addOperand(&type4); 7250 auto op44 = model->addOperand(&type10); 7251 // Phase 2, operations 7252 static int32_t param30_init[] = {1}; 7253 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7254 static int32_t param31_init[] = {2}; 7255 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7256 static int32_t param32_init[] = {2}; 7257 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7258 static int32_t param33_init[] = {0}; 7259 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7260 static bool8 layout_init[] = {false}; 7261 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7262 static int32_t param34_init[] = {3}; 7263 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7264 static int32_t param35_init[] = {3}; 7265 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7266 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7267 // Phase 3, inputs and outputs 7268 model->identifyInputsAndOutputs( 7269 {op14, op24, op34}, 7270 {op44}); 7271 assert(model->isValid()); 7272 } 7273 7274 inline bool is_ignored_nhwc_weight_as_input_float16_5(int i) { 7275 static std::set<int> ignore = {}; 7276 return ignore.find(i) != ignore.end(); 7277 } 7278 7279 void CreateModel_nchw_5(Model *model) { 7280 OperandType type0(Type::BOOL, {}); 7281 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 7282 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7283 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7284 OperandType type31(Type::TENSOR_FLOAT32, {1, 1, 6, 6}); 7285 OperandType type4(Type::INT32, {}); 7286 // Phase 1, operands 7287 auto op14 = model->addOperand(&type31); 7288 auto op24 = model->addOperand(&type2); 7289 auto op34 = model->addOperand(&type3); 7290 auto param30 = model->addOperand(&type4); 7291 auto param31 = model->addOperand(&type4); 7292 auto param32 = model->addOperand(&type4); 7293 auto param33 = model->addOperand(&type4); 7294 auto layout = model->addOperand(&type0); 7295 auto param34 = model->addOperand(&type4); 7296 auto param35 = model->addOperand(&type4); 7297 auto op44 = model->addOperand(&type13); 7298 // Phase 2, operations 7299 static float op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 7300 model->setOperandValue(op24, op24_init, sizeof(float) * 4); 7301 static float op34_init[] = {0.0f}; 7302 model->setOperandValue(op34, op34_init, sizeof(float) * 1); 7303 static int32_t param30_init[] = {1}; 7304 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7305 static int32_t param31_init[] = {2}; 7306 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7307 static int32_t param32_init[] = {2}; 7308 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7309 static int32_t param33_init[] = {0}; 7310 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7311 static bool8 layout_init[] = {true}; 7312 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7313 static int32_t param34_init[] = {3}; 7314 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7315 static int32_t param35_init[] = {3}; 7316 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7317 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7318 // Phase 3, inputs and outputs 7319 model->identifyInputsAndOutputs( 7320 {op14}, 7321 {op44}); 7322 assert(model->isValid()); 7323 } 7324 7325 inline bool is_ignored_nchw_5(int i) { 7326 static std::set<int> ignore = {}; 7327 return ignore.find(i) != ignore.end(); 7328 } 7329 7330 void CreateModel_nchw_relaxed_5(Model *model) { 7331 OperandType type0(Type::BOOL, {}); 7332 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 7333 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7334 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7335 OperandType type31(Type::TENSOR_FLOAT32, {1, 1, 6, 6}); 7336 OperandType type4(Type::INT32, {}); 7337 // Phase 1, operands 7338 auto op14 = model->addOperand(&type31); 7339 auto op24 = model->addOperand(&type2); 7340 auto op34 = model->addOperand(&type3); 7341 auto param30 = model->addOperand(&type4); 7342 auto param31 = model->addOperand(&type4); 7343 auto param32 = model->addOperand(&type4); 7344 auto param33 = model->addOperand(&type4); 7345 auto layout = model->addOperand(&type0); 7346 auto param34 = model->addOperand(&type4); 7347 auto param35 = model->addOperand(&type4); 7348 auto op44 = model->addOperand(&type13); 7349 // Phase 2, operations 7350 static float op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 7351 model->setOperandValue(op24, op24_init, sizeof(float) * 4); 7352 static float op34_init[] = {0.0f}; 7353 model->setOperandValue(op34, op34_init, sizeof(float) * 1); 7354 static int32_t param30_init[] = {1}; 7355 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7356 static int32_t param31_init[] = {2}; 7357 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7358 static int32_t param32_init[] = {2}; 7359 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7360 static int32_t param33_init[] = {0}; 7361 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7362 static bool8 layout_init[] = {true}; 7363 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7364 static int32_t param34_init[] = {3}; 7365 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7366 static int32_t param35_init[] = {3}; 7367 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7368 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7369 // Phase 3, inputs and outputs 7370 model->identifyInputsAndOutputs( 7371 {op14}, 7372 {op44}); 7373 // Phase 4: set relaxed execution 7374 model->relaxComputationFloat32toFloat16(true); 7375 assert(model->isValid()); 7376 } 7377 7378 inline bool is_ignored_nchw_relaxed_5(int i) { 7379 static std::set<int> ignore = {}; 7380 return ignore.find(i) != ignore.end(); 7381 } 7382 7383 void CreateModel_nchw_quant8_5(Model *model) { 7384 OperandType type0(Type::BOOL, {}); 7385 OperandType type27(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.125f, 0); 7386 OperandType type32(Type::TENSOR_QUANT8_ASYMM, {1, 1, 6, 6}, 0.5f, 0); 7387 OperandType type4(Type::INT32, {}); 7388 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 7389 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 7390 // Phase 1, operands 7391 auto op14 = model->addOperand(&type32); 7392 auto op24 = model->addOperand(&type8); 7393 auto op34 = model->addOperand(&type9); 7394 auto param30 = model->addOperand(&type4); 7395 auto param31 = model->addOperand(&type4); 7396 auto param32 = model->addOperand(&type4); 7397 auto param33 = model->addOperand(&type4); 7398 auto layout = model->addOperand(&type0); 7399 auto param34 = model->addOperand(&type4); 7400 auto param35 = model->addOperand(&type4); 7401 auto op44 = model->addOperand(&type27); 7402 // Phase 2, operations 7403 static uint8_t op24_init[] = {8, 16, 24, 32}; 7404 model->setOperandValue(op24, op24_init, sizeof(uint8_t) * 4); 7405 static int32_t op34_init[] = {0}; 7406 model->setOperandValue(op34, op34_init, sizeof(int32_t) * 1); 7407 static int32_t param30_init[] = {1}; 7408 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7409 static int32_t param31_init[] = {2}; 7410 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7411 static int32_t param32_init[] = {2}; 7412 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7413 static int32_t param33_init[] = {0}; 7414 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7415 static bool8 layout_init[] = {true}; 7416 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7417 static int32_t param34_init[] = {3}; 7418 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7419 static int32_t param35_init[] = {3}; 7420 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7421 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7422 // Phase 3, inputs and outputs 7423 model->identifyInputsAndOutputs( 7424 {op14}, 7425 {op44}); 7426 assert(model->isValid()); 7427 } 7428 7429 inline bool is_ignored_nchw_quant8_5(int i) { 7430 static std::set<int> ignore = {}; 7431 return ignore.find(i) != ignore.end(); 7432 } 7433 7434 void CreateModel_nchw_float16_5(Model *model) { 7435 OperandType type0(Type::BOOL, {}); 7436 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 7437 OperandType type12(Type::TENSOR_FLOAT16, {1}); 7438 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 7439 OperandType type33(Type::TENSOR_FLOAT16, {1, 1, 6, 6}); 7440 OperandType type4(Type::INT32, {}); 7441 // Phase 1, operands 7442 auto op14 = model->addOperand(&type33); 7443 auto op24 = model->addOperand(&type11); 7444 auto op34 = model->addOperand(&type12); 7445 auto param30 = model->addOperand(&type4); 7446 auto param31 = model->addOperand(&type4); 7447 auto param32 = model->addOperand(&type4); 7448 auto param33 = model->addOperand(&type4); 7449 auto layout = model->addOperand(&type0); 7450 auto param34 = model->addOperand(&type4); 7451 auto param35 = model->addOperand(&type4); 7452 auto op44 = model->addOperand(&type17); 7453 // Phase 2, operations 7454 static _Float16 op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 7455 model->setOperandValue(op24, op24_init, sizeof(_Float16) * 4); 7456 static _Float16 op34_init[] = {0.0f}; 7457 model->setOperandValue(op34, op34_init, sizeof(_Float16) * 1); 7458 static int32_t param30_init[] = {1}; 7459 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7460 static int32_t param31_init[] = {2}; 7461 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7462 static int32_t param32_init[] = {2}; 7463 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7464 static int32_t param33_init[] = {0}; 7465 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7466 static bool8 layout_init[] = {true}; 7467 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7468 static int32_t param34_init[] = {3}; 7469 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7470 static int32_t param35_init[] = {3}; 7471 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7472 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7473 // Phase 3, inputs and outputs 7474 model->identifyInputsAndOutputs( 7475 {op14}, 7476 {op44}); 7477 assert(model->isValid()); 7478 } 7479 7480 inline bool is_ignored_nchw_float16_5(int i) { 7481 static std::set<int> ignore = {}; 7482 return ignore.find(i) != ignore.end(); 7483 } 7484 7485 void CreateModel_nchw_weight_as_input_5(Model *model) { 7486 OperandType type0(Type::BOOL, {}); 7487 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 7488 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7489 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7490 OperandType type31(Type::TENSOR_FLOAT32, {1, 1, 6, 6}); 7491 OperandType type4(Type::INT32, {}); 7492 // Phase 1, operands 7493 auto op14 = model->addOperand(&type31); 7494 auto op24 = model->addOperand(&type2); 7495 auto op34 = model->addOperand(&type3); 7496 auto param30 = model->addOperand(&type4); 7497 auto param31 = model->addOperand(&type4); 7498 auto param32 = model->addOperand(&type4); 7499 auto param33 = model->addOperand(&type4); 7500 auto layout = model->addOperand(&type0); 7501 auto param34 = model->addOperand(&type4); 7502 auto param35 = model->addOperand(&type4); 7503 auto op44 = model->addOperand(&type13); 7504 // Phase 2, operations 7505 static int32_t param30_init[] = {1}; 7506 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7507 static int32_t param31_init[] = {2}; 7508 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7509 static int32_t param32_init[] = {2}; 7510 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7511 static int32_t param33_init[] = {0}; 7512 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7513 static bool8 layout_init[] = {true}; 7514 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7515 static int32_t param34_init[] = {3}; 7516 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7517 static int32_t param35_init[] = {3}; 7518 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7519 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7520 // Phase 3, inputs and outputs 7521 model->identifyInputsAndOutputs( 7522 {op14, op24, op34}, 7523 {op44}); 7524 assert(model->isValid()); 7525 } 7526 7527 inline bool is_ignored_nchw_weight_as_input_5(int i) { 7528 static std::set<int> ignore = {}; 7529 return ignore.find(i) != ignore.end(); 7530 } 7531 7532 void CreateModel_nchw_weight_as_input_relaxed_5(Model *model) { 7533 OperandType type0(Type::BOOL, {}); 7534 OperandType type13(Type::TENSOR_FLOAT32, {1, 1, 3, 3}); 7535 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7536 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7537 OperandType type31(Type::TENSOR_FLOAT32, {1, 1, 6, 6}); 7538 OperandType type4(Type::INT32, {}); 7539 // Phase 1, operands 7540 auto op14 = model->addOperand(&type31); 7541 auto op24 = model->addOperand(&type2); 7542 auto op34 = model->addOperand(&type3); 7543 auto param30 = model->addOperand(&type4); 7544 auto param31 = model->addOperand(&type4); 7545 auto param32 = model->addOperand(&type4); 7546 auto param33 = model->addOperand(&type4); 7547 auto layout = model->addOperand(&type0); 7548 auto param34 = model->addOperand(&type4); 7549 auto param35 = model->addOperand(&type4); 7550 auto op44 = model->addOperand(&type13); 7551 // Phase 2, operations 7552 static int32_t param30_init[] = {1}; 7553 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7554 static int32_t param31_init[] = {2}; 7555 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7556 static int32_t param32_init[] = {2}; 7557 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7558 static int32_t param33_init[] = {0}; 7559 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7560 static bool8 layout_init[] = {true}; 7561 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7562 static int32_t param34_init[] = {3}; 7563 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7564 static int32_t param35_init[] = {3}; 7565 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7566 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7567 // Phase 3, inputs and outputs 7568 model->identifyInputsAndOutputs( 7569 {op14, op24, op34}, 7570 {op44}); 7571 // Phase 4: set relaxed execution 7572 model->relaxComputationFloat32toFloat16(true); 7573 assert(model->isValid()); 7574 } 7575 7576 inline bool is_ignored_nchw_weight_as_input_relaxed_5(int i) { 7577 static std::set<int> ignore = {}; 7578 return ignore.find(i) != ignore.end(); 7579 } 7580 7581 void CreateModel_nchw_weight_as_input_quant8_5(Model *model) { 7582 OperandType type0(Type::BOOL, {}); 7583 OperandType type27(Type::TENSOR_QUANT8_ASYMM, {1, 1, 3, 3}, 0.125f, 0); 7584 OperandType type32(Type::TENSOR_QUANT8_ASYMM, {1, 1, 6, 6}, 0.5f, 0); 7585 OperandType type4(Type::INT32, {}); 7586 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 7587 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 7588 // Phase 1, operands 7589 auto op14 = model->addOperand(&type32); 7590 auto op24 = model->addOperand(&type8); 7591 auto op34 = model->addOperand(&type9); 7592 auto param30 = model->addOperand(&type4); 7593 auto param31 = model->addOperand(&type4); 7594 auto param32 = model->addOperand(&type4); 7595 auto param33 = model->addOperand(&type4); 7596 auto layout = model->addOperand(&type0); 7597 auto param34 = model->addOperand(&type4); 7598 auto param35 = model->addOperand(&type4); 7599 auto op44 = model->addOperand(&type27); 7600 // Phase 2, operations 7601 static int32_t param30_init[] = {1}; 7602 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7603 static int32_t param31_init[] = {2}; 7604 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7605 static int32_t param32_init[] = {2}; 7606 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7607 static int32_t param33_init[] = {0}; 7608 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7609 static bool8 layout_init[] = {true}; 7610 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7611 static int32_t param34_init[] = {3}; 7612 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7613 static int32_t param35_init[] = {3}; 7614 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7615 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7616 // Phase 3, inputs and outputs 7617 model->identifyInputsAndOutputs( 7618 {op14, op24, op34}, 7619 {op44}); 7620 assert(model->isValid()); 7621 } 7622 7623 inline bool is_ignored_nchw_weight_as_input_quant8_5(int i) { 7624 static std::set<int> ignore = {}; 7625 return ignore.find(i) != ignore.end(); 7626 } 7627 7628 void CreateModel_nchw_weight_as_input_float16_5(Model *model) { 7629 OperandType type0(Type::BOOL, {}); 7630 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 7631 OperandType type12(Type::TENSOR_FLOAT16, {1}); 7632 OperandType type17(Type::TENSOR_FLOAT16, {1, 1, 3, 3}); 7633 OperandType type33(Type::TENSOR_FLOAT16, {1, 1, 6, 6}); 7634 OperandType type4(Type::INT32, {}); 7635 // Phase 1, operands 7636 auto op14 = model->addOperand(&type33); 7637 auto op24 = model->addOperand(&type11); 7638 auto op34 = model->addOperand(&type12); 7639 auto param30 = model->addOperand(&type4); 7640 auto param31 = model->addOperand(&type4); 7641 auto param32 = model->addOperand(&type4); 7642 auto param33 = model->addOperand(&type4); 7643 auto layout = model->addOperand(&type0); 7644 auto param34 = model->addOperand(&type4); 7645 auto param35 = model->addOperand(&type4); 7646 auto op44 = model->addOperand(&type17); 7647 // Phase 2, operations 7648 static int32_t param30_init[] = {1}; 7649 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7650 static int32_t param31_init[] = {2}; 7651 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7652 static int32_t param32_init[] = {2}; 7653 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7654 static int32_t param33_init[] = {0}; 7655 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7656 static bool8 layout_init[] = {true}; 7657 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7658 static int32_t param34_init[] = {3}; 7659 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7660 static int32_t param35_init[] = {3}; 7661 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7662 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7663 // Phase 3, inputs and outputs 7664 model->identifyInputsAndOutputs( 7665 {op14, op24, op34}, 7666 {op44}); 7667 assert(model->isValid()); 7668 } 7669 7670 inline bool is_ignored_nchw_weight_as_input_float16_5(int i) { 7671 static std::set<int> ignore = {}; 7672 return ignore.find(i) != ignore.end(); 7673 } 7674 7675 void CreateModel_dynamic_output_shape_nhwc_5(Model *model) { 7676 OperandType type0(Type::BOOL, {}); 7677 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 7678 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7679 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7680 OperandType type4(Type::INT32, {}); 7681 OperandType type6(Type::TENSOR_FLOAT32, {1, 6, 6, 1}); 7682 // Phase 1, operands 7683 auto op14 = model->addOperand(&type6); 7684 auto op24 = model->addOperand(&type2); 7685 auto op34 = model->addOperand(&type3); 7686 auto param30 = model->addOperand(&type4); 7687 auto param31 = model->addOperand(&type4); 7688 auto param32 = model->addOperand(&type4); 7689 auto param33 = model->addOperand(&type4); 7690 auto layout = model->addOperand(&type0); 7691 auto param34 = model->addOperand(&type4); 7692 auto param35 = model->addOperand(&type4); 7693 auto op44 = model->addOperand(&type19); 7694 // Phase 2, operations 7695 static float op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 7696 model->setOperandValue(op24, op24_init, sizeof(float) * 4); 7697 static float op34_init[] = {0.0f}; 7698 model->setOperandValue(op34, op34_init, sizeof(float) * 1); 7699 static int32_t param30_init[] = {1}; 7700 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7701 static int32_t param31_init[] = {2}; 7702 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7703 static int32_t param32_init[] = {2}; 7704 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7705 static int32_t param33_init[] = {0}; 7706 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7707 static bool8 layout_init[] = {false}; 7708 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7709 static int32_t param34_init[] = {3}; 7710 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7711 static int32_t param35_init[] = {3}; 7712 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7713 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7714 // Phase 3, inputs and outputs 7715 model->identifyInputsAndOutputs( 7716 {op14}, 7717 {op44}); 7718 assert(model->isValid()); 7719 } 7720 7721 inline bool is_ignored_dynamic_output_shape_nhwc_5(int i) { 7722 static std::set<int> ignore = {}; 7723 return ignore.find(i) != ignore.end(); 7724 } 7725 7726 void CreateModel_dynamic_output_shape_nhwc_relaxed_5(Model *model) { 7727 OperandType type0(Type::BOOL, {}); 7728 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 7729 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7730 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7731 OperandType type4(Type::INT32, {}); 7732 OperandType type6(Type::TENSOR_FLOAT32, {1, 6, 6, 1}); 7733 // Phase 1, operands 7734 auto op14 = model->addOperand(&type6); 7735 auto op24 = model->addOperand(&type2); 7736 auto op34 = model->addOperand(&type3); 7737 auto param30 = model->addOperand(&type4); 7738 auto param31 = model->addOperand(&type4); 7739 auto param32 = model->addOperand(&type4); 7740 auto param33 = model->addOperand(&type4); 7741 auto layout = model->addOperand(&type0); 7742 auto param34 = model->addOperand(&type4); 7743 auto param35 = model->addOperand(&type4); 7744 auto op44 = model->addOperand(&type19); 7745 // Phase 2, operations 7746 static float op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 7747 model->setOperandValue(op24, op24_init, sizeof(float) * 4); 7748 static float op34_init[] = {0.0f}; 7749 model->setOperandValue(op34, op34_init, sizeof(float) * 1); 7750 static int32_t param30_init[] = {1}; 7751 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7752 static int32_t param31_init[] = {2}; 7753 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7754 static int32_t param32_init[] = {2}; 7755 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7756 static int32_t param33_init[] = {0}; 7757 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7758 static bool8 layout_init[] = {false}; 7759 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7760 static int32_t param34_init[] = {3}; 7761 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7762 static int32_t param35_init[] = {3}; 7763 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7764 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7765 // Phase 3, inputs and outputs 7766 model->identifyInputsAndOutputs( 7767 {op14}, 7768 {op44}); 7769 // Phase 4: set relaxed execution 7770 model->relaxComputationFloat32toFloat16(true); 7771 assert(model->isValid()); 7772 } 7773 7774 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_5(int i) { 7775 static std::set<int> ignore = {}; 7776 return ignore.find(i) != ignore.end(); 7777 } 7778 7779 void CreateModel_dynamic_output_shape_nhwc_quant8_5(Model *model) { 7780 OperandType type0(Type::BOOL, {}); 7781 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 7782 OperandType type29(Type::TENSOR_QUANT8_ASYMM, {1, 6, 6, 1}, 0.5f, 0); 7783 OperandType type4(Type::INT32, {}); 7784 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 7785 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 7786 // Phase 1, operands 7787 auto op14 = model->addOperand(&type29); 7788 auto op24 = model->addOperand(&type8); 7789 auto op34 = model->addOperand(&type9); 7790 auto param30 = model->addOperand(&type4); 7791 auto param31 = model->addOperand(&type4); 7792 auto param32 = model->addOperand(&type4); 7793 auto param33 = model->addOperand(&type4); 7794 auto layout = model->addOperand(&type0); 7795 auto param34 = model->addOperand(&type4); 7796 auto param35 = model->addOperand(&type4); 7797 auto op44 = model->addOperand(&type20); 7798 // Phase 2, operations 7799 static uint8_t op24_init[] = {8, 16, 24, 32}; 7800 model->setOperandValue(op24, op24_init, sizeof(uint8_t) * 4); 7801 static int32_t op34_init[] = {0}; 7802 model->setOperandValue(op34, op34_init, sizeof(int32_t) * 1); 7803 static int32_t param30_init[] = {1}; 7804 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7805 static int32_t param31_init[] = {2}; 7806 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7807 static int32_t param32_init[] = {2}; 7808 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7809 static int32_t param33_init[] = {0}; 7810 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7811 static bool8 layout_init[] = {false}; 7812 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7813 static int32_t param34_init[] = {3}; 7814 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7815 static int32_t param35_init[] = {3}; 7816 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7817 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7818 // Phase 3, inputs and outputs 7819 model->identifyInputsAndOutputs( 7820 {op14}, 7821 {op44}); 7822 assert(model->isValid()); 7823 } 7824 7825 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_5(int i) { 7826 static std::set<int> ignore = {}; 7827 return ignore.find(i) != ignore.end(); 7828 } 7829 7830 void CreateModel_dynamic_output_shape_nhwc_float16_5(Model *model) { 7831 OperandType type0(Type::BOOL, {}); 7832 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 7833 OperandType type12(Type::TENSOR_FLOAT16, {1}); 7834 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 7835 OperandType type30(Type::TENSOR_FLOAT16, {1, 6, 6, 1}); 7836 OperandType type4(Type::INT32, {}); 7837 // Phase 1, operands 7838 auto op14 = model->addOperand(&type30); 7839 auto op24 = model->addOperand(&type11); 7840 auto op34 = model->addOperand(&type12); 7841 auto param30 = model->addOperand(&type4); 7842 auto param31 = model->addOperand(&type4); 7843 auto param32 = model->addOperand(&type4); 7844 auto param33 = model->addOperand(&type4); 7845 auto layout = model->addOperand(&type0); 7846 auto param34 = model->addOperand(&type4); 7847 auto param35 = model->addOperand(&type4); 7848 auto op44 = model->addOperand(&type21); 7849 // Phase 2, operations 7850 static _Float16 op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 7851 model->setOperandValue(op24, op24_init, sizeof(_Float16) * 4); 7852 static _Float16 op34_init[] = {0.0f}; 7853 model->setOperandValue(op34, op34_init, sizeof(_Float16) * 1); 7854 static int32_t param30_init[] = {1}; 7855 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7856 static int32_t param31_init[] = {2}; 7857 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7858 static int32_t param32_init[] = {2}; 7859 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7860 static int32_t param33_init[] = {0}; 7861 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7862 static bool8 layout_init[] = {false}; 7863 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7864 static int32_t param34_init[] = {3}; 7865 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7866 static int32_t param35_init[] = {3}; 7867 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7868 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7869 // Phase 3, inputs and outputs 7870 model->identifyInputsAndOutputs( 7871 {op14}, 7872 {op44}); 7873 assert(model->isValid()); 7874 } 7875 7876 inline bool is_ignored_dynamic_output_shape_nhwc_float16_5(int i) { 7877 static std::set<int> ignore = {}; 7878 return ignore.find(i) != ignore.end(); 7879 } 7880 7881 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_5(Model *model) { 7882 OperandType type0(Type::BOOL, {}); 7883 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 7884 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7885 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7886 OperandType type4(Type::INT32, {}); 7887 OperandType type6(Type::TENSOR_FLOAT32, {1, 6, 6, 1}); 7888 // Phase 1, operands 7889 auto op14 = model->addOperand(&type6); 7890 auto op24 = model->addOperand(&type2); 7891 auto op34 = model->addOperand(&type3); 7892 auto param30 = model->addOperand(&type4); 7893 auto param31 = model->addOperand(&type4); 7894 auto param32 = model->addOperand(&type4); 7895 auto param33 = model->addOperand(&type4); 7896 auto layout = model->addOperand(&type0); 7897 auto param34 = model->addOperand(&type4); 7898 auto param35 = model->addOperand(&type4); 7899 auto op44 = model->addOperand(&type19); 7900 // Phase 2, operations 7901 static int32_t param30_init[] = {1}; 7902 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7903 static int32_t param31_init[] = {2}; 7904 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7905 static int32_t param32_init[] = {2}; 7906 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7907 static int32_t param33_init[] = {0}; 7908 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7909 static bool8 layout_init[] = {false}; 7910 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7911 static int32_t param34_init[] = {3}; 7912 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7913 static int32_t param35_init[] = {3}; 7914 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7915 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7916 // Phase 3, inputs and outputs 7917 model->identifyInputsAndOutputs( 7918 {op14, op24, op34}, 7919 {op44}); 7920 assert(model->isValid()); 7921 } 7922 7923 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_5(int i) { 7924 static std::set<int> ignore = {}; 7925 return ignore.find(i) != ignore.end(); 7926 } 7927 7928 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_relaxed_5(Model *model) { 7929 OperandType type0(Type::BOOL, {}); 7930 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 7931 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 7932 OperandType type3(Type::TENSOR_FLOAT32, {1}); 7933 OperandType type4(Type::INT32, {}); 7934 OperandType type6(Type::TENSOR_FLOAT32, {1, 6, 6, 1}); 7935 // Phase 1, operands 7936 auto op14 = model->addOperand(&type6); 7937 auto op24 = model->addOperand(&type2); 7938 auto op34 = model->addOperand(&type3); 7939 auto param30 = model->addOperand(&type4); 7940 auto param31 = model->addOperand(&type4); 7941 auto param32 = model->addOperand(&type4); 7942 auto param33 = model->addOperand(&type4); 7943 auto layout = model->addOperand(&type0); 7944 auto param34 = model->addOperand(&type4); 7945 auto param35 = model->addOperand(&type4); 7946 auto op44 = model->addOperand(&type19); 7947 // Phase 2, operations 7948 static int32_t param30_init[] = {1}; 7949 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7950 static int32_t param31_init[] = {2}; 7951 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 7952 static int32_t param32_init[] = {2}; 7953 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 7954 static int32_t param33_init[] = {0}; 7955 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 7956 static bool8 layout_init[] = {false}; 7957 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 7958 static int32_t param34_init[] = {3}; 7959 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 7960 static int32_t param35_init[] = {3}; 7961 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 7962 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 7963 // Phase 3, inputs and outputs 7964 model->identifyInputsAndOutputs( 7965 {op14, op24, op34}, 7966 {op44}); 7967 // Phase 4: set relaxed execution 7968 model->relaxComputationFloat32toFloat16(true); 7969 assert(model->isValid()); 7970 } 7971 7972 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_relaxed_5(int i) { 7973 static std::set<int> ignore = {}; 7974 return ignore.find(i) != ignore.end(); 7975 } 7976 7977 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_quant8_5(Model *model) { 7978 OperandType type0(Type::BOOL, {}); 7979 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 7980 OperandType type29(Type::TENSOR_QUANT8_ASYMM, {1, 6, 6, 1}, 0.5f, 0); 7981 OperandType type4(Type::INT32, {}); 7982 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 7983 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 7984 // Phase 1, operands 7985 auto op14 = model->addOperand(&type29); 7986 auto op24 = model->addOperand(&type8); 7987 auto op34 = model->addOperand(&type9); 7988 auto param30 = model->addOperand(&type4); 7989 auto param31 = model->addOperand(&type4); 7990 auto param32 = model->addOperand(&type4); 7991 auto param33 = model->addOperand(&type4); 7992 auto layout = model->addOperand(&type0); 7993 auto param34 = model->addOperand(&type4); 7994 auto param35 = model->addOperand(&type4); 7995 auto op44 = model->addOperand(&type20); 7996 // Phase 2, operations 7997 static int32_t param30_init[] = {1}; 7998 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 7999 static int32_t param31_init[] = {2}; 8000 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8001 static int32_t param32_init[] = {2}; 8002 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8003 static int32_t param33_init[] = {0}; 8004 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8005 static bool8 layout_init[] = {false}; 8006 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8007 static int32_t param34_init[] = {3}; 8008 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8009 static int32_t param35_init[] = {3}; 8010 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8011 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8012 // Phase 3, inputs and outputs 8013 model->identifyInputsAndOutputs( 8014 {op14, op24, op34}, 8015 {op44}); 8016 assert(model->isValid()); 8017 } 8018 8019 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_quant8_5(int i) { 8020 static std::set<int> ignore = {}; 8021 return ignore.find(i) != ignore.end(); 8022 } 8023 8024 void CreateModel_dynamic_output_shape_nhwc_weight_as_input_float16_5(Model *model) { 8025 OperandType type0(Type::BOOL, {}); 8026 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 8027 OperandType type12(Type::TENSOR_FLOAT16, {1}); 8028 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 8029 OperandType type30(Type::TENSOR_FLOAT16, {1, 6, 6, 1}); 8030 OperandType type4(Type::INT32, {}); 8031 // Phase 1, operands 8032 auto op14 = model->addOperand(&type30); 8033 auto op24 = model->addOperand(&type11); 8034 auto op34 = model->addOperand(&type12); 8035 auto param30 = model->addOperand(&type4); 8036 auto param31 = model->addOperand(&type4); 8037 auto param32 = model->addOperand(&type4); 8038 auto param33 = model->addOperand(&type4); 8039 auto layout = model->addOperand(&type0); 8040 auto param34 = model->addOperand(&type4); 8041 auto param35 = model->addOperand(&type4); 8042 auto op44 = model->addOperand(&type21); 8043 // Phase 2, operations 8044 static int32_t param30_init[] = {1}; 8045 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 8046 static int32_t param31_init[] = {2}; 8047 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8048 static int32_t param32_init[] = {2}; 8049 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8050 static int32_t param33_init[] = {0}; 8051 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8052 static bool8 layout_init[] = {false}; 8053 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8054 static int32_t param34_init[] = {3}; 8055 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8056 static int32_t param35_init[] = {3}; 8057 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8058 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8059 // Phase 3, inputs and outputs 8060 model->identifyInputsAndOutputs( 8061 {op14, op24, op34}, 8062 {op44}); 8063 assert(model->isValid()); 8064 } 8065 8066 inline bool is_ignored_dynamic_output_shape_nhwc_weight_as_input_float16_5(int i) { 8067 static std::set<int> ignore = {}; 8068 return ignore.find(i) != ignore.end(); 8069 } 8070 8071 void CreateModel_dynamic_output_shape_nchw_5(Model *model) { 8072 OperandType type0(Type::BOOL, {}); 8073 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 8074 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 8075 OperandType type3(Type::TENSOR_FLOAT32, {1}); 8076 OperandType type31(Type::TENSOR_FLOAT32, {1, 1, 6, 6}); 8077 OperandType type4(Type::INT32, {}); 8078 // Phase 1, operands 8079 auto op14 = model->addOperand(&type31); 8080 auto op24 = model->addOperand(&type2); 8081 auto op34 = model->addOperand(&type3); 8082 auto param30 = model->addOperand(&type4); 8083 auto param31 = model->addOperand(&type4); 8084 auto param32 = model->addOperand(&type4); 8085 auto param33 = model->addOperand(&type4); 8086 auto layout = model->addOperand(&type0); 8087 auto param34 = model->addOperand(&type4); 8088 auto param35 = model->addOperand(&type4); 8089 auto op44 = model->addOperand(&type19); 8090 // Phase 2, operations 8091 static float op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 8092 model->setOperandValue(op24, op24_init, sizeof(float) * 4); 8093 static float op34_init[] = {0.0f}; 8094 model->setOperandValue(op34, op34_init, sizeof(float) * 1); 8095 static int32_t param30_init[] = {1}; 8096 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 8097 static int32_t param31_init[] = {2}; 8098 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8099 static int32_t param32_init[] = {2}; 8100 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8101 static int32_t param33_init[] = {0}; 8102 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8103 static bool8 layout_init[] = {true}; 8104 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8105 static int32_t param34_init[] = {3}; 8106 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8107 static int32_t param35_init[] = {3}; 8108 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8109 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8110 // Phase 3, inputs and outputs 8111 model->identifyInputsAndOutputs( 8112 {op14}, 8113 {op44}); 8114 assert(model->isValid()); 8115 } 8116 8117 inline bool is_ignored_dynamic_output_shape_nchw_5(int i) { 8118 static std::set<int> ignore = {}; 8119 return ignore.find(i) != ignore.end(); 8120 } 8121 8122 void CreateModel_dynamic_output_shape_nchw_relaxed_5(Model *model) { 8123 OperandType type0(Type::BOOL, {}); 8124 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 8125 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 8126 OperandType type3(Type::TENSOR_FLOAT32, {1}); 8127 OperandType type31(Type::TENSOR_FLOAT32, {1, 1, 6, 6}); 8128 OperandType type4(Type::INT32, {}); 8129 // Phase 1, operands 8130 auto op14 = model->addOperand(&type31); 8131 auto op24 = model->addOperand(&type2); 8132 auto op34 = model->addOperand(&type3); 8133 auto param30 = model->addOperand(&type4); 8134 auto param31 = model->addOperand(&type4); 8135 auto param32 = model->addOperand(&type4); 8136 auto param33 = model->addOperand(&type4); 8137 auto layout = model->addOperand(&type0); 8138 auto param34 = model->addOperand(&type4); 8139 auto param35 = model->addOperand(&type4); 8140 auto op44 = model->addOperand(&type19); 8141 // Phase 2, operations 8142 static float op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 8143 model->setOperandValue(op24, op24_init, sizeof(float) * 4); 8144 static float op34_init[] = {0.0f}; 8145 model->setOperandValue(op34, op34_init, sizeof(float) * 1); 8146 static int32_t param30_init[] = {1}; 8147 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 8148 static int32_t param31_init[] = {2}; 8149 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8150 static int32_t param32_init[] = {2}; 8151 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8152 static int32_t param33_init[] = {0}; 8153 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8154 static bool8 layout_init[] = {true}; 8155 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8156 static int32_t param34_init[] = {3}; 8157 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8158 static int32_t param35_init[] = {3}; 8159 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8160 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8161 // Phase 3, inputs and outputs 8162 model->identifyInputsAndOutputs( 8163 {op14}, 8164 {op44}); 8165 // Phase 4: set relaxed execution 8166 model->relaxComputationFloat32toFloat16(true); 8167 assert(model->isValid()); 8168 } 8169 8170 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_5(int i) { 8171 static std::set<int> ignore = {}; 8172 return ignore.find(i) != ignore.end(); 8173 } 8174 8175 void CreateModel_dynamic_output_shape_nchw_quant8_5(Model *model) { 8176 OperandType type0(Type::BOOL, {}); 8177 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 8178 OperandType type32(Type::TENSOR_QUANT8_ASYMM, {1, 1, 6, 6}, 0.5f, 0); 8179 OperandType type4(Type::INT32, {}); 8180 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 8181 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 8182 // Phase 1, operands 8183 auto op14 = model->addOperand(&type32); 8184 auto op24 = model->addOperand(&type8); 8185 auto op34 = model->addOperand(&type9); 8186 auto param30 = model->addOperand(&type4); 8187 auto param31 = model->addOperand(&type4); 8188 auto param32 = model->addOperand(&type4); 8189 auto param33 = model->addOperand(&type4); 8190 auto layout = model->addOperand(&type0); 8191 auto param34 = model->addOperand(&type4); 8192 auto param35 = model->addOperand(&type4); 8193 auto op44 = model->addOperand(&type20); 8194 // Phase 2, operations 8195 static uint8_t op24_init[] = {8, 16, 24, 32}; 8196 model->setOperandValue(op24, op24_init, sizeof(uint8_t) * 4); 8197 static int32_t op34_init[] = {0}; 8198 model->setOperandValue(op34, op34_init, sizeof(int32_t) * 1); 8199 static int32_t param30_init[] = {1}; 8200 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 8201 static int32_t param31_init[] = {2}; 8202 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8203 static int32_t param32_init[] = {2}; 8204 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8205 static int32_t param33_init[] = {0}; 8206 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8207 static bool8 layout_init[] = {true}; 8208 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8209 static int32_t param34_init[] = {3}; 8210 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8211 static int32_t param35_init[] = {3}; 8212 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8213 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8214 // Phase 3, inputs and outputs 8215 model->identifyInputsAndOutputs( 8216 {op14}, 8217 {op44}); 8218 assert(model->isValid()); 8219 } 8220 8221 inline bool is_ignored_dynamic_output_shape_nchw_quant8_5(int i) { 8222 static std::set<int> ignore = {}; 8223 return ignore.find(i) != ignore.end(); 8224 } 8225 8226 void CreateModel_dynamic_output_shape_nchw_float16_5(Model *model) { 8227 OperandType type0(Type::BOOL, {}); 8228 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 8229 OperandType type12(Type::TENSOR_FLOAT16, {1}); 8230 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 8231 OperandType type33(Type::TENSOR_FLOAT16, {1, 1, 6, 6}); 8232 OperandType type4(Type::INT32, {}); 8233 // Phase 1, operands 8234 auto op14 = model->addOperand(&type33); 8235 auto op24 = model->addOperand(&type11); 8236 auto op34 = model->addOperand(&type12); 8237 auto param30 = model->addOperand(&type4); 8238 auto param31 = model->addOperand(&type4); 8239 auto param32 = model->addOperand(&type4); 8240 auto param33 = model->addOperand(&type4); 8241 auto layout = model->addOperand(&type0); 8242 auto param34 = model->addOperand(&type4); 8243 auto param35 = model->addOperand(&type4); 8244 auto op44 = model->addOperand(&type21); 8245 // Phase 2, operations 8246 static _Float16 op24_init[] = {1.0f, 2.0f, 3.0f, 4.0f}; 8247 model->setOperandValue(op24, op24_init, sizeof(_Float16) * 4); 8248 static _Float16 op34_init[] = {0.0f}; 8249 model->setOperandValue(op34, op34_init, sizeof(_Float16) * 1); 8250 static int32_t param30_init[] = {1}; 8251 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 8252 static int32_t param31_init[] = {2}; 8253 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8254 static int32_t param32_init[] = {2}; 8255 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8256 static int32_t param33_init[] = {0}; 8257 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8258 static bool8 layout_init[] = {true}; 8259 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8260 static int32_t param34_init[] = {3}; 8261 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8262 static int32_t param35_init[] = {3}; 8263 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8264 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8265 // Phase 3, inputs and outputs 8266 model->identifyInputsAndOutputs( 8267 {op14}, 8268 {op44}); 8269 assert(model->isValid()); 8270 } 8271 8272 inline bool is_ignored_dynamic_output_shape_nchw_float16_5(int i) { 8273 static std::set<int> ignore = {}; 8274 return ignore.find(i) != ignore.end(); 8275 } 8276 8277 void CreateModel_dynamic_output_shape_nchw_weight_as_input_5(Model *model) { 8278 OperandType type0(Type::BOOL, {}); 8279 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 8280 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 8281 OperandType type3(Type::TENSOR_FLOAT32, {1}); 8282 OperandType type31(Type::TENSOR_FLOAT32, {1, 1, 6, 6}); 8283 OperandType type4(Type::INT32, {}); 8284 // Phase 1, operands 8285 auto op14 = model->addOperand(&type31); 8286 auto op24 = model->addOperand(&type2); 8287 auto op34 = model->addOperand(&type3); 8288 auto param30 = model->addOperand(&type4); 8289 auto param31 = model->addOperand(&type4); 8290 auto param32 = model->addOperand(&type4); 8291 auto param33 = model->addOperand(&type4); 8292 auto layout = model->addOperand(&type0); 8293 auto param34 = model->addOperand(&type4); 8294 auto param35 = model->addOperand(&type4); 8295 auto op44 = model->addOperand(&type19); 8296 // Phase 2, operations 8297 static int32_t param30_init[] = {1}; 8298 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 8299 static int32_t param31_init[] = {2}; 8300 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8301 static int32_t param32_init[] = {2}; 8302 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8303 static int32_t param33_init[] = {0}; 8304 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8305 static bool8 layout_init[] = {true}; 8306 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8307 static int32_t param34_init[] = {3}; 8308 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8309 static int32_t param35_init[] = {3}; 8310 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8311 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8312 // Phase 3, inputs and outputs 8313 model->identifyInputsAndOutputs( 8314 {op14, op24, op34}, 8315 {op44}); 8316 assert(model->isValid()); 8317 } 8318 8319 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_5(int i) { 8320 static std::set<int> ignore = {}; 8321 return ignore.find(i) != ignore.end(); 8322 } 8323 8324 void CreateModel_dynamic_output_shape_nchw_weight_as_input_relaxed_5(Model *model) { 8325 OperandType type0(Type::BOOL, {}); 8326 OperandType type19(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 8327 OperandType type2(Type::TENSOR_FLOAT32, {1, 2, 2, 1}); 8328 OperandType type3(Type::TENSOR_FLOAT32, {1}); 8329 OperandType type31(Type::TENSOR_FLOAT32, {1, 1, 6, 6}); 8330 OperandType type4(Type::INT32, {}); 8331 // Phase 1, operands 8332 auto op14 = model->addOperand(&type31); 8333 auto op24 = model->addOperand(&type2); 8334 auto op34 = model->addOperand(&type3); 8335 auto param30 = model->addOperand(&type4); 8336 auto param31 = model->addOperand(&type4); 8337 auto param32 = model->addOperand(&type4); 8338 auto param33 = model->addOperand(&type4); 8339 auto layout = model->addOperand(&type0); 8340 auto param34 = model->addOperand(&type4); 8341 auto param35 = model->addOperand(&type4); 8342 auto op44 = model->addOperand(&type19); 8343 // Phase 2, operations 8344 static int32_t param30_init[] = {1}; 8345 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 8346 static int32_t param31_init[] = {2}; 8347 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8348 static int32_t param32_init[] = {2}; 8349 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8350 static int32_t param33_init[] = {0}; 8351 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8352 static bool8 layout_init[] = {true}; 8353 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8354 static int32_t param34_init[] = {3}; 8355 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8356 static int32_t param35_init[] = {3}; 8357 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8358 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8359 // Phase 3, inputs and outputs 8360 model->identifyInputsAndOutputs( 8361 {op14, op24, op34}, 8362 {op44}); 8363 // Phase 4: set relaxed execution 8364 model->relaxComputationFloat32toFloat16(true); 8365 assert(model->isValid()); 8366 } 8367 8368 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_relaxed_5(int i) { 8369 static std::set<int> ignore = {}; 8370 return ignore.find(i) != ignore.end(); 8371 } 8372 8373 void CreateModel_dynamic_output_shape_nchw_weight_as_input_quant8_5(Model *model) { 8374 OperandType type0(Type::BOOL, {}); 8375 OperandType type20(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.125f, 0); 8376 OperandType type32(Type::TENSOR_QUANT8_ASYMM, {1, 1, 6, 6}, 0.5f, 0); 8377 OperandType type4(Type::INT32, {}); 8378 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.125f, 0); 8379 OperandType type9(Type::TENSOR_INT32, {1}, 0.0625f, 0); 8380 // Phase 1, operands 8381 auto op14 = model->addOperand(&type32); 8382 auto op24 = model->addOperand(&type8); 8383 auto op34 = model->addOperand(&type9); 8384 auto param30 = model->addOperand(&type4); 8385 auto param31 = model->addOperand(&type4); 8386 auto param32 = model->addOperand(&type4); 8387 auto param33 = model->addOperand(&type4); 8388 auto layout = model->addOperand(&type0); 8389 auto param34 = model->addOperand(&type4); 8390 auto param35 = model->addOperand(&type4); 8391 auto op44 = model->addOperand(&type20); 8392 // Phase 2, operations 8393 static int32_t param30_init[] = {1}; 8394 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 8395 static int32_t param31_init[] = {2}; 8396 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8397 static int32_t param32_init[] = {2}; 8398 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8399 static int32_t param33_init[] = {0}; 8400 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8401 static bool8 layout_init[] = {true}; 8402 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8403 static int32_t param34_init[] = {3}; 8404 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8405 static int32_t param35_init[] = {3}; 8406 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8407 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8408 // Phase 3, inputs and outputs 8409 model->identifyInputsAndOutputs( 8410 {op14, op24, op34}, 8411 {op44}); 8412 assert(model->isValid()); 8413 } 8414 8415 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_quant8_5(int i) { 8416 static std::set<int> ignore = {}; 8417 return ignore.find(i) != ignore.end(); 8418 } 8419 8420 void CreateModel_dynamic_output_shape_nchw_weight_as_input_float16_5(Model *model) { 8421 OperandType type0(Type::BOOL, {}); 8422 OperandType type11(Type::TENSOR_FLOAT16, {1, 2, 2, 1}); 8423 OperandType type12(Type::TENSOR_FLOAT16, {1}); 8424 OperandType type21(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 8425 OperandType type33(Type::TENSOR_FLOAT16, {1, 1, 6, 6}); 8426 OperandType type4(Type::INT32, {}); 8427 // Phase 1, operands 8428 auto op14 = model->addOperand(&type33); 8429 auto op24 = model->addOperand(&type11); 8430 auto op34 = model->addOperand(&type12); 8431 auto param30 = model->addOperand(&type4); 8432 auto param31 = model->addOperand(&type4); 8433 auto param32 = model->addOperand(&type4); 8434 auto param33 = model->addOperand(&type4); 8435 auto layout = model->addOperand(&type0); 8436 auto param34 = model->addOperand(&type4); 8437 auto param35 = model->addOperand(&type4); 8438 auto op44 = model->addOperand(&type21); 8439 // Phase 2, operations 8440 static int32_t param30_init[] = {1}; 8441 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 8442 static int32_t param31_init[] = {2}; 8443 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 8444 static int32_t param32_init[] = {2}; 8445 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 8446 static int32_t param33_init[] = {0}; 8447 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 8448 static bool8 layout_init[] = {true}; 8449 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 8450 static int32_t param34_init[] = {3}; 8451 model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1); 8452 static int32_t param35_init[] = {3}; 8453 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 8454 model->addOperation(ANEURALNETWORKS_CONV_2D, {op14, op24, op34, param30, param31, param32, param33, layout, param34, param35}, {op44}); 8455 // Phase 3, inputs and outputs 8456 model->identifyInputsAndOutputs( 8457 {op14, op24, op34}, 8458 {op44}); 8459 assert(model->isValid()); 8460 } 8461 8462 inline bool is_ignored_dynamic_output_shape_nchw_weight_as_input_float16_5(int i) { 8463 static std::set<int> ignore = {}; 8464 return ignore.find(i) != ignore.end(); 8465 } 8466 8467