aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--verif/generator/tosa_arg_gen.py13
-rw-r--r--verif/generator/tosa_error_if.py5
-rw-r--r--verif/generator/tosa_test_gen.py31
3 files changed, 36 insertions, 13 deletions
diff --git a/verif/generator/tosa_arg_gen.py b/verif/generator/tosa_arg_gen.py
index 0db9717..7825445 100644
--- a/verif/generator/tosa_arg_gen.py
+++ b/verif/generator/tosa_arg_gen.py
@@ -1059,6 +1059,19 @@ class TosaTensorValuesGen:
)
@staticmethod
+ def tvgSlice(testGen, op, dtypeList, shapeList, argsDict, error_name=None):
+ dtypeList[1] = DType.SHAPE
+ shapeList[1] = [len(argsDict["start"])]
+ dtypeList[2] = DType.SHAPE
+ shapeList[2] = [len(argsDict["size"])]
+ # Create a new list for the pre-generated data in argsDict["fixed_data"]
+ argsDict["fixed_data"] = [None, argsDict["start"], argsDict["size"]]
+
+ return TosaTensorValuesGen.tvgLazyGenDefault(
+ testGen, op, dtypeList, shapeList, argsDict, error_name
+ )
+
+ @staticmethod
def tvgTile(testGen, op, dtypeList, shapeList, argsDict, error_name=None):
dtypeList[1] = DType.SHAPE
shapeList[1] = [len(argsDict["multiples"])]
diff --git a/verif/generator/tosa_error_if.py b/verif/generator/tosa_error_if.py
index a5a834f..90c3428 100644
--- a/verif/generator/tosa_error_if.py
+++ b/verif/generator/tosa_error_if.py
@@ -305,6 +305,11 @@ class TosaErrorIfArgGen:
return newStart, newSize
elif error_name == ErrorIf.InputSizeStartLengthMismatch:
remove = testGen.rng.choice([True, False])
+
+ # Get an empty tensor when diminishing dimension on 1-d tensor.
+ if len(start) == 1 or len(size) == 1:
+ remove = False
+
if remove:
newStart = start[1:]
newSize = size[1:]
diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py
index 081aff6..9cb0ce2 100644
--- a/verif/generator/tosa_test_gen.py
+++ b/verif/generator/tosa_test_gen.py
@@ -1705,17 +1705,17 @@ class TosaTestGen:
def build_slice(
self, op, inputs, args_dict, validator_fcns=None, error_name=None, qinfo=None
):
- assert len(inputs) == 1
- a = inputs[0]
- start = args_dict["start"]
- size = args_dict["size"]
+ assert len(inputs) == 3
+ a, start_var, size_var = inputs
+ start_const = args_dict["start"]
+ size_const = args_dict["size"]
result_tensor = OutputShaper.sliceOp(
- self.ser, self.rng, a, start, size, error_name
+ self.ser, self.rng, a, start_const, size_const, error_name
)
# Invalidate Input/Output list for error if checks.
- input_list = [a.name]
+ input_list = [a.name, start_var.name, size_var.name]
output_list = [result_tensor.name]
pCount, cCount = op["operands"]
num_operands = pCount + cCount
@@ -1732,8 +1732,8 @@ class TosaTestGen:
output_shape=result_tensor.shape,
input_dtype=a.dtype,
output_dtype=result_tensor.dtype,
- start=start,
- size=size,
+ start=start_const,
+ size=size_const,
result_tensors=[result_tensor],
input_list=input_list,
output_list=output_list,
@@ -1742,8 +1742,9 @@ class TosaTestGen:
):
return None
+ # TODO remove the slice attribute once shape dynamism support is mature.
attr = ts.TosaSerializerAttribute()
- attr.SliceAttribute(start, size)
+ attr.SliceAttribute(start_const, size_const)
self.ser.addOperator(op["op"], input_list, output_list, attr)
@@ -4358,18 +4359,22 @@ class TosaTestGen:
},
"slice": {
"op": Op.SLICE,
- "operands": (1, 0),
+ "operands": (3, 0),
"rank": (1, 6),
"build_fcn": (
build_slice,
TosaTensorGen.tgBasic,
- TosaTensorValuesGen.tvgLazyGenDefault,
+ TosaTensorValuesGen.tvgSlice,
TosaArgGen.agSlice,
),
"types": TYPE_FIB,
"error_if_validators": (
- TosaErrorValidator.evStartSmallerZero,
- TosaErrorValidator.evSizeSmallerEqualZero,
+ # TODO Turn off these error categories for now as the reference
+ # model cannot allocate memory space for empty tensor. We probably
+ # can report an accurate error messege at the right place during
+ # exeuction.
+ # TosaErrorValidator.evStartSmallerZero,
+ # TosaErrorValidator.evSizeSmallerEqualZero,
TosaErrorValidator.evStartSizeOutsideBounds,
TosaErrorValidator.evSizeOutputShapeMismatch,
TosaErrorValidator.evInputSizeStartLengthMismatch,