diff options
author | Dominic Symes <dominic.symes@arm.com> | 2023-07-20 14:26:38 +0100 |
---|---|---|
committer | Dominic Symes <dominic.symes@arm.com> | 2023-07-24 15:08:48 +0000 |
commit | 7b0f1c9a090fb7e4c39afad5bdb09a2036b389a6 (patch) | |
tree | 9cd98838013c022bc009c2864147480702feea61 /chapters/control_flow.adoc | |
parent | 67f6b26eab3da732cc05f26be3b5ef3b6fdbcf64 (diff) | |
download | specification-7b0f1c9a090fb7e4c39afad5bdb09a2036b389a6.tar.gz |
COND_IF/WHILE_LOOP: Add nesting level limit
Nesting of if/while is bounded by MAX_NESTING,
set accoring to the TOSA level.
Change-Id: If9435a143ffa6bd7ba2e46a68542459b3d723b76
Signed-off-by: Dominic Symes <dominic.symes@arm.com>
Diffstat (limited to 'chapters/control_flow.adoc')
-rw-r--r-- | chapters/control_flow.adoc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/chapters/control_flow.adoc b/chapters/control_flow.adoc index e43ef51..9de9c72 100644 --- a/chapters/control_flow.adoc +++ b/chapters/control_flow.adoc @@ -19,17 +19,20 @@ include::{generated}/operators/COND_IF.adoc[] [source,c++] ---- +ERROR_IF(tosa_nesting_depth >= MAX_NESTING); ERROR_IF(tensor_list_shape(input_list) != tosa_input_shape(then_graph)); ERROR_IF(tensor_list_shape(input_list) != tosa_input_shape(else_graph)); ERROR_IF(tensor_list_shape(output_list) != tosa_output_shape(then_graph)); ERROR_IF(tensor_list_shape(output_list) != tosa_output_shape(else_graph)); ERROR_IF(tensor_size(shape) != 1); +tosa_nesting_depth++; if (condition[0]) { tosa_execute_graph(then_graph, input_list, output_list); } else { tosa_execute_graph(else_graph, input_list, output_list); } +tosa_nesting_depth--; ---- ==== WHILE_LOOP @@ -40,6 +43,7 @@ include::{generated}/operators/WHILE_LOOP.adoc[] [source,c++] ---- +ERROR_IF(tosa_nesting_depth >= MAX_NESTING); ERROR_IF(tensor_list_shape(input_list) != tosa_list_shape(output_list)); ERROR_IF(tensor_list_shape(input_list) != tosa_input_shape(cond_graph)); ERROR_IF(tensor_list_shape(input_list) != tosa_input_shape(body_graph)); @@ -54,11 +58,13 @@ int32_t i=0; // iteration number tensor_list_t list[]; // array of tensor lists indexed by iteration bool_t *condition[]; // array of condition tensors indexed by iteration list[i] = input_list; // copy input data as list[0] +tosa_nesting_depth++; tosa_execute_graph(cond_graph, list[i], [ condition[i] ]); // initial condition while (condition[i][0]) { tosa_execute_graph(body_graph, list[i], list[i+1]); i = i+1; tosa_execute_graph(cond_graph, list[i], [ condition[i] ]); } +tosa_nesting_depth--; output_list = list[i]; ---- |