MCPcopy Create free account
hub / github.com/ARM-software/ComputeLibrary / validate_arguments

Function validate_arguments

src/gpu/cl/kernels/ClMulKernel.cpp:51–127  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49namespace
50{
51Status validate_arguments(const ITensorInfo *src1,
52 const ITensorInfo *src2,
53 const ITensorInfo *dst,
54 float scale,
55 ConvertPolicy overflow_policy,
56 RoundingPolicy rounding_policy,
57 const ActivationLayerInfo &act_info)
58{
59 ARM_COMPUTE_UNUSED(overflow_policy);
60 ARM_COMPUTE_UNUSED(rounding_policy);
61
62 ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(src1, src2, dst);
63 ARM_COMPUTE_RETURN_ERROR_ON_SIZE_UNSUPPORTED(src1, src2);
64 ARM_COMPUTE_RETURN_ERROR_ON_F16_UNSUPPORTED(src1);
65 ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(src1, 1, DataType::U8, DataType::QASYMM8,
66 DataType::QASYMM8_SIGNED, DataType::S16, DataType::QSYMM16,
67 DataType::F16, DataType::S32, DataType::F32);
68 ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(src2, 1, DataType::U8, DataType::QASYMM8,
69 DataType::QASYMM8_SIGNED, DataType::S16, DataType::QSYMM16,
70 DataType::F16, DataType::S32, DataType::F32);
71 ARM_COMPUTE_RETURN_ERROR_ON_MSG(scale < 0, "Scale cannot be negative.");
72 ARM_COMPUTE_RETURN_ERROR_ON(act_info.enabled() && !is_data_type_float(dst->data_type()));
73
74 // Check whether it is in_place calculation
75 const bool in_place = (src1 == dst) || (src2 == dst);
76 const bool src1_in_place = in_place && (src1 == dst);
77
78 const TensorShape &out_shape = TensorShape::broadcast_shape(src1->tensor_shape(), src2->tensor_shape());
79
80 ARM_COMPUTE_RETURN_ERROR_ON_MSG(out_shape.total_size() == 0, "Inputs are not broadcast compatible");
81
82 // Validate in case of configured dst
83 if (dst->total_size() > 0)
84 {
85 ARM_COMPUTE_RETURN_ERROR_ON_SIZE_UNSUPPORTED(dst);
86 ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(dst, 1, DataType::U8, DataType::QASYMM8,
87 DataType::QASYMM8_SIGNED, DataType::S16, DataType::QSYMM16,
88 DataType::F16, DataType::S32, DataType::F32);
89 ARM_COMPUTE_RETURN_ERROR_ON_MSG(dst->data_type() == DataType::U8 &&
90 (src1->data_type() != DataType::U8 || src2->data_type() != DataType::U8),
91 "Dst can only be U8 if both src are U8");
92 ARM_COMPUTE_RETURN_ERROR_ON_MSG(
93 dst->data_type() == DataType::QASYMM8 &&
94 (src1->data_type() != DataType::QASYMM8 || src2->data_type() != DataType::QASYMM8),
95 "Dst can only be QASYMM8 if both src are QASYMM8");
96 ARM_COMPUTE_RETURN_ERROR_ON_MSG(
97 dst->data_type() == DataType::QASYMM8_SIGNED &&
98 (src1->data_type() != DataType::QASYMM8_SIGNED || src2->data_type() != DataType::QASYMM8_SIGNED),
99 "Dst can only be QASYMM8_SIGNED if both src are QASYMM8_SIGNED");
100 ARM_COMPUTE_RETURN_ERROR_ON_MSG(
101 dst->data_type() == DataType::QSYMM16 &&
102 (src1->data_type() != DataType::QSYMM16 || src2->data_type() != DataType::QSYMM16),
103 "Dst can only be QSYMM16 if both src are QSYMM16");
104 ARM_COMPUTE_RETURN_ERROR_ON_MSG((src1->data_type() == DataType::S32 || src2->data_type() == DataType::S32) &&
105 (dst->data_type() != DataType::S32),
106 "Dst must be S32 if source tensors are S32");
107 if (in_place)
108 {

Callers 2

configureMethod · 0.70
validateMethod · 0.70

Calls 6

is_data_type_floatFunction · 0.85
enabledMethod · 0.80
data_typeMethod · 0.45
total_sizeMethod · 0.45
num_channelsMethod · 0.45

Tested by

no test coverage detected