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