From 0b192e84510c006d87cee3c29f95511ad088b704 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Thu, 20 Feb 2020 17:09:28 +0000 Subject: COMPMID-3067: Address gcc9 failures Signed-off-by: Georgios Pinitas Change-Id: I048d1d7dda7edf587d37ce83a93b557d8a95754a Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/2771 Tested-by: Arm Jenkins Reviewed-by: Michele Di Giorgio Comments-Addressed: Arm Jenkins --- arm_compute/core/CL/OpenCL.h | 6 +-- arm_compute/graph/backends/FunctionHelpers.h | 73 +++++++++++++++------------ arm_compute/runtime/FunctionDescriptors.h | 7 +-- arm_compute/runtime/MemoryGroup.h | 12 ++--- src/core/CL/OpenCL.cpp | 10 +++- src/graph/backends/CL/CLDeviceBackend.cpp | 5 +- src/graph/backends/CL/CLFunctionsFactory.cpp | 4 +- src/graph/backends/GLES/GCDeviceBackend.cpp | 5 +- src/graph/backends/NEON/NEDeviceBackend.cpp | 5 +- src/graph/backends/NEON/NEFunctionFactory.cpp | 2 +- src/runtime/CL/functions/CLFFT2D.cpp | 10 ++-- src/runtime/NEON/functions/NEFFT2D.cpp | 10 ++-- tests/validation/reference/Convolution.cpp | 4 +- 13 files changed, 83 insertions(+), 70 deletions(-) diff --git a/arm_compute/core/CL/OpenCL.h b/arm_compute/core/CL/OpenCL.h index 7be65c894a..b87cc67b72 100644 --- a/arm_compute/core/CL/OpenCL.h +++ b/arm_compute/core/CL/OpenCL.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019 ARM Limited. + * Copyright (c) 2016-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -62,7 +62,7 @@ class CLSymbols final { public: /** Default Constructor */ - CLSymbols() = default; + CLSymbols() noexcept(false); /** Load OpenCL symbols from handle * * @param[in] handle Handle to load symbols from @@ -141,7 +141,7 @@ public: #undef DECLARE_FUNCTION_PTR private: - std::pair _loaded{ false, false }; + std::pair _loaded; }; } // namespace arm_compute #endif /* ARM_COMPUTE_OPENCL_H */ diff --git a/arm_compute/graph/backends/FunctionHelpers.h b/arm_compute/graph/backends/FunctionHelpers.h index 20c69bfffa..44b24b58bf 100644 --- a/arm_compute/graph/backends/FunctionHelpers.h +++ b/arm_compute/graph/backends/FunctionHelpers.h @@ -47,6 +47,13 @@ namespace backends { namespace detail { +// Address rule DR-9R5 (1579. Return by converting move constructor) +#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5)) +#define RETURN_UNIQUE_PTR(x) (x) +#else /* defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5)) */ +#define RETURN_UNIQUE_PTR(x) (std::move(x)) +#endif /* defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5)) */ + /** Returns backing tensor of a given tensor * * @tparam TargetInfo Target information @@ -121,7 +128,7 @@ std::unique_ptr create_activation_layer(ActivationLayerNode &node) << " InPlace : " << is_in_place_operation(input, output) << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend batch normalization layer function @@ -165,7 +172,7 @@ std::unique_ptr create_batch_normalization_layer(BatchNormalizationLa << " InPlace: " << is_in_place_operation(input, output) << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend batch normalization layer function @@ -222,7 +229,7 @@ std::unique_ptr create_fused_convolution_batch_normalization_layer(Fu << " Output shape: " << output->info()->tensor_shape() << (fused_act.enabled() ? " " + to_string(fused_act.activation()) : "") << std::endl); - return func; + return RETURN_UNIQUE_PTR(func); } /** Create a backend fused depthwise convolution batch normalization layer function @@ -278,7 +285,7 @@ std::unique_ptr create_fused_depthwise_convolution_batch_normalizatio << " Output shape: " << output->info()->tensor_shape() << (fused_act.enabled() ? " " + to_string(fused_act.activation()) : "") << std::endl); - return func; + return RETURN_UNIQUE_PTR(func); } /** Create a backend bounding box transform layer function @@ -316,7 +323,7 @@ std::unique_ptr create_bounding_box_transform_layer(BoundingBoxTransf << " BoundingBox Info img H: " << bbox_info.img_height() << " " << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend channel shuffle layer function @@ -351,7 +358,7 @@ std::unique_ptr create_channel_shuffle_layer(ChannelShuffleLayerNode << " Num groups: " << num_groups << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend layer concatenate function @@ -407,7 +414,7 @@ std::unique_ptr create_concatenate_layer(ConcatenateLaye << qss.str() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend convolution layer function @@ -498,7 +505,7 @@ std::unique_ptr create_convolution_layer(ConvolutionLayerNode &node, << qss.str() << (fused_act.enabled() ? " " + to_string(fused_act.activation()) : "") << std::endl); - return func; + return RETURN_UNIQUE_PTR(func); } /** Create a backend deconvolution layer function @@ -604,7 +611,7 @@ std::unique_ptr create_depthwise_convolution_layer(DepthwiseConvoluti << qss.str() << (fused_act.enabled() ? " " + to_string(fused_act.activation()) : "") << std::endl); - return func; + return RETURN_UNIQUE_PTR(func); } /** Create a backend dequantize layer function @@ -643,7 +650,7 @@ std::unique_ptr create_dequantization_layer(DequantizationLayerNode & << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend detection output layer function * @@ -688,7 +695,7 @@ std::unique_ptr create_detection_output_layer(DetectionOutputLayerNod << " DetectionOutputLayer info: " << detect_info << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend detection post process layer function @@ -743,7 +750,7 @@ std::unique_ptr create_detection_post_process_layer(DetectionPostProc << " DetectionPostProcessLayer info: " << detect_info << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend element-wise operation layer function @@ -805,7 +812,7 @@ std::unique_ptr create_eltwise_layer(EltwiseLayerNode &node) << " Shape: " << input1->info()->tensor_shape() << std::endl); - return func; + return RETURN_UNIQUE_PTR(func); } /** Create a backend flatten layer function @@ -843,7 +850,7 @@ std::unique_ptr create_flatten_layer(FlattenLayerNode &node) << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend fully connected layer function @@ -899,7 +906,7 @@ std::unique_ptr create_fully_connected_layer(FullyConnectedLayerNode << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend generate proposals layer function @@ -948,7 +955,7 @@ std::unique_ptr create_generate_proposals_layer(GenerateProposalsLaye << " Scores Out shape: " << scores_out->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend normalization layer function @@ -990,7 +997,7 @@ std::unique_ptr create_normalization_layer(NormalizationLayerNode &no << " Normalization info: " << norm_info.type() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend normalize planar YUV layer function @@ -1030,7 +1037,7 @@ std::unique_ptr create_normalize_planar_yuv_layer(NormalizePlanarYUVL << " Shape: " << input->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend pad layer function @@ -1069,7 +1076,7 @@ std::unique_ptr create_pad_layer(PadLayerNode &node) << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend permute layer function @@ -1108,7 +1115,7 @@ std::unique_ptr create_permute_layer(PermuteLayerNode &node) << " Permutation vector: " << perm << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend pooling layer function @@ -1147,7 +1154,7 @@ std::unique_ptr create_pooling_layer(PoolingLayerNode &node) << " Pooling info: " << pool_info.pool_type << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend PRelu layer function @@ -1185,7 +1192,7 @@ std::unique_ptr create_prelu_layer(PReluLayerNode &node) << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend print layer function @@ -1256,7 +1263,7 @@ std::unique_ptr create_priorbox_layer(PriorBoxLayerNode &node) << " PriorBoxLayer info: " << prior_info << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend quantization layer function @@ -1293,7 +1300,7 @@ std::unique_ptr create_quantization_layer(QuantizationLayerNode &node << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend reorg layer function @@ -1330,7 +1337,7 @@ std::unique_ptr create_reorg_layer(ReorgLayerNode &node) << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend reshape layer function @@ -1367,7 +1374,7 @@ std::unique_ptr create_reshape_layer(ReshapeLayerNode &node) << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend resize layer function @@ -1406,7 +1413,7 @@ std::unique_ptr create_resize_layer(ResizeLayerNode &node) << " Interpolation: " << policy << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend ROI align layer function @@ -1451,7 +1458,7 @@ std::unique_ptr create_roi_align_layer(ROIAlignLayerNode &node) << " ROIPooling height: " << pool_info.pooled_height() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend slice layer function @@ -1488,7 +1495,7 @@ std::unique_ptr create_slice_layer(SliceLayerNode &node) << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend softmax layer function @@ -1527,7 +1534,7 @@ std::unique_ptr create_softmax_layer(SoftmaxLayerNode &node, GraphCon << " Output shape: " << output->info()->tensor_shape() << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend layer stack function @@ -1570,7 +1577,7 @@ std::unique_ptr create_stack_layer(StackLayerNode &node) << " Axis: " << axis << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend Upsample layer function * @@ -1614,7 +1621,7 @@ std::unique_ptr create_upsample_layer(UpsampleLayerNode &node, GraphC << " Upsampling policy: " << upsampling_policy << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } /** Create a backend YOLO layer function * @@ -1657,7 +1664,7 @@ std::unique_ptr create_yolo_layer(YOLOLayerNode &node, GraphContext & << " Num classes: " << num_classes << std::endl); - return std::move(func); + return RETURN_UNIQUE_PTR(func); } } // namespace detail } // namespace backends diff --git a/arm_compute/runtime/FunctionDescriptors.h b/arm_compute/runtime/FunctionDescriptors.h index d523c56907..3706d0859f 100644 --- a/arm_compute/runtime/FunctionDescriptors.h +++ b/arm_compute/runtime/FunctionDescriptors.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 ARM Limited. + * Copyright (c) 2019-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -44,8 +44,9 @@ struct FFT1DInfo /** Descriptor used by the FFT2D function */ struct FFT2DInfo { - std::pair axes{ 0, 1 }; /**< Axes to run on. If same, multiple transforms are performed on single axis*/ - FFTDirection direction{ FFTDirection::Forward }; /**< Direction of the FFT. */ + unsigned int axis0{ 0 }; /**< Axis to run first pass on. If same, multiple transforms are performed on single axis*/ + unsigned int axis1{ 1 }; /**< Axis to run second pass on. If same, multiple transforms are performed on single axis*/ + FFTDirection direction{ FFTDirection::Forward }; /**< Direction of the FFT. */ }; } // namespace arm_compute #endif /* ARM_COMPUTE_RUNTIME_FUNCTION_DESCRIPTORS_H */ diff --git a/arm_compute/runtime/MemoryGroup.h b/arm_compute/runtime/MemoryGroup.h index ba1dbc0a28..4d484954a1 100644 --- a/arm_compute/runtime/MemoryGroup.h +++ b/arm_compute/runtime/MemoryGroup.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 ARM Limited. + * Copyright (c) 2017-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -44,9 +44,7 @@ class MemoryGroup final : public IMemoryGroup { public: /** Default Constructor */ - MemoryGroup(IMemoryManager *memory_manager); - /** Default Constructor */ - MemoryGroup(std::shared_ptr = nullptr); + MemoryGroup(std::shared_ptr = nullptr) noexcept; /** Default destructor */ ~MemoryGroup() = default; /** Prevent instances of this class from being copied (As this class contains pointers) */ @@ -71,8 +69,10 @@ private: MemoryMappings _mappings; /**< Memory mappings of the group */ }; -inline MemoryGroup::MemoryGroup(std::shared_ptr memory_manager) - : _memory_manager(memory_manager), _pool(nullptr), _mappings() +inline MemoryGroup::MemoryGroup(std::shared_ptr memory_manager) noexcept + : _memory_manager(memory_manager), + _pool(nullptr), + _mappings() { } diff --git a/src/core/CL/OpenCL.cpp b/src/core/CL/OpenCL.cpp index 74c5b041d7..9a3e344f1f 100644 --- a/src/core/CL/OpenCL.cpp +++ b/src/core/CL/OpenCL.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 ARM Limited. + * Copyright (c) 2017-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -34,6 +34,14 @@ namespace arm_compute { +CLSymbols::CLSymbols() noexcept(false) + : _loaded( +{ + false, false +}) +{ +} + CLSymbols &CLSymbols::get() { static CLSymbols symbols; diff --git a/src/graph/backends/CL/CLDeviceBackend.cpp b/src/graph/backends/CL/CLDeviceBackend.cpp index de318476ab..0159592af6 100644 --- a/src/graph/backends/CL/CLDeviceBackend.cpp +++ b/src/graph/backends/CL/CLDeviceBackend.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019 ARM Limited. + * Copyright (c) 2018-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -169,9 +169,8 @@ std::unique_ptr CLDeviceBackend::create_tensor(const Tensor &tens // Create backend tensor handle TensorInfo info(tensor_desc.shape, 1, tensor_desc.data_type, tensor_desc.quant_info); info.set_data_layout(tensor_desc.layout); - auto backend_tensor_handle = support::cpp14::make_unique(info); - return std::move(backend_tensor_handle); + return support::cpp14::make_unique(info); } std::unique_ptr CLDeviceBackend::create_subtensor(ITensorHandle *parent, TensorShape shape, Coordinates coords, bool extend_parent) diff --git a/src/graph/backends/CL/CLFunctionsFactory.cpp b/src/graph/backends/CL/CLFunctionsFactory.cpp index e6684f676d..312e09a49a 100644 --- a/src/graph/backends/CL/CLFunctionsFactory.cpp +++ b/src/graph/backends/CL/CLFunctionsFactory.cpp @@ -158,7 +158,7 @@ std::unique_ptr create_detection_output_layerregister_tensor(input2); wrap_function->register_tensor(output); - return std::move(wrap_function); + return RETURN_UNIQUE_PTR(wrap_function); } template <> std::unique_ptr create_detection_post_process_layer(DetectionPostProcessLayerNode &node) @@ -214,7 +214,7 @@ std::unique_ptr create_detection_post_process_layerregister_tensor(output2); wrap_function->register_tensor(output3); - return std::move(wrap_function); + return RETURN_UNIQUE_PTR(wrap_function); } } // namespace detail diff --git a/src/graph/backends/GLES/GCDeviceBackend.cpp b/src/graph/backends/GLES/GCDeviceBackend.cpp index 83e2436ddb..bb674ce8af 100644 --- a/src/graph/backends/GLES/GCDeviceBackend.cpp +++ b/src/graph/backends/GLES/GCDeviceBackend.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019 ARM Limited. + * Copyright (c) 2018-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -111,9 +111,8 @@ std::unique_ptr GCDeviceBackend::create_tensor(const Tensor &tens // Create backend tensor handle TensorInfo info(tensor_desc.shape, 1, tensor_desc.data_type, tensor_desc.quant_info); info.set_data_layout(tensor_desc.layout); - auto backend_tensor_handle = support::cpp14::make_unique(info); - return std::move(backend_tensor_handle); + return support::cpp14::make_unique(info); } std::unique_ptr GCDeviceBackend::create_subtensor(ITensorHandle *parent, TensorShape shape, Coordinates coords, bool extend_parent) diff --git a/src/graph/backends/NEON/NEDeviceBackend.cpp b/src/graph/backends/NEON/NEDeviceBackend.cpp index 017b4f0f24..b568b7988b 100644 --- a/src/graph/backends/NEON/NEDeviceBackend.cpp +++ b/src/graph/backends/NEON/NEDeviceBackend.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019 ARM Limited. + * Copyright (c) 2018-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -122,9 +122,8 @@ std::unique_ptr NEDeviceBackend::create_tensor(const Tensor &tens // Create backend tensor handle TensorInfo info(tensor_desc.shape, 1, tensor_desc.data_type, tensor_desc.quant_info); info.set_data_layout(tensor_desc.layout); - auto backend_tensor_handle = support::cpp14::make_unique(info); - return std::move(backend_tensor_handle); + return support::cpp14::make_unique(info); } std::unique_ptr NEDeviceBackend::create_subtensor(ITensorHandle *parent, TensorShape shape, Coordinates coords, bool extend_parent) diff --git a/src/graph/backends/NEON/NEFunctionFactory.cpp b/src/graph/backends/NEON/NEFunctionFactory.cpp index ddb4ccf391..0aea15d941 100644 --- a/src/graph/backends/NEON/NEFunctionFactory.cpp +++ b/src/graph/backends/NEON/NEFunctionFactory.cpp @@ -179,7 +179,7 @@ std::unique_ptr create_normalization_layerallocate(); @@ -63,13 +63,13 @@ Status CLFFT2D::validate(const ITensorInfo *input, const ITensorInfo *output, co // Validate first pass FFT1DInfo first_pass_config; - first_pass_config.axis = config.axes.first; + first_pass_config.axis = config.axis0; first_pass_config.direction = config.direction; ARM_COMPUTE_RETURN_ON_ERROR(CLFFT1D::validate(input, &first_pass_tensor, first_pass_config)); // Validate second pass FFT1DInfo second_pass_config; - second_pass_config.axis = config.axes.second; + second_pass_config.axis = config.axis1; second_pass_config.direction = config.direction; ARM_COMPUTE_RETURN_ON_ERROR(CLFFT1D::validate(&first_pass_tensor, output, second_pass_config)); diff --git a/src/runtime/NEON/functions/NEFFT2D.cpp b/src/runtime/NEON/functions/NEFFT2D.cpp index 9210ecfa2e..2fea017781 100644 --- a/src/runtime/NEON/functions/NEFFT2D.cpp +++ b/src/runtime/NEON/functions/NEFFT2D.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 ARM Limited. + * Copyright (c) 2019-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -41,14 +41,14 @@ void NEFFT2D::configure(const ITensor *input, ITensor *output, const FFT2DInfo & // Setup first pass FFT1DInfo first_pass_config; - first_pass_config.axis = config.axes.first; + first_pass_config.axis = config.axis0; first_pass_config.direction = config.direction; _memory_group.manage(&_first_pass_tensor); _first_pass_func.configure(input, &_first_pass_tensor, first_pass_config); // Setup second pass FFT1DInfo second_pass_config; - second_pass_config.axis = config.axes.second; + second_pass_config.axis = config.axis1; second_pass_config.direction = config.direction; _second_pass_func.configure(&_first_pass_tensor, output, second_pass_config); _first_pass_tensor.allocator()->allocate(); @@ -63,13 +63,13 @@ Status NEFFT2D::validate(const ITensorInfo *input, const ITensorInfo *output, co // Validate first pass FFT1DInfo first_pass_config; - first_pass_config.axis = config.axes.first; + first_pass_config.axis = config.axis0; first_pass_config.direction = config.direction; ARM_COMPUTE_RETURN_ON_ERROR(NEFFT1D::validate(input, &first_pass_tensor, first_pass_config)); // Validate second pass FFT1DInfo second_pass_config; - second_pass_config.axis = config.axes.second; + second_pass_config.axis = config.axis1; second_pass_config.direction = config.direction; ARM_COMPUTE_RETURN_ON_ERROR(NEFFT1D::validate(&first_pass_tensor, output, second_pass_config)); diff --git a/tests/validation/reference/Convolution.cpp b/tests/validation/reference/Convolution.cpp index 1083d50e0d..5e0f29d421 100644 --- a/tests/validation/reference/Convolution.cpp +++ b/tests/validation/reference/Convolution.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 ARM Limited. + * Copyright (c) 2017-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -40,7 +40,7 @@ SimpleTensor convolution(const SimpleTensor &src, DataType output_da const unsigned int height) { ARM_COMPUTE_ERROR_ON(scale == 0); - ARM_COMPUTE_ERROR_ON(scale >= std::numeric_limits::max()); + ARM_COMPUTE_ERROR_ON(scale >= static_cast(std::numeric_limits::max())); SimpleTensor dst(src.shape(), output_data_type); SimpleTensor sum(src.shape(), output_data_type); -- cgit v1.2.1