Fix REDUCE ops to support 8k MAX_RANK

Signed-off-by: Jeremy Johnson <jeremy.johnson@arm.com>
Change-Id: I365da379f599e5eca1841e6d299b4005a7b0f082
diff --git a/reference_model/src/ops/reduction.cc b/reference_model/src/ops/reduction.cc
index 2eb764a..c9b85af 100644
--- a/reference_model/src/ops/reduction.cc
+++ b/reference_model/src/ops/reduction.cc
@@ -1,5 +1,5 @@
 
-// Copyright (c) 2020-2023, ARM Limited.
+// Copyright (c) 2020-2024, ARM Limited.
 //
 //    Licensed under the Apache License, Version 2.0 (the "License");
 //    you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@
     : GraphNode(sgt_, op_, id_)
 {
     setRequiredOperands(1, 1);
-    setRequiredRank(1, 4);
+    setRequiredRank(1);
 
     INIT_ATTRIBUTE(Axis);
 }
@@ -40,6 +40,10 @@
 template <int Rank, TOSA_REF_TYPE Dtype>
 int ReduceNode<Rank, Dtype>::checkTensorAttributes()
 {
+    // Check Tosa Level
+    auto tosa_level = g_func_config.tosa_level;
+    LEVEL_CHECK(Rank <= tosa_level.MAX_RANK, "Rank should be smaller than or equal to MAX_RANK");
+
     if (validateRequiredOperands())
         return 1;
 
diff --git a/verif/conformance/tosa_base_profile_ops_info.json b/verif/conformance/tosa_base_profile_ops_info.json
index 54bce21..01f78d6 100644
--- a/verif/conformance/tosa_base_profile_ops_info.json
+++ b/verif/conformance/tosa_base_profile_ops_info.json
@@ -2879,7 +2879,15 @@
                         "--target-dtype",
                         "bool",
                         "--tensor-dim-range",
-                        "1,32"
+                        "1,32",
+                        "--target-rank",
+                        "1",
+                        "--target-rank",
+                        "2",
+                        "--target-rank",
+                        "3",
+                        "--target-rank",
+                        "4"
                     ],
                     [
                         "--target-dtype",
@@ -2890,6 +2898,22 @@
                         "2,65538,1,1"
                     ]
                 ]
+            },
+            "8k_level": {
+                "from_version": "v0.80.0",
+                "no_negative_tests": "true",
+                "generator_args": [
+                    [
+                        "--target-dtype",
+                        "bool",
+                        "--tensor-dim-range",
+                        "1,10",
+                        "--target-rank",
+                        "5",
+                        "--target-rank",
+                        "6"
+                    ]
+                ]
             }
         },
         "selection": {
@@ -2916,7 +2940,15 @@
                         "--target-dtype",
                         "bool",
                         "--tensor-dim-range",
-                        "1,32"
+                        "1,32",
+                        "--target-rank",
+                        "1",
+                        "--target-rank",
+                        "2",
+                        "--target-rank",
+                        "3",
+                        "--target-rank",
+                        "4"
                     ],
                     [
                         "--target-dtype",
@@ -2927,6 +2959,22 @@
                         "2,65538,1,1"
                     ]
                 ]
+            },
+            "8k_level": {
+                "from_version": "v0.80.0",
+                "no_negative_tests": "true",
+                "generator_args": [
+                    [
+                        "--target-dtype",
+                        "bool",
+                        "--tensor-dim-range",
+                        "1,9",
+                        "--target-rank",
+                        "5",
+                        "--target-rank",
+                        "6"
+                    ]
+                ]
             }
         },
         "selection": {
@@ -2957,7 +3005,15 @@
                         "--target-dtype",
                         "int32",
                         "--tensor-dim-range",
-                        "1,32"
+                        "1,32",
+                        "--target-rank",
+                        "1",
+                        "--target-rank",
+                        "2",
+                        "--target-rank",
+                        "3",
+                        "--target-rank",
+                        "4"
                     ],
                     [
                         "--target-dtype",
@@ -2968,6 +3024,26 @@
                         "2,65538,1,1"
                     ]
                 ]
