mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 18:46:40 +00:00

This cc1 option -fallow-half-arguments-and-returns allows __fp16 to be passed by argument and returned, without giving an error. It is currently always enabled for Arm and AArch64, by forcing the option in the driver. This means any cc1 tests (especially those needing arm_neon.h) need to specify the option too, to prevent the error from being emitted. This changes it to a target option instead, set to true for Arm and AArch64. This allows the option to be removed. Previously it was implied by -fnative_half_arguments_and_returns, which is set for certain languages like open_cl, renderscript and hlsl, so that option now too controls the errors. There were are few other non-arm uses of -fallow-half-arguments-and-returns but I believe they were unnecessary. The strictfp_builtins.c tests were converted from __fp16 to _Float16 to avoid the issues. Differential Revision: https://reviews.llvm.org/D133885
39 lines
1.5 KiB
C++
39 lines
1.5 KiB
C++
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -ffreestanding -fsyntax-only -verify -std=c++11 -mvscale-min=4 -mvscale-max=4 -Wconversion %s
|
|
// expected-no-diagnostics
|
|
|
|
#include <stdint.h>
|
|
|
|
#define N __ARM_FEATURE_SVE_BITS
|
|
|
|
typedef __SVInt8_t svint8_t;
|
|
typedef svint8_t fixed_int8_t __attribute__((arm_sve_vector_bits(N)));
|
|
typedef int8_t gnu_int8_t __attribute__((vector_size(N / 8)));
|
|
|
|
typedef __SVBool_t svbool_t;
|
|
typedef svbool_t fixed_bool_t __attribute__((arm_sve_vector_bits(N)));
|
|
typedef int8_t gnu_bool_t __attribute__((vector_size(N / 64)));
|
|
|
|
template<typename T> struct S { T var; };
|
|
|
|
S<fixed_int8_t> s;
|
|
|
|
// Test implicit casts between VLA and VLS vectors
|
|
svint8_t to_svint8_t(fixed_int8_t x) { return x; }
|
|
fixed_int8_t from_svint8_t(svint8_t x) { return x; }
|
|
|
|
// Test implicit casts between GNU and VLA vectors
|
|
svint8_t to_svint8_t__from_gnu_int8_t(gnu_int8_t x) { return x; }
|
|
gnu_int8_t from_svint8_t__to_gnu_int8_t(svint8_t x) { return x; }
|
|
|
|
// Test implicit casts between GNU and VLS vectors
|
|
fixed_int8_t to_fixed_int8_t__from_gnu_int8_t(gnu_int8_t x) { return x; }
|
|
gnu_int8_t from_fixed_int8_t__to_gnu_int8_t(fixed_int8_t x) { return x; }
|
|
|
|
// Test implicit casts between VLA and VLS predicates
|
|
svbool_t to_svbool_t(fixed_bool_t x) { return x; }
|
|
fixed_bool_t from_svbool_t(svbool_t x) { return x; }
|
|
|
|
// Test implicit casts between GNU and VLA predicates
|
|
svbool_t to_svbool_t__from_gnu_bool_t(gnu_bool_t x) { return x; }
|
|
gnu_bool_t from_svbool_t__to_gnu_bool_t(svbool_t x) { return x; }
|