30 const auto &inputs = args.op.inputs;
31 const auto *options = args.op.builtin_options.AsWhileOptions();
33 if (inputs.size() != args.op.outputs.size())
36 auto num_graphs =
static_cast<int32_t
>(args.reader.num_subgraph());
37 if (options->cond_subgraph_index >=
num_graphs)
39 if (options->body_subgraph_index >=
num_graphs)
64 assert(context !=
nullptr);
66 auto graph = context->
graph();
68 const std::vector<int32_t> &inputs = op.inputs;
69 const std::vector<int32_t> &outputs = op.outputs;
73 std::vector<CircleNode *> input_nodes;
81 uint32_t input_count = inputs.size();
82 uint32_t output_count = outputs.size();
92 const auto *options = op.builtin_options.AsWhileOptions();
96 assert(outputs.size() > 0);
99 const auto output_tensor = tensors[outputs[0]];
100 assert(output_tensor !=
nullptr);
102 assert(opcodes[op.opcode_index] !=
nullptr);
103 node->
op_version(opcodes[op.opcode_index]->version());
111 const auto output_tensor = tensors[outputs[
n]];
112 assert(output_tensor !=
nullptr);
CircleOperatorCodes opcodes() const
CircleTensors tensors() const
CircleNode * build(const circle::OperatorT &op, GraphBuilderContext *context) const final
While Node builder.
bool validate(const ValidateArgs &args) const final
Node * input(uint32_t index) const
int32_t cond_branch(void) const
int32_t body_branch(void) const
Virtual CIRCLEWHILEOUT in Circle.
loco::Node * input(void) const
Class to store context to build loco graph IR from TensorFlow.
IndexNodeFinder * nodefinder()
void enroll(TensorIndex idx, CircleNode *node)
CircleNode * node(TensorIndex idx) const
const char * tensor_name(const circle::Tensor *tensor)
void copy_tensor_attributes(const circle::Tensor *tensor, CircleNode *node)
Copy common tensor attributes such as name, type, etc. to node.
T must_cast(loco::Node *node)
CircleInput * input_node(loco::Graph *g, const loco::GraphInputIndex &index)
Find a Pull node with a given input index.
int32_t op_version(void) const
NodeName name(void) const