aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominic Symes <dominic.symes@arm.com>2022-11-30 14:25:20 +0000
committerEric Kunze <eric.kunze@arm.com>2022-12-05 19:19:06 +0000
commit4370b93cf307fa099973341c481e7c2d50eee572 (patch)
treebe16c19347251c1b104a4a902469ab73afa354d4
parente4d6a1b99337f33cfaf343005e355ef7a68b2be9 (diff)
downloadspecification-4370b93cf307fa099973341c481e7c2d50eee572.tar.gz
Clarify the type of condition tensors
Condition tensors used by the control flow operations must contain a single element. Change-Id: Ie3cb8f0b4a4149cee1b3aacbfa720dd4cad02fbc Signed-off-by: Dominic Symes <dominic.symes@arm.com>
-rw-r--r--chapters/control_flow.adoc15
-rw-r--r--tosa.xml4
2 files changed, 12 insertions, 7 deletions
diff --git a/chapters/control_flow.adoc b/chapters/control_flow.adoc
index 49fab74..e43ef51 100644
--- a/chapters/control_flow.adoc
+++ b/chapters/control_flow.adoc
@@ -23,8 +23,9 @@ 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);
-if (condition) {
+if (condition[0]) {
tosa_execute_graph(then_graph, input_list, output_list);
} else {
tosa_execute_graph(else_graph, input_list, output_list);
@@ -43,17 +44,21 @@ 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));
ERROR_IF(tensor_list_shape(input_list) != tosa_output_shape(body_graph));
-ERROR_IF(tosa_output_shape(cond_graph) != tosa_list_shape([bool_t]));
+// Condition graph output must be a single element tensor with a single bool value
+ERROR_IF(tensor_size(tosa_output_shape(cond_graph)) != 1);
+ERROR_IF(tosa_output_type(cond_graph) != bool_t);
// The iteration number 'i' is included to give unique names to variables
// in each iteration of the loop and is not required by implementations
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_execute_graph(cond_graph, list[i], [condition[i]]); // initial condition
-while (condition[i]) {
+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_execute_graph(cond_graph, list[i], [ condition[i] ]);
}
output_list = list[i];
----
diff --git a/tosa.xml b/tosa.xml
index 5a04023..fcd3597 100644
--- a/tosa.xml
+++ b/tosa.xml
@@ -2244,8 +2244,8 @@ used.</description>
<argument category="input" name="input_list" type="tensor_list_t" shape="-">
<description>List of input tensors</description>
</argument>
- <argument category="input" name="condition" type="bool_t" shape="-">
- <description>Input condition as rank-0 tensor</description>
+ <argument category="input" name="condition" type="bool_t*" shape="shape">
+ <description>Input condition as a size 1 tensor</description>
</argument>
<argument category="attribute" name="then_graph" type="tosa_graph_t" shape="-">
<description>TOSA graph to execute if condition is true</description>