1459{
1461
1462 switch (builtin_op)
1463 {
1464 case BuiltinOperator::BuiltinOperator_ADD_N:
1465 loadOperationTo<ir::operation::AddN>(op, subg);
1466 return;
1467 case BuiltinOperator::BuiltinOperator_CONV_2D:
1468 loadConv2D(op, subg);
1469 return;
1470 case BuiltinOperator::BuiltinOperator_AVERAGE_POOL_2D:
1472 return;
1473 case BuiltinOperator::BuiltinOperator_DEPTHWISE_CONV_2D:
1474 loadDepthwiseConv2D(op, subg);
1475 return;
1476 case BuiltinOperator::BuiltinOperator_TRANSPOSE_CONV:
1477 loadTransposeConv(op, subg);
1478 return;
1479 case BuiltinOperator::BuiltinOperator_RESHAPE:
1480 loadReshape(op, subg);
1481 return;
1482 case BuiltinOperator::BuiltinOperator_SOFTMAX:
1483 loadSoftmax(op, subg);
1484 return;
1485 case BuiltinOperator::BuiltinOperator_MAX_POOL_2D:
1487 return;
1488 case BuiltinOperator::BuiltinOperator_CONCATENATION:
1489 loadConcatenation(op, subg);
1490 return;
1491 case BuiltinOperator::BuiltinOperator_FLOOR:
1493 return;
1494 case BuiltinOperator::BuiltinOperator_FULLY_CONNECTED:
1495 loadFC(op, subg);
1496 return;
1497 case BuiltinOperator::BuiltinOperator_ADD:
1499 return;
1500 case BuiltinOperator::BuiltinOperator_SUB:
1502 return;
1503 case BuiltinOperator::BuiltinOperator_MUL:
1505 return;
1506 case BuiltinOperator::BuiltinOperator_DIV:
1508 return;
1509 case BuiltinOperator::BuiltinOperator_PACK:
1510 loadPack(op, subg);
1511 return;
1512 case BuiltinOperator::BuiltinOperator_ELU:
1514 return;
1515 case BuiltinOperator::BuiltinOperator_RELU:
1518 return;
1519 case BuiltinOperator::BuiltinOperator_RELU_N1_TO_1:
1521 -1.f);
1522 return;
1523 case BuiltinOperator::BuiltinOperator_RELU6:
1525 0.f);
1526 return;
1527 case BuiltinOperator::BuiltinOperator_RESIZE_BILINEAR:
1528 loadResizeBilinear(op, subg);
1529 return;
1530 case BuiltinOperator::BuiltinOperator_RESIZE_NEAREST_NEIGHBOR:
1531 loadResizeNearestNeighbor(op, subg);
1532 return;
1533 case BuiltinOperator::BuiltinOperator_RSQRT:
1535 return;
1536 case BuiltinOperator::BuiltinOperator_SELECT:
1537 case BuiltinOperator::BuiltinOperator_SELECT_V2:
1538 loadOperationTo<ir::operation::Select>(op, subg);
1539 return;
1540 case BuiltinOperator::BuiltinOperator_SQRT:
1542 return;
1543 case BuiltinOperator::BuiltinOperator_SQUARE:
1545 return;
1546 case BuiltinOperator::BuiltinOperator_SQUARED_DIFFERENCE:
1547 loadOperationTo<ir::operation::SquaredDifference>(op, subg);
1548 return;
1549 case BuiltinOperator::BuiltinOperator_TANH:
1551 1.f);
1552 return;
1553 case BuiltinOperator::BuiltinOperator_TRANSPOSE:
1554 loadOperationTo<ir::operation::Transpose>(op, subg);
1555 return;
1556 case BuiltinOperator::BuiltinOperator_MEAN:
1558 return;
1559 case BuiltinOperator::BuiltinOperator_REDUCE_ANY:
1561 return;
1562 case BuiltinOperator::BuiltinOperator_REDUCE_MAX:
1564 return;
1565 case BuiltinOperator::BuiltinOperator_REVERSE_V2:
1566 loadOperationTo<ir::operation::Reverse>(op, subg);
1567 return;
1568 case BuiltinOperator::BuiltinOperator_PAD:
1569 case BuiltinOperator::BuiltinOperator_PADV2:
1570 loadOperationTo<ir::operation::Pad>(op, subg);
1571 return;
1572 case BuiltinOperator::BuiltinOperator_LOGISTIC:
1574 return;
1575 case BuiltinOperator::BuiltinOperator_EXP:
1577 return;
1578 case BuiltinOperator::BuiltinOperator_EXPAND_DIMS:
1579 loadOperationTo<ir::operation::ExpandDims>(op, subg);
1580 return;
1581 case BuiltinOperator::BuiltinOperator_GATHER:
1582 loadGather(op, subg);
1583 return;
1584 case BuiltinOperator::BuiltinOperator_SPACE_TO_BATCH_ND:
1585 loadOperationTo<ir::operation::SpaceToBatchND>(op, subg);
1586 return;
1587 case BuiltinOperator::BuiltinOperator_BATCH_TO_SPACE_ND:
1588 loadOperationTo<ir::operation::BatchToSpaceND>(op, subg);
1589 return;
1590 case BuiltinOperator::BuiltinOperator_SUM:
1592 return;
1593 case BuiltinOperator::BuiltinOperator_CUSTOM:
1594 loadCustom(op, subg);
1595 return;
1596 case BuiltinOperator::BuiltinOperator_SQUEEZE:
1597 loadSqueeze(op, subg);
1598 return;
1599 case BuiltinOperator::BuiltinOperator_PRELU:
1600 loadOperationTo<ir::operation::PReLU>(op, subg);
1601 return;
1602 case BuiltinOperator::BuiltinOperator_SPLIT:
1603 loadSplit(op, subg);
1604 return;
1605 case BuiltinOperator::BuiltinOperator_SPLIT_V:
1606 loadSplitV(op, subg);
1607 return;
1608 case BuiltinOperator::BuiltinOperator_SLICE:
1609 loadOperationTo<ir::operation::Slice>(op, subg);
1610 return;
1611 case BuiltinOperator::BuiltinOperator_STRIDED_SLICE:
1612 loadStridedSlice(op, subg);
1613 return;
1614 case BuiltinOperator::BuiltinOperator_UNPACK:
1615 loadUnpack(op, subg);
1616 return;
1617 case BuiltinOperator::BuiltinOperator_FLOOR_DIV:
1618 loadElementwiseBinary(op, subg,
1620 return;
1621 case BuiltinOperator::BuiltinOperator_FLOOR_MOD:
1622 loadElementwiseBinary(op, subg,
1624 return;
1625 case BuiltinOperator::BuiltinOperator_MINIMUM:
1627 return;
1628 case BuiltinOperator::BuiltinOperator_MAXIMUM:
1630 return;
1631 case BuiltinOperator::BuiltinOperator_CAST:
1633 return;
1634 case BuiltinOperator::BuiltinOperator_EQUAL:
1635 case BuiltinOperator::BuiltinOperator_NOT_EQUAL:
1636 case BuiltinOperator::BuiltinOperator_GREATER_EQUAL:
1637 case BuiltinOperator::BuiltinOperator_GREATER:
1638 case BuiltinOperator::BuiltinOperator_LESS_EQUAL:
1639 case BuiltinOperator::BuiltinOperator_LESS:
1640 loadComparison(op, subg);
1641 return;
1642 case BuiltinOperator::BuiltinOperator_ONE_HOT:
1643 loadOneHot(op, subg);
1644 return;
1645 case BuiltinOperator::BuiltinOperator_ABS:
1647 return;
1648 case BuiltinOperator::BuiltinOperator_COS:
1650 return;
1651 case BuiltinOperator::BuiltinOperator_SIN:
1653 return;
1654 case BuiltinOperator::BuiltinOperator_SHAPE:
1655 loadOperationTo<ir::operation::Shape>(op, subg);
1656 return;
1657 case BuiltinOperator::BuiltinOperator_REDUCE_PROD:
1659 return;
1660 case BuiltinOperator::BuiltinOperator_IF:
1661 loadIf(op, subg);
1662 return;
1663 case BuiltinOperator::BuiltinOperator_WHILE:
1664 loadWhile(op, subg);
1665 return;
1666 case BuiltinOperator::BuiltinOperator_NEG:
1668 return;
1669 case BuiltinOperator::BuiltinOperator_ARG_MAX:
1670 loadArgMinMax(op, subg, true);
1671 return;
1672 case BuiltinOperator::BuiltinOperator_ARG_MIN:
1673 loadArgMinMax(op, subg, false);
1674 return;
1675 case BuiltinOperator::BuiltinOperator_LOG:
1677 return;
1678 case BuiltinOperator::BuiltinOperator_ROUND:
1680 return;
1681 case BuiltinOperator::BuiltinOperator_POW:
1682 loadOperationTo<ir::operation::Pow>(op, subg);
1683 return;
1684 case BuiltinOperator::BuiltinOperator_LOGICAL_NOT:
1686 return;
1687 case BuiltinOperator::BuiltinOperator_LOGICAL_AND:
1688 loadElementwiseBinary(op, subg,
1690 return;
1691 case BuiltinOperator::BuiltinOperator_LOGICAL_OR:
1692 loadElementwiseBinary(op, subg,
1694 return;
1695 case BuiltinOperator::BuiltinOperator_FILL:
1696 loadOperationTo<ir::operation::Fill>(op, subg);
1697 return;
1698 case BuiltinOperator::BuiltinOperator_ZEROS_LIKE:
1700 return;
1701 case BuiltinOperator::BuiltinOperator_TILE:
1702 loadOperationTo<ir::operation::Tile>(op, subg);
1703 return;
1704 case BuiltinOperator::BuiltinOperator_RANGE:
1705 loadOperationTo<ir::operation::Range>(op, subg);
1706 return;
1707 case BuiltinOperator::BuiltinOperator_BATCH_MATMUL:
1708 loadBatchMatMul(op, subg);
1709 return;
1710 case BuiltinOperator::BuiltinOperator_LOG_SOFTMAX:
1711 loadLogSoftmax(op, subg);
1712 return;
1713 case BuiltinOperator::BuiltinOperator_QUANTIZE:
1715 return;
1716 case BuiltinOperator::BuiltinOperator_DEQUANTIZE:
1718 return;
1719 case BuiltinOperator::BuiltinOperator_SPACE_TO_DEPTH:
1720 loadSpaceToDepth(op, subg);
1721 return;
1722 case BuiltinOperator::BuiltinOperator_L2_NORMALIZATION:
1723 loadOperationTo<ir::operation::L2Normalization>(op, subg);
1724 break;
1725 case BuiltinOperator::BuiltinOperator_LEAKY_RELU:
1726 loadLeakyRelu(op, subg);
1727 return;
1728 case BuiltinOperator::BuiltinOperator_RANK:
1729 loadOperationTo<ir::operation::Rank>(op, subg);
1730 return;
1731 case BuiltinOperator::BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_LSTM:
1732 loadUnidirectionalSequenceLSTM(op, subg);
1733 return;
1734 case BuiltinOperator::BuiltinOperator_DEPTH_TO_SPACE:
1735 loadDepthToSpace(op, subg);
1736 return;
1737 case BuiltinOperator::BuiltinOperator_EMBEDDING_LOOKUP:
1738 loadOperationTo<ir::operation::EmbeddingLookup>(op, subg);
1739 return;
1740 case BuiltinOperator::BuiltinOperator_HASHTABLE_LOOKUP:
1741 loadOperationTo<ir::operation::HashtableLookup>(op, subg);
1742 return;
1743 default:
1744 throw std::runtime_error(
1745 std::string("Unsupported operation: ").append(EnumNameBuiltinOperator(builtin_op)));
1746 }
1747}
BuiltinOperator getBuiltinOperator(const Operator *op)