[exo] Replacing throw to oops InternalExn (#9238)
author윤현식/On-Device Lab(SR)/Principal Engineer/삼성전자 <hyunsik.yoon@samsung.com>
Wed, 27 Nov 2019 23:06:23 +0000 (08:06 +0900)
committer박종현/On-Device Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Wed, 27 Nov 2019 23:06:23 +0000 (08:06 +0900)
This replaces throw statements to oops InternalExn.

Signed-off-by: Hyun Sik Yoon <hyunsik.yoon@samsung.com>
24 files changed:
compiler/exo/CMakeLists.txt
compiler/exo/src/Check.h
compiler/exo/src/Circle/CircleOperationExporter.cpp
compiler/exo/src/Circle/CircleTensorExporter.cpp
compiler/exo/src/Circle/CircleTypeInference.cpp
compiler/exo/src/Conversion/ConstGenConverter.cpp
compiler/exo/src/Conversion/TensorReduceConverter.cpp
compiler/exo/src/Conversion/TensorTransposeConverter.cpp
compiler/exo/src/Dialect/IR/CircleNodeImpl.h
compiler/exo/src/Dialect/IR/CircleNodeVisitor.h
compiler/exo/src/Dialect/IR/TFLNodeImpl.h
compiler/exo/src/Dialect/IR/TFLNodeVisitor.h
compiler/exo/src/Dialect/Service/TFLShapeInferenceRule.cpp
compiler/exo/src/ExporterUtils.cpp
compiler/exo/src/GraphBlock.h
compiler/exo/src/Pass/FoldReshapeOfConstPass.cpp
compiler/exo/src/Pass/FoldTransposeOfConstPass.cpp
compiler/exo/src/Pass/FuseBiasAddPass.cpp
compiler/exo/src/Pass/MergeConcatNodesPass.cpp
compiler/exo/src/TFLite/TFLExporterImpl.cpp
compiler/exo/src/TFLite/TFLExporterUtils.cpp
compiler/exo/src/TFLite/TFLOperationExporter.cpp
compiler/exo/src/TFLite/TFLTensorExporter.cpp
compiler/exo/src/TFLite/TFLTypeInference.cpp

index 49697f9..79c75ef 100644 (file)
@@ -69,4 +69,5 @@ target_link_libraries(exo_test pepper_str)
 target_link_libraries(exo_test exo)
 target_link_libraries(exo_test hermes_std)
 target_link_libraries(exo_test logo)
+target_link_libraries(exo_test oops)
 target_link_libraries(exo_test locoex_customop)
index 63e9009..79dac50 100644 (file)
@@ -25,8 +25,6 @@
 
 // TODO Add macro for Release version
 
-#define EXO_THROW(msg) throw std::runtime_error(pepper::str(msg, " at ", __FILE__, ":", __LINE__))
-
 #define EXO_ASSERT(condition, msg)                                   \
   {                                                                  \
     if (!(condition))                                                \
index 346ce75..223ebb2 100644 (file)
@@ -33,6 +33,8 @@
 #include <loco/Service/ShapeInference.h>
 #include <locoex/COpCall.h>
 
+#include <oops/InternalExn.h>
+
 #include <flatbuffers/flexbuffers.h>
 
 using namespace flatbuffers;
@@ -659,7 +661,7 @@ void OperationExporter::visit(loco::TensorReduce *node)
 
     // TODO Support more reduce type operation
     default:
-      throw std::runtime_error("Not supported reduce type");
+      INTERNAL_EXN_V("Unsupported reduce type", oops::to_uint32(node->func()));
   }
 
   // Create a vector for axes data
@@ -1027,7 +1029,7 @@ void OperationExporter::visit(loco::FixedReshape *node)
 
 void OperationExporter::visit(loco::TensorBroadcast *)
 {
-  throw std::runtime_error("TensorBroadcast should not exist in the graph");
+  INTERNAL_EXN("loco graph has loco::TensorBroadcast, which should not exist in the graph");
 }
 
 void OperationExporter::visit(loco::TensorConstantPad *node)
@@ -1095,7 +1097,7 @@ CreateCOpCallOptions(flatbuffers::FlatBufferBuilder &fbb, locoex::COpCall *copCa
         flexbuf.Float(name.c_str(), float_val->val());
       else
         // TODO Support more attribute types
-        throw std::runtime_error("Not supported type while writing flexbuffer");
+        INTERNAL_EXN_V("Unsupported dtype while writing flexbuffer for customop attr", name);
     }
 
     flexbuf.EndMap(map_start);
@@ -1175,7 +1177,7 @@ void exportNode(loco::Node *node, flatbuffers::FlatBufferBuilder &builder,
   }
   else
   {
-    assert(false && "unsupported node found");
+    INTERNAL_EXN("Node with unsupported dialect found");
   }
 }
 
index 3177b7e..ec5e8b2 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "Dialect/IR/TFLNodes.h"
 
-#include "Check.h"
+#include <oops/InternalExn.h>
 
 using namespace circle;
 using namespace flatbuffers;
@@ -193,7 +193,7 @@ flatbuffers::Offset<circle::Buffer> encodeOpBuffer(FlatBufferBuilder &builder, l
     return encodeOpBufferByDType<loco::DataType::S32>(builder, c);
   }
 
-  EXO_THROW("not supported datatype");
+  INTERNAL_EXN_V("Unsupported datatype", oops::to_uint32(c->dtype()));
 }
 
 } // namespace
index 857e20f..a1e92b8 100644 (file)
@@ -29,6 +29,8 @@
 #include <locoex/COpDialect.h>
 #include <locoex/Service/COpTypeInference.h>
 
+#include <oops/InternalExn.h>
+
 #include <stdex/Memory.h>
 
 #include <stdexcept>
@@ -63,7 +65,7 @@ circle::TensorType translateLocoTypeToCircle(loco::DataType dtype)
       break;
   }
 
-  throw std::invalid_argument{"dtype"};
+  INTERNAL_EXN_V("Invalid loco dtype", oops::to_uint32(dtype));
 }
 
 } // namespace
index e576d17..b2e2b4b 100644 (file)
@@ -21,6 +21,8 @@
 
 #include <loco.h>
 
+#include <oops/InternalExn.h>
+
 namespace exo
 {
 
@@ -47,7 +49,7 @@ bool ConstGenConverter::convert(loco::ConstGen *constgen)
       }
     }
     else
-      EXO_THROW("Unsupported DataType");
+      INTERNAL_EXN_V("Unsupported DataType", oops::to_uint32(constgen->dtype()));
   }
 
   loco::replace(constgen).with(tfl_const);
index 56d992f..8fcb168 100644 (file)
@@ -19,6 +19,8 @@
 #include "Dialect/IR/TFLNodes.h"
 #include "Check.h"
 
+#include <oops/InternalExn.h>
+
 #include <loco.h>
 #include <loco/Service/ShapeInference.h>
 
@@ -87,7 +89,7 @@ bool TensorReduceConverter::convert(loco::TensorReduce *origin)
   if (origin->func() == loco::ReduceFunc::Mean)
     return convert_as_mean(origin);
   else
-    throw std::runtime_error("NYI ReduceFunc");
+    INTERNAL_EXN_V("Unsupported ReduceFunc", oops::to_uint32(origin->func()));
 }
 
 } // namespace exo
index 40b5502..25c27fe 100644 (file)
 #include "TensorTransposeConverter.h"
 
 #include "Dialect/IR/TFLNodes.h"
-#include "Check.h"
 
 #include <loco.h>
 #include <loco/Service/ShapeInference.h>
 
+#include <oops/InternalExn.h>
+
 #include <algorithm>
 #include <cassert>
 #include <vector>
@@ -44,7 +45,7 @@ void validate_perm(loco::TensorTranspose *origin)
   }
 
   if (!std::is_permutation(base_perms.begin(), base_perms.end(), perms.begin()))
-    EXO_THROW("wrong perm value");
+    INTERNAL_EXN("wrong perm value");
 }
 
 } // namespace
@@ -66,7 +67,8 @@ bool TensorTransposeConverter::convert(loco::TensorTranspose *origin)
 
       auto input_rank = loco::shape_get(origin->input()).as<loco::TensorShape>().rank();
       if (input_rank != origin->perm()->size())
-        EXO_THROW("perm size should be same with input rank");
+        INTERNAL_EXN_V("perm size should be same with input rank",
+                       oops::to_uint32(origin->perm()->size()));
 
       validate_perm(origin);
     }
index f6100fd..d9f4871 100644 (file)
 #include "CircleNodes.h"
 #include "CircleNodeVisitor.h"
 
+#include <oops/InternalExn.h>
+
+#include <cassert>
+
 namespace locoex
 {
 
@@ -39,8 +43,7 @@ template <typename T> T CircleNode::accept(CircleNodeVisitorBase<T> *v) const
       break;
   }
 
-  // TODO throw as internal error
-  throw std::runtime_error{"CircleNode::accept(CircleNodeVisitorBase) not handled"};
+  INTERNAL_EXN("CircleNode::accept(CircleNodeVisitorBase) not handled");
 }
 
 template <typename T> T CircleNode::accept(CircleNodeMutableVisitorBase<T> *v)
@@ -59,8 +62,7 @@ template <typename T> T CircleNode::accept(CircleNodeMutableVisitorBase<T> *v)
       break;
   }
 
-  // TODO throw as internal error
-  throw std::runtime_error{"CircleNode::accept(CircleNodeMutableVisitorBase) not handled"};
+  INTERNAL_EXN("CircleNode::accept(CircleNodeMutableVisitorBase) not handled");
 }
 
 } // namespace locoex
index 90ba30a..fc70c9e 100644 (file)
@@ -20,6 +20,8 @@
 #include "CircleNode.h"
 #include "CircleNodes.h"
 
+#include <oops/InternalExn.h>
+
 namespace locoex
 {
 
@@ -48,7 +50,7 @@ template <typename T> struct CircleNodeVisitor : public CircleNodeVisitorBase<T>
 #undef CIRCLE_NODE
 
   /// @brief Default fallback
-  virtual T visit(const CircleNode *) { throw std::runtime_error{"CircleNodeVisistor: NYI node"}; }
+  virtual T visit(const CircleNode *) { INTERNAL_EXN("CircleNodeVisistor: NYI node"); }
 };
 
 /**
@@ -76,7 +78,7 @@ template <typename T> struct CircleNodeMutableVisitor : public CircleNodeMutable
 #undef CIRCLE_NODE
 
   /// @brief Default fallback
-  virtual T visit(CircleNode *) { throw std::runtime_error{"CircleMutableNodeVisistor: NYI node"}; }
+  virtual T visit(CircleNode *) { INTERNAL_EXN("CircleMutableNodeVisistor: NYI node"); }
 };
 
 } // namespace locoex
index 2d0b0bd..6338827 100644 (file)
 #include "TFLNodes.h"
 #include "TFLNodeVisitor.h"
 
+#include <oops/InternalExn.h>
+
+#include <cassert>
+
 namespace locoex
 {
 
@@ -39,8 +43,7 @@ template <typename T> T TFLNode::accept(TFLNodeVisitorBase<T> *v) const
       break;
   }
 
-  // TODO throw as internal error
-  throw std::runtime_error{"TFLNode::accept(TFLNodeVisitorBase) not handled"};
+  INTERNAL_EXN("TFLNode::accept(TFLNodeVisitorBase) not handled");
 }
 
 template <typename T> T TFLNode::accept(TFLNodeMutableVisitorBase<T> *v)
@@ -59,8 +62,7 @@ template <typename T> T TFLNode::accept(TFLNodeMutableVisitorBase<T> *v)
       break;
   }
 
-  // TODO throw as internal error
-  throw std::runtime_error{"TFLNode::accept(TFLNodeMutableVisitorBase) not handled"};
+  INTERNAL_EXN("TFLNode::accept(TFLNodeMutableVisitorBase) not handled");
 }
 
 } // namespace locoex
index c8b4115..e1f5959 100644 (file)
@@ -20,6 +20,8 @@
 #include "TFLNode.h"
 #include "TFLNodes.h"
 
+#include <oops/InternalExn.h>
+
 namespace locoex
 {
 
@@ -48,7 +50,7 @@ template <typename T> struct TFLNodeVisitor : public TFLNodeVisitorBase<T>
 #undef TFL_NODE
 
   /// @brief Default fallback
-  virtual T visit(const TFLNode *) { throw std::runtime_error{"TFLNodeVisitor: NYI node"}; }
+  virtual T visit(const TFLNode *) { INTERNAL_EXN("TFLNodeVisitor: NYI node"); }
 };
 
 /**
@@ -76,7 +78,7 @@ template <typename T> struct TFLNodeMutableVisitor : public TFLNodeMutableVisito
 #undef TFL_NODE
 
   /// @brief Default fallback
-  virtual T visit(TFLNode *) { throw std::runtime_error{"TFLNodeMutableVisitor: NYI node"}; }
+  virtual T visit(TFLNode *) { INTERNAL_EXN("TFLNodeMutableVisitor: NYI node"); }
 };
 
 } // namespace locoex
index 091a229..b72ecc9 100644 (file)
@@ -22,6 +22,8 @@
 
 #include "Check.h"
 
+#include <oops/InternalExn.h>
+
 #include <algorithm>
 #include <cassert>
 #include <stdexcept>
@@ -154,7 +156,7 @@ loco::TensorShape expand_dimension(const loco::TensorShape &x, const loco::Tenso
 
     // each dimension of x and y should be same or one must be 1 if different
     if (!((x_dim == y_dim) || (x_dim == 1 || y_dim == 1)))
-      throw std::runtime_error("Cannot produce expand_dimension of two shapes");
+      INTERNAL_EXN("Cannot produce expand_dimension of two shapes");
 
     output_shape.dim(axis) = std::max(x_dim, y_dim);
   }
@@ -387,7 +389,7 @@ public:
       if (axis < 0)
         axis += input_shape.rank();
       if (not(0 <= axis and axis < static_cast<int32_t>(input_shape.rank())))
-        EXO_THROW("Invalid reduction axis for MEAN");
+        INTERNAL_EXN_V("Invalid reduction axis for MEAN", oops::to_uint32(axis));
       reduction_values.push_back(axis);
     }
 
@@ -467,7 +469,7 @@ public:
       EXO_ASSERT(const_shape_node->dtype() == S32, "Only support int32 TFLConst");
 
       if (const_shape_node->rank() != 1)
-        EXO_THROW("Only support rank 1 TFLConst");
+        INTERNAL_EXN_V("Only support rank 1 TFLConst", oops::to_uint32(const_shape_node->rank()));
 
       shape_by_input.rank(const_shape_node->dim(0).value());
 
@@ -569,7 +571,7 @@ public:
       return loco::NodeShape{output_shape_of_transpose(input_shape, tfl_perm)};
     }
     else
-      EXO_THROW("perm of TFLTranspose should be either ConstGen or TFLConst");
+      INTERNAL_EXN("perm of TFLTranspose should be either ConstGen or TFLConst");
   }
 
   loco::NodeShape visit(const locoex::TFLTransposeConv *node) final
index 8178afa..41ccdcd 100644 (file)
@@ -16,7 +16,9 @@
 
 #include "ExporterUtils.h"
 
-#include "Check.h"
+#include <oops/InternalExn.h>
+
+#include <cassert>
 
 namespace exo
 {
@@ -131,7 +133,7 @@ ShapeDescription to_shape_description(const loco::NodeShape &shape)
       break;
   }
 
-  throw std::runtime_error{"Not implemented yet"};
+  INTERNAL_EXN_V("Unsupported loco domain", oops::to_uint32(shape.domain()));
 }
 
 } // namespace exo
index fd94869..b771c82 100644 (file)
 #ifndef __GRAPH_BLOCK_H__
 #define __GRAPH_BLOCK_H__
 
-#include "Check.h"
-
 #include <loco.h>
 #include <loco/Service/ShapeInference.h>
 
+#include <oops/InternalExn.h>
+
 #include <functional>
 
 namespace exo
@@ -191,7 +191,7 @@ TFLT *DomainConverter<CanonicalT, TFLT>::convert(CanonicalT *origin,
     return tfl_node;
   }
   else
-    EXO_THROW("Not yet supported loco::Domain");
+    INTERNAL_EXN_V("Unsupported loco::Domain", oops::to_uint32(loco::shape_get(origin).domain()));
 }
 
 } // namespace exo
index 756a914..0fdcea9 100644 (file)
@@ -23,6 +23,8 @@
 
 #include <loco/Service/ShapeInference.h>
 
+#include <oops/InternalExn.h>
+
 namespace
 {
 
@@ -65,10 +67,10 @@ void fold_reshape_of_const(locoex::TFLReshape *reshape)
     EXO_ASSERT(const_orig, "Only support for Reshape-Const pair");
     // TODO support other data types
     if (const_orig->dtype() != FLOAT32)
-      EXO_THROW("NYI for this data type");
+      INTERNAL_EXN_V("NYI for this data type", oops::to_uint32(const_orig->dtype()));
 
     if (volume(const_orig) != volume(reshape))
-      EXO_THROW("New shape of Reshape is not matched");
+      INTERNAL_EXN("New shape of Reshape is not matched");
   }
 
   auto new_shape = loco::shape_get(reshape).as<loco::TensorShape>();
index 48261d2..005c429 100644 (file)
@@ -25,6 +25,8 @@
 #include <nncc/core/ADT/tensor/IndexEnumerator.h>
 #include <nncc/core/ADT/tensor/LexicalLayout.h>
 
+#include <oops/InternalExn.h>
+
 namespace
 {
 
@@ -75,12 +77,12 @@ void fold_transpose_of_const(locoex::TFLTranspose *transpose)
     EXO_ASSERT(const_orig, "Only support for Transpose-Const pair");
     // TODO support other data types
     if (const_orig->dtype() != FLOAT32)
-      EXO_THROW("NYI for this data type");
+      INTERNAL_EXN_V("NYI for this data type", oops::to_uint32(const_orig->dtype()));
 
     EXO_ASSERT(perm, "Only support for constant permutation for Transpose");
     // TODO support other data types
     if (perm->dtype() != S32)
-      EXO_THROW("NYI for this data type");
+      INTERNAL_EXN_V("NYI for this data type", oops::to_uint32(perm->dtype()));
 
     auto okay = [&]() {
       if (perm->rank() != 1)
@@ -90,7 +92,7 @@ void fold_transpose_of_const(locoex::TFLTranspose *transpose)
       return true;
     };
     if (not okay())
-      EXO_THROW("Input and permutation for Transpose is not congruent");
+      INTERNAL_EXN("Input and permutation for Transpose is not congruent");
   }
 
   uint32_t rank = const_orig->rank();
index eb8ab05..aab8209 100644 (file)
 #include "Dialect/IR/TFLDialect.h"
 #include "Dialect/IR/TFLNodeVisitor.h"
 
-#include "Check.h"
-
 #include <loco/Service/TypeInference.h>
 #include <loco/Service/ShapeInference.h>
 
+#include <oops/InternalExn.h>
+
 #include <set>
 
 /*
@@ -270,9 +270,10 @@ struct Collector final : public locoex::TFLNodeMutableVisitor<void>
     else if (const_shape.rank() == 0 or (const_shape.rank() == 1 and const_shape.dim(0) == 1))
     {
       if (!(loco::dtype_get(as_loco_node(former)) == loco::DataType::FLOAT32))
-        EXO_THROW("unsupported data type");
+        INTERNAL_EXN_V("Unsupported data type",
+                       oops::to_uint32(loco::dtype_get(as_loco_node(former))));
       if (!(const_node->dtype() == loco::DataType::FLOAT32))
-        EXO_THROW("unsupported data type");
+        INTERNAL_EXN_V("Unsupported data type", oops::to_uint32(const_node->dtype()));
 
       auto new_bias_node = create_widened(const_node, depth);
 
index af2716b..8945fcf 100644 (file)
@@ -17,6 +17,8 @@
 #include "MergeConcatNodesPass.h"
 #include "Dialect/IR/TFLNodes.h"
 
+#include <oops/InternalExn.h>
+
 #include <vector>
 
 namespace
@@ -41,7 +43,7 @@ bool canMerge(locoex::TFLConcatenation *node1, locoex::TFLConcatenation *node2)
     //   return false;
 
     default:
-      throw std::runtime_error("Unknown FusedActFunc");
+      INTERNAL_EXN_V("Unknown FusedActFunc", oops::to_uint32(node1->fusedActivationFunction()));
   }
 }
 
index fc8be00..7fee4d6 100644 (file)
@@ -26,6 +26,8 @@
 #include "Log.h"
 #include "Knob.h"
 
+#include <oops/InternalExn.h>
+
 #include <cassert>
 #include <unordered_map>
 #include <string>
@@ -83,7 +85,7 @@ encodeOperatorCodes(FlatBufferBuilder &builder, std::unordered_map<OpCode, uint3
       auto opCode = it.first;
       auto custom_code = custom_opcodes.find(opCode);
       if (custom_code == custom_opcodes.end())
-        throw std::runtime_error("Cannot find code for custom op");
+        INTERNAL_EXN("Cannot find code for custom op");
 
       operator_codes_vec[idx] =
           CreateOperatorCode(builder, it.first.opcode, builder.CreateString(custom_code->second));
index bde7e9f..d35afc9 100644 (file)
@@ -16,7 +16,7 @@
 
 #include "TFLExporterUtils.h"
 
-#include "Check.h"
+#include <oops/InternalExn.h>
 
 namespace exo
 {
@@ -32,7 +32,7 @@ tflite::ActivationFunctionType to_tflite_actfunc(locoex::FusedActFunc func)
     case locoex::FusedActFunc::RELU6:
       return tflite::ActivationFunctionType_RELU6;
     default:
-      throw std::runtime_error("Not supported locoex FusedActFunc Type");
+      INTERNAL_EXN_V("Unsupported locoex FusedActFunc Type", oops::to_uint32(func));
   }
 }
 
@@ -89,7 +89,7 @@ tflite::Padding getOpPadding(const loco::Padding2D *pad, const loco::Stride<2> *
   if (same_padding_criterion_1 && same_padding_criterion_2)
     return tflite::Padding_SAME;
 
-  throw std::runtime_error("NYI for custom PAD");
+  INTERNAL_EXN("NYI for custom PAD");
 }
 
 tflite::Padding getOpPadding(const locoex::Padding pad)
@@ -99,7 +99,7 @@ tflite::Padding getOpPadding(const locoex::Padding pad)
   if (pad == locoex::Padding::SAME)
     return tflite::Padding_SAME;
 
-  EXO_THROW("Unknown padding");
+  INTERNAL_EXN_V("Unknown padding", oops::to_uint32(pad));
 }
 
 void registerGraphIOName(loco::Graph *graph, SerializedModelData &gd)
index 95d0d74..58bea87 100644 (file)
@@ -29,6 +29,8 @@
 #include <loco/Service/ShapeInference.h>
 #include <locoex/COpCall.h>
 
+#include <oops/InternalExn.h>
+
 #include <flatbuffers/flexbuffers.h>
 
 using namespace flatbuffers;
@@ -636,7 +638,7 @@ void OperationExporter::visit(loco::TensorReduce *node)
 
     // TODO Support more reduce type operation
     default:
-      throw std::runtime_error("Not supported reduce type");
+      INTERNAL_EXN_V("Not supported reduce type", oops::to_uint32(node->func()));
   }
 
   // Create a vector for axes data
@@ -1003,7 +1005,7 @@ void OperationExporter::visit(loco::FixedReshape *node)
 
 void OperationExporter::visit(loco::TensorBroadcast *)
 {
-  throw std::runtime_error("TensorBroadcast should not exist in the graph");
+  INTERNAL_EXN("TensorBroadcast should not exist in the graph");
 }
 
 void OperationExporter::visit(loco::TensorConstantPad *node)
@@ -1071,7 +1073,7 @@ CreateCOpCallOptions(flatbuffers::FlatBufferBuilder &fbb, locoex::COpCall *copCa
         flexbuf.Float(name.c_str(), float_val->val());
       else
         // TODO Support more attribute types
-        throw std::runtime_error("Not supported type while writing flexbuffer");
+        INTERNAL_EXN("Not supported type while writing flexbuffer");
     }
 
     flexbuf.EndMap(map_start);
index 8a351c4..66854ef 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "Dialect/IR/TFLNodes.h"
 
-#include "Check.h"
+#include <oops/InternalExn.h>
 
 using namespace tflite;
 using namespace flatbuffers;
@@ -193,7 +193,7 @@ flatbuffers::Offset<tflite::Buffer> encodeOpBuffer(FlatBufferBuilder &builder, l
     return encodeOpBufferByDType<loco::DataType::S32>(builder, c);
   }
 
-  EXO_THROW("not supported datatype");
+  INTERNAL_EXN_V("Unsupported datatype", oops::to_uint32(c->dtype()));
 }
 
 } // namespace
index 2e03bd8..8d6bb8d 100644 (file)
@@ -29,6 +29,8 @@
 #include <locoex/COpDialect.h>
 #include <locoex/Service/COpTypeInference.h>
 
+#include <oops/InternalExn.h>
+
 #include <stdex/Memory.h>
 
 #include <stdexcept>
@@ -63,7 +65,7 @@ tflite::TensorType translateLocoTypeToTFLite(loco::DataType dtype)
       break;
   }
 
-  throw std::invalid_argument{"dtype"};
+  INTERNAL_EXN_V("Trying to converte unsupported loco dtype", oops::to_uint32(dtype));
 }
 
 } // namespace