+            },
+            "8k_level": {
+                "from_version": "v0.80.0",
+                "no_negative_tests": "true",
+                "generator_args": [
+                    [
+                        "--target-dtype",
+                        "int8",
+                        "--target-dtype",
+                        "int16",
+                        "--target-dtype",
+                        "int32",
+                        "--tensor-dim-range",
+                        "1,11",
+                        "--target-rank",
+                        "5",
+                        "--target-rank",
+                        "6"
+                    ]
+                ]
             }
         },
         "selection": {
@@ -2998,7 +3074,15 @@
                         "--target-dtype",
                         "int32",
                         "--tensor-dim-range",
-                        "1,24"
+                        "1,24",
+                        "--target-rank",
+                        "1",
+                        "--target-rank",
+                        "2",
+                        "--target-rank",
+                        "3",
+                        "--target-rank",
+                        "4"
                     ],
                     [
                         "--target-dtype",
@@ -3009,6 +3093,26 @@
                         "2,65535,1,1"
                     ]
                 ]
+            },
+            "8k_level": {
+                "from_version": "v0.80.0",
+                "no_negative_tests": "true",
+                "generator_args": [
+                    [
+                        "--target-dtype",
+                        "int8",
+                        "--target-dtype",
+                        "int16",
+                        "--target-dtype",
+                        "int32",
+                        "--tensor-dim-range",
+                        "2,10",
+                        "--target-rank",
+                        "5",
+                        "--target-rank",
+                        "6"
+                    ]
+                ]
             }
         },
         "selection": {
@@ -3035,7 +3139,15 @@
                         "--target-dtype",
                         "int32",
                         "--tensor-dim-range",
-                        "1,32"
+                        "1,32",
+                        "--target-rank",
+                        "1",
+                        "--target-rank",
+                        "2",
+                        "--target-rank",
+                        "3",
+                        "--target-rank",
+                        "4"
                     ],
                     [
                         "--target-dtype",
@@ -3046,6 +3158,22 @@
                         "65536,1,1,2"
                     ]
                 ]
+            },
+            "8k_level": {
+                "from_version": "v0.80.0",
+                "no_negative_tests": "true",
+                "generator_args": [
+                    [
+                        "--target-dtype",
+                        "int32",
+                        "--tensor-dim-range",
+                        "1,12",
+                        "--target-rank",
+                        "5",
+                        "--target-rank",
+                        "6"
+                    ]
+                ]
             }
         },
         "selection": {
diff --git a/verif/conformance/tosa_main_profile_ops_info.json b/verif/conformance/tosa_main_profile_ops_info.json
index dc28bef..7792417 100644
--- a/verif/conformance/tosa_main_profile_ops_info.json
+++ b/verif/conformance/tosa_main_profile_ops_info.json
@@ -2450,7 +2450,15 @@
                         "--fp-values-range",
                         "-max,max",
                         "--tensor-dim-range",
-                        "1,32"
+                        "1,32",
+                        "--target-rank",
+                        "1",
+                        "--target-rank",
+                        "2",
+                        "--target-rank",
+                        "3",
+                        "--target-rank",
+                        "4"
                     ],
                     [
                         "--target-dtype",
@@ -2463,6 +2471,28 @@
                         "1,1,65539,2"
                     ]
                 ]
+            },
+            "8k_level": {
+                "from_version": "v0.80.0",
+                "no_negative_tests": "true",
+                "generator_args": [
+                    [
+                        "--target-dtype",
+                        "fp32",
+                        "--target-dtype",
+                        "fp16",
+                        "--target-dtype",
+                        "bf16",
+                        "--fp-values-range",
+                        "-max,max",
+                        "--tensor-dim-range",
+                        "1,10",
+                        "--target-rank",
+                        "5",
+                        "--target-rank",
+                        "6"
+                    ]
+                ]
             }
         },
         "selection": {
@@ -2496,7 +2526,15 @@
                         "--fp-values-range",
                         "-max,max",
                         "--tensor-dim-range",
-                        "1,32"
+                        "1,32",
+                        "--target-rank",
+                        "1",
+                        "--target-rank",
+                        "2",
+                        "--target-rank",
+                        "3",
+                        "--target-rank",
+                        "4"
                     ],
                     [
                         "--target-dtype",
@@ -2509,6 +2547,28 @@
                         "1,65539,2,1"
                     ]
                 ]
+            },
+            "8k_level": {
+                "from_version": "v0.80.0",
+                "no_negative_tests": "true",
+                "generator_args": [
+                    [
+                        "--target-dtype",
+                        "fp32",
+                        "--target-dtype",
+                        "fp16",
+                        "--target-dtype",
+                        "bf16",
+                        "--fp-values-range",
+                        "-max,max",
+                        "--tensor-dim-range",
+                        "1,9",
+                        "--target-rank",
+                        "5",
+                        "--target-rank",
+                        "6"
+                    ]
+                ]
             }
         },
         "selection": {
@@ -2541,7 +2601,15 @@
                         "--fp-values-range",
                         "-max,max",
                         "--tensor-dim-range",
-                        "1,34"
+                        "1,34",
+                        "--target-rank",
+                        "1",
+                        "--target-rank",
+                        "2",
+                        "--target-rank",
+                        "3",
+                        "--target-rank",
+                        "4"
                     ],
                     [
                         "--target-dtype",
@@ -2554,6 +2622,28 @@
                         "1,3,2,65541"
                     ]
                 ]
+            },
+            "8k_level": {
+                "from_version": "v0.80.0",
+                "no_negative_tests": "true",
+                "generator_args": [
+                    [
+                        "--target-dtype",
+                        "fp32",
+                        "--target-dtype",
+                        "fp16",
+                        "--target-dtype",
+                        "bf16",
+                        "--fp-values-range",
+                        "-max,max",
+                        "--tensor-dim-range",
+                        "1,11",
+                        "--target-rank",
+                        "5",
+                        "--target-rank",
+                        "6"
+                    ]
+                ]
             }
         },
         "selection": {
@@ -2590,7 +2680,15 @@
                         "--target-rank",
                         "4",
                         "--tensor-dim-range",
-                        "10,37"
+                        "10,37",
+                        "--target-rank",
+                        "1",
+                        "--target-rank",
+                        "2",
+                        "--target-rank",
+                        "3",
+                        "--target-rank",
+                        "4"
                     ],
                     [
                         "--target-dtype",
@@ -2627,6 +2725,28 @@
                         "1,65537,1,1"
                     ]
                 ]
+            },
+            "8k_level": {
+                "from_version": "v0.80.0",
+                "no_negative_tests": "true",
+                "generator_args": [
+                    [
+                        "--target-dtype",
+                        "fp32",
+                        "--target-dtype",
+                        "fp16",
+                        "--target-dtype",
+                        "bf16",
+                        "--fp-values-range",
+                        "-max,max",
+                        "--tensor-dim-range",
+                        "5,12",
+                        "--target-rank",
+                        "5",
+                        "--target-rank",
+                        "6"
+                    ]
+                ]
             }
         },
         "selection": {
diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py
index ae689b4..f5eca18 100644
--- a/verif/generator/tosa_test_gen.py
+++ b/verif/generator/tosa_test_gen.py
@@ -4201,7 +4201,6 @@
         "reduce_all": {
             "op": Op.REDUCE_ALL,
             "operands": (1, 0),
-            "rank": (1, 4),
             "build_fcn": (
                 build_reduce,
                 TosaTensorGen.tgBasic,
@@ -4223,7 +4222,6 @@
         "reduce_any": {
             "op": Op.REDUCE_ANY,
             "operands": (1, 0),
-            "rank": (1, 4),
             "build_fcn": (
                 build_reduce,
                 TosaTensorGen.tgBasic,
@@ -4245,7 +4243,6 @@
         "reduce_max": {
             "op": Op.REDUCE_MAX,
             "operands": (1, 0),
-            "rank": (1, 4),
             "build_fcn": (
                 build_reduce,
                 TosaTensorGen.tgBasic,
@@ -4270,7 +4267,6 @@
         "reduce_min": {
             "op": Op.REDUCE_MIN,
             "operands": (1, 0),
-            "rank": (1, 4),
             "build_fcn": (
                 build_reduce,
                 TosaTensorGen.tgBasic,
@@ -4295,7 +4291,6 @@
         "reduce_product": {
             "op": Op.REDUCE_PRODUCT,
             "operands": (1, 0),
-            "rank": (1, 4),
             "build_fcn": (
                 build_reduce,
                 TosaTensorGen.tgBasic,
@@ -4320,7 +4315,6 @@
         "reduce_sum": {
             "op": Op.REDUCE_SUM,
             "operands": (1, 0),
-            "rank": (1, 4),
             "build_fcn": (
                 build_reduce,
                 TosaTensorGen.tgBasic,