1389{
1391
1392 switch (builtin_op)
1393 {
1394 case BuiltinOperator::BuiltinOperator_ADD_N:
1395 loadOperationTo<ir::operation::AddN>(op, subg);
1396 return;
1397 case BuiltinOperator::BuiltinOperator_CONV_2D:
1398 loadConv2D(op, subg);
1399 return;
1400 case BuiltinOperator::BuiltinOperator_AVERAGE_POOL_2D:
1402 return;
1403 case BuiltinOperator::BuiltinOperator_DEPTHWISE_CONV_2D:
1404 loadDepthwiseConv2D(op, subg);
1405 return;
1406 case BuiltinOperator::BuiltinOperator_TRANSPOSE_CONV:
1407 loadTransposeConv(op, subg);
1408 return;
1409 case BuiltinOperator::BuiltinOperator_RESHAPE:
1410 loadReshape(op, subg);
1411 return;
1412 case BuiltinOperator::BuiltinOperator_SOFTMAX:
1413 loadSoftmax(op, subg);
1414 return;
1415 case BuiltinOperator::BuiltinOperator_MAX_POOL_2D:
1417 return;
1418 case BuiltinOperator::BuiltinOperator_CONCATENATION:
1419 loadConcatenation(op, subg);
1420 return;
1421 case BuiltinOperator::BuiltinOperator_FLOOR:
1423 return;
1424 case BuiltinOperator::BuiltinOperator_FULLY_CONNECTED:
1425 loadFC(op, subg);
1426 return;
1427 case BuiltinOperator::BuiltinOperator_ADD:
1429 return;
1430 case BuiltinOperator::BuiltinOperator_SUB:
1432 return;
1433 case BuiltinOperator::BuiltinOperator_MUL:
1435 return;
1436 case BuiltinOperator::BuiltinOperator_DIV:
1438 return;
1439 case BuiltinOperator::BuiltinOperator_PACK:
1440 loadPack(op, subg);
1441 return;
1442 case BuiltinOperator::BuiltinOperator_ELU:
1444 return;
1445 case BuiltinOperator::BuiltinOperator_RELU:
1448 return;
1449 case BuiltinOperator::BuiltinOperator_RELU_N1_TO_1:
1451 -1.f);
1452 return;
1453 case BuiltinOperator::BuiltinOperator_RELU6:
1455 0.f);
1456 return;
1457 case BuiltinOperator::BuiltinOperator_RESIZE_BILINEAR:
1458 loadResizeBilinear(op, subg);
1459 return;
1460 case BuiltinOperator::BuiltinOperator_RESIZE_NEAREST_NEIGHBOR:
1461 loadResizeNearestNeighbor(op, subg);
1462 return;
1463 case BuiltinOperator::BuiltinOperator_RSQRT:
1465 return;
1466 case BuiltinOperator::BuiltinOperator_SELECT:
1467 case BuiltinOperator::BuiltinOperator_SELECT_V2:
1468 loadOperationTo<ir::operation::Select>(op, subg);
1469 return;
1470 case BuiltinOperator::BuiltinOperator_SQRT:
1472 return;
1473 case BuiltinOperator::BuiltinOperator_SQUARE:
1475 return;
1476 case BuiltinOperator::BuiltinOperator_SQUARED_DIFFERENCE:
1477 loadOperationTo<ir::operation::SquaredDifference>(op, subg);
1478 return;
1479 case BuiltinOperator::BuiltinOperator_TANH:
1481 1.f);
1482 return;
1483 case BuiltinOperator::BuiltinOperator_TRANSPOSE:
1484 loadOperationTo<ir::operation::Transpose>(op, subg);
1485 return;
1486 case BuiltinOperator::BuiltinOperator_MEAN:
1488 return;
1489 case BuiltinOperator::BuiltinOperator_REDUCE_ANY:
1491 return;
1492 case BuiltinOperator::BuiltinOperator_REDUCE_MAX:
1494 return;
1495 case BuiltinOperator::BuiltinOperator_REDUCE_ALL:
1497 return;
1498 case BuiltinOperator::BuiltinOperator_REVERSE_V2:
1499 loadOperationTo<ir::operation::Reverse>(op, subg);
1500 return;
1501 case BuiltinOperator::BuiltinOperator_PAD:
1502 case BuiltinOperator::BuiltinOperator_PADV2:
1503 loadOperationTo<ir::operation::Pad>(op, subg);
1504 return;
1505 case BuiltinOperator::BuiltinOperator_LOGISTIC:
1507 return;
1508 case BuiltinOperator::BuiltinOperator_EXP:
1510 return;
1511 case BuiltinOperator::BuiltinOperator_EXPAND_DIMS:
1512 loadOperationTo<ir::operation::ExpandDims>(op, subg);
1513 return;
1514 case BuiltinOperator::BuiltinOperator_GATHER:
1515 loadGather(op, subg);
1516 return;
1517 case BuiltinOperator::BuiltinOperator_GELU:
1518 loadGELU(op, subg);
1519 return;
1520 case BuiltinOperator::BuiltinOperator_SPACE_TO_BATCH_ND:
1521 loadOperationTo<ir::operation::SpaceToBatchND>(op, subg);
1522 return;
1523 case BuiltinOperator::BuiltinOperator_BATCH_TO_SPACE_ND:
1524 loadOperationTo<ir::operation::BatchToSpaceND>(op, subg);
1525 return;
1526 case BuiltinOperator::BuiltinOperator_SUM:
1528 return;
1529 case BuiltinOperator::BuiltinOperator_CUSTOM:
1530 loadCustom(op, subg);
1531 return;
1532 case BuiltinOperator::BuiltinOperator_SQUEEZE:
1533 loadSqueeze(op, subg);
1534 return;
1535 case BuiltinOperator::BuiltinOperator_PRELU:
1536 loadOperationTo<ir::operation::PReLU>(op, subg);
1537 return;
1538 case BuiltinOperator::BuiltinOperator_SPLIT:
1539 loadSplit(op, subg);
1540 return;
1541 case BuiltinOperator::BuiltinOperator_SPLIT_V:
1542 loadSplitV(op, subg);
1543 return;
1544 case BuiltinOperator::BuiltinOperator_SLICE:
1545 loadOperationTo<ir::operation::Slice>(op, subg);
1546 return;
1547 case BuiltinOperator::BuiltinOperator_STRIDED_SLICE:
1548 loadStridedSlice(op, subg);
1549 return;
1550 case BuiltinOperator::BuiltinOperator_UNPACK:
1551 loadUnpack(op, subg);
1552 return;
1553 case BuiltinOperator::BuiltinOperator_FLOOR_DIV:
1554 loadElementwiseBinary(op, subg,
1556 return;
1557 case BuiltinOperator::BuiltinOperator_FLOOR_MOD:
1558 loadElementwiseBinary(op, subg,
1560 return;
1561 case BuiltinOperator::BuiltinOperator_MINIMUM:
1563 return;
1564 case BuiltinOperator::BuiltinOperator_MAXIMUM:
1566 return;
1567 case BuiltinOperator::BuiltinOperator_CAST:
1569 return;
1570 case BuiltinOperator::BuiltinOperator_EQUAL:
1571 case BuiltinOperator::BuiltinOperator_NOT_EQUAL:
1572 case BuiltinOperator::BuiltinOperator_GREATER_EQUAL:
1573 case BuiltinOperator::BuiltinOperator_GREATER:
1574 case BuiltinOperator::BuiltinOperator_LESS_EQUAL:
1575 case BuiltinOperator::BuiltinOperator_LESS:
1576 loadComparison(op, subg);
1577 return;
1578 case BuiltinOperator::BuiltinOperator_ONE_HOT:
1579 loadOneHot(op, subg);
1580 return;
1581 case BuiltinOperator::BuiltinOperator_ABS:
1583 return;
1584 case BuiltinOperator::BuiltinOperator_COS:
1586 return;
1587 case BuiltinOperator::BuiltinOperator_SIN:
1589 return;
1590 case BuiltinOperator::BuiltinOperator_SHAPE:
1591 loadOperationTo<ir::operation::Shape>(op, subg);
1592 return;
1593 case BuiltinOperator::BuiltinOperator_REDUCE_PROD:
1595 return;
1596 case BuiltinOperator::BuiltinOperator_IF:
1597 loadIf(op, subg);
1598 return;
1599 case BuiltinOperator::BuiltinOperator_WHILE:
1600 loadWhile(op, subg);
1601 return;
1602 case BuiltinOperator::BuiltinOperator_NEG:
1604 return;
1605 case BuiltinOperator::BuiltinOperator_ARG_MAX:
1606 loadArgMinMax(op, subg, true);
1607 return;
1608 case BuiltinOperator::BuiltinOperator_ARG_MIN:
1609 loadArgMinMax(op, subg, false);
1610 return;
1611 case BuiltinOperator::BuiltinOperator_LOG:
1613 return;
1614 case BuiltinOperator::BuiltinOperator_ROUND:
1616 return;
1617 case BuiltinOperator::BuiltinOperator_POW:
1618 loadOperationTo<ir::operation::Pow>(op, subg);
1619 return;
1620 case BuiltinOperator::BuiltinOperator_LOGICAL_NOT:
1622 return;
1623 case BuiltinOperator::BuiltinOperator_LOGICAL_AND:
1624 loadElementwiseBinary(op, subg,
1626 return;
1627 case BuiltinOperator::BuiltinOperator_LOGICAL_OR:
1628 loadElementwiseBinary(op, subg,
1630 return;
1631 case BuiltinOperator::BuiltinOperator_FILL:
1632 loadOperationTo<ir::operation::Fill>(op, subg);
1633 return;
1634 case BuiltinOperator::BuiltinOperator_ZEROS_LIKE:
1636 return;
1637 case BuiltinOperator::BuiltinOperator_TILE:
1638 loadOperationTo<ir::operation::Tile>(op, subg);
1639 return;
1640 case BuiltinOperator::BuiltinOperator_RANGE:
1641 loadOperationTo<ir::operation::Range>(op, subg);
1642 return;
1643
1644
1645
1646
1647 case BuiltinOperator::BuiltinOperator_BROADCAST_TO:
1648 loadOperationTo<ir::operation::BroadcastTo>(op, subg);
1649 return;
1650 case BuiltinOperator::BuiltinOperator_LOG_SOFTMAX:
1651 loadLogSoftmax(op, subg);
1652 return;
1653 case BuiltinOperator::BuiltinOperator_QUANTIZE:
1655 return;
1656 case BuiltinOperator::BuiltinOperator_DEQUANTIZE:
1658 return;
1659 case BuiltinOperator::BuiltinOperator_SPACE_TO_DEPTH:
1660 loadSpaceToDepth(op, subg);
1661 return;
1662 case BuiltinOperator::BuiltinOperator_L2_NORMALIZATION:
1663 loadOperationTo<ir::operation::L2Normalization>(op, subg);
1664 break;
1665 case BuiltinOperator::BuiltinOperator_LEAKY_RELU:
1666 loadLeakyRelu(op, subg);
1667 return;
1668 case BuiltinOperator::BuiltinOperator_RANK:
1669 loadOperationTo<ir::operation::Rank>(op, subg);
1670 return;
1671 case BuiltinOperator::BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_LSTM:
1672 loadUnidirectionalSequenceLSTM(op, subg);
1673 return;
1674 case BuiltinOperator::BuiltinOperator_DEPTH_TO_SPACE:
1675 loadDepthToSpace(op, subg);
1676 return;
1677 case BuiltinOperator::BuiltinOperator_EMBEDDING_LOOKUP:
1678 loadOperationTo<ir::operation::EmbeddingLookup>(op, subg);
1679 return;
1680 case BuiltinOperator::BuiltinOperator_HASHTABLE_LOOKUP:
1681 loadOperationTo<ir::operation::HashtableLookup>(op, subg);
1682 return;
1683 case BuiltinOperator::BuiltinOperator_DYNAMIC_UPDATE_SLICE:
1684 loadOperationTo<ir::operation::DynamicUpdateSlice>(op, subg);
1685 return;
1686 case BuiltinOperator::BuiltinOperator_TOPK_V2:
1687 loadTopKV2(op, subg);
1688 return;
1689 default:
1690 throw std::runtime_error(
1691 std::string("Unsupported operation: ").append(EnumNameBuiltinOperator(builtin_op)));
1692 }
1693}
BuiltinOperator getBuiltinOperator(const Operator *op)