[PATCH] D49376: [NEON] Define half-precision vrnd intrinsics only when available
kosarev created this revision. kosarev added reviewers: SjoerdMeijer, jgreenhalgh, rengolin. kosarev added a project: clang. Herald added a reviewer: javed.absar. https://reviews.llvm.org/D49376 Files: include/clang/Basic/arm_neon.td test/Sema/arm-no-fp16.c Index: test/Sema/arm-no-fp16.c === --- test/Sema/arm-no-fp16.c +++ test/Sema/arm-no-fp16.c @@ -9,3 +9,59 @@ float32x4_t test_vcvt_f32_f16(float16x4_t a) { return vcvt_f32_f16(a); // expected-warning{{implicit declaration of function 'vcvt_f32_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float32x4_t'}} } + +float16x4_t test_vrnda_f16(float16x4_t a) { + return vrnda_f16(a); // expected-warning{{implicit declaration of function 'vrnda_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndaq_f16(float16x8_t a) { + return vrndaq_f16(a); // expected-warning{{implicit declaration of function 'vrndaq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrnd_f16(float16x4_t a) { + return vrnd_f16(a); // expected-warning{{implicit declaration of function 'vrnd_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndq_f16(float16x8_t a) { + return vrndq_f16(a); // expected-warning{{implicit declaration of function 'vrndq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndi_f16(float16x4_t a) { + return vrndi_f16(a); // expected-warning{{implicit declaration of function 'vrndi_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndiq_f16(float16x8_t a) { + return vrndiq_f16(a); // expected-warning{{implicit declaration of function 'vrndiq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndm_f16(float16x4_t a) { + return vrndm_f16(a); // expected-warning{{implicit declaration of function 'vrndm_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndmq_f16(float16x8_t a) { + return vrndmq_f16(a); // expected-warning{{implicit declaration of function 'vrndmq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndn_f16(float16x4_t a) { + return vrndn_f16(a); // expected-warning{{implicit declaration of function 'vrndn_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndnq_f16(float16x8_t a) { + return vrndnq_f16(a); // expected-warning{{implicit declaration of function 'vrndnq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndp_f16(float16x4_t a) { + return vrndp_f16(a); // expected-warning{{implicit declaration of function 'vrndp_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndpq_f16(float16x8_t a) { + return vrndpq_f16(a); // expected-warning{{implicit declaration of function 'vrndpq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndx_f16(float16x4_t a) { + return vrndx_f16(a); // expected-warning{{implicit declaration of function 'vrndx_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndxq_f16(float16x8_t a) { + return vrndxq_f16(a); // expected-warning{{implicit declaration of function 'vrndxq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} Index: include/clang/Basic/arm_neon.td === --- include/clang/Basic/arm_neon.td +++ include/clang/Basic/arm_neon.td @@ -1416,12 +1416,14 @@ def VCVTP_U16: SInst<"vcvtp_u16", "ud", "hQh">; // Vector rounding - def FRINTZH : SInst<"vrnd", "dd", "hQh">; - def FRINTNH : SInst<"vrndn", "dd", "hQh">; - def FRINTAH : SInst<"vrnda", "dd", "hQh">; - def FRINTPH : SInst<"vrndp", "dd", "hQh">; - def FRINTMH : SInst<"vrndm", "dd", "hQh">; - def FRINTXH : SInst<"vrndx", "dd", "hQh">; + let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_DIRECTED_ROUNDING) && defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)" in { +def FRINTZH : SInst<"vrnd", "dd", "hQh">; +def FRINTNH : SInst<"vrndn", "dd", "hQh">; +def FRINTAH : SInst<"vrnda", "dd", "hQh">; +def FRINTPH : SInst<"vrndp", "dd", "hQh">; +def FRINTMH : SInst<"vr
[PATCH] D49376: [NEON] Define half-precision vrnd intrinsics only when available
kosarev added a comment. Ping. https://reviews.llvm.org/D49376 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D49376: [NEON] Define half-precision vrnd intrinsics only when available
SjoerdMeijer accepted this revision. SjoerdMeijer added a comment. This revision is now accepted and ready to land. LGTM Comment at: include/clang/Basic/arm_neon.td:1419 // Vector rounding - def FRINTZH : SInst<"vrnd", "dd", "hQh">; - def FRINTNH : SInst<"vrndn", "dd", "hQh">; - def FRINTAH : SInst<"vrnda", "dd", "hQh">; - def FRINTPH : SInst<"vrndp", "dd", "hQh">; - def FRINTMH : SInst<"vrndm", "dd", "hQh">; - def FRINTXH : SInst<"vrndx", "dd", "hQh">; + let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_DIRECTED_ROUNDING) && defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)" in { +def FRINTZH : SInst<"vrnd", "dd", "hQh">; nit: is the indentation a bit off here? https://reviews.llvm.org/D49376 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D49376: [NEON] Define half-precision vrnd intrinsics only when available
kosarev added inline comments. Comment at: include/clang/Basic/arm_neon.td:1419 // Vector rounding - def FRINTZH : SInst<"vrnd", "dd", "hQh">; - def FRINTNH : SInst<"vrndn", "dd", "hQh">; - def FRINTAH : SInst<"vrnda", "dd", "hQh">; - def FRINTPH : SInst<"vrndp", "dd", "hQh">; - def FRINTMH : SInst<"vrndm", "dd", "hQh">; - def FRINTXH : SInst<"vrndx", "dd", "hQh">; + let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_DIRECTED_ROUNDING) && defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)" in { +def FRINTZH : SInst<"vrnd", "dd", "hQh">; SjoerdMeijer wrote: > nit: is the indentation a bit off here? It's a nested `let ArchGuard`, so I guess we do want the indentation here? https://reviews.llvm.org/D49376 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D49376: [NEON] Define half-precision vrnd intrinsics only when available
SjoerdMeijer added inline comments. Comment at: include/clang/Basic/arm_neon.td:1419 // Vector rounding - def FRINTZH : SInst<"vrnd", "dd", "hQh">; - def FRINTNH : SInst<"vrndn", "dd", "hQh">; - def FRINTAH : SInst<"vrnda", "dd", "hQh">; - def FRINTPH : SInst<"vrndp", "dd", "hQh">; - def FRINTMH : SInst<"vrndm", "dd", "hQh">; - def FRINTXH : SInst<"vrndx", "dd", "hQh">; + let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_DIRECTED_ROUNDING) && defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)" in { +def FRINTZH : SInst<"vrnd", "dd", "hQh">; kosarev wrote: > SjoerdMeijer wrote: > > nit: is the indentation a bit off here? > It's a nested `let ArchGuard`, so I guess we do want the indentation here? Yep, got confused, please ignore. https://reviews.llvm.org/D49376 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D49376: [NEON] Define half-precision vrnd intrinsics only when available
This revision was automatically updated to reflect the committed changes. Closed by commit rC337699: [NEON] Define half-precision vrnd intrinsics only when available (authored by kosarev, committed by ). Repository: rC Clang https://reviews.llvm.org/D49376 Files: include/clang/Basic/arm_neon.td test/Sema/arm-no-fp16.c Index: include/clang/Basic/arm_neon.td === --- include/clang/Basic/arm_neon.td +++ include/clang/Basic/arm_neon.td @@ -1417,12 +1417,14 @@ def VCVTP_U16: SInst<"vcvtp_u16", "ud", "hQh">; // Vector rounding - def FRINTZH : SInst<"vrnd", "dd", "hQh">; - def FRINTNH : SInst<"vrndn", "dd", "hQh">; - def FRINTAH : SInst<"vrnda", "dd", "hQh">; - def FRINTPH : SInst<"vrndp", "dd", "hQh">; - def FRINTMH : SInst<"vrndm", "dd", "hQh">; - def FRINTXH : SInst<"vrndx", "dd", "hQh">; + let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_DIRECTED_ROUNDING) && defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)" in { +def FRINTZH : SInst<"vrnd", "dd", "hQh">; +def FRINTNH : SInst<"vrndn", "dd", "hQh">; +def FRINTAH : SInst<"vrnda", "dd", "hQh">; +def FRINTPH : SInst<"vrndp", "dd", "hQh">; +def FRINTMH : SInst<"vrndm", "dd", "hQh">; +def FRINTXH : SInst<"vrndx", "dd", "hQh">; + } // Misc. def VABSH: SInst<"vabs", "dd", "hQh">; Index: test/Sema/arm-no-fp16.c === --- test/Sema/arm-no-fp16.c +++ test/Sema/arm-no-fp16.c @@ -9,3 +9,59 @@ float32x4_t test_vcvt_f32_f16(float16x4_t a) { return vcvt_f32_f16(a); // expected-warning{{implicit declaration of function 'vcvt_f32_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float32x4_t'}} } + +float16x4_t test_vrnda_f16(float16x4_t a) { + return vrnda_f16(a); // expected-warning{{implicit declaration of function 'vrnda_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndaq_f16(float16x8_t a) { + return vrndaq_f16(a); // expected-warning{{implicit declaration of function 'vrndaq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrnd_f16(float16x4_t a) { + return vrnd_f16(a); // expected-warning{{implicit declaration of function 'vrnd_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndq_f16(float16x8_t a) { + return vrndq_f16(a); // expected-warning{{implicit declaration of function 'vrndq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndi_f16(float16x4_t a) { + return vrndi_f16(a); // expected-warning{{implicit declaration of function 'vrndi_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndiq_f16(float16x8_t a) { + return vrndiq_f16(a); // expected-warning{{implicit declaration of function 'vrndiq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndm_f16(float16x4_t a) { + return vrndm_f16(a); // expected-warning{{implicit declaration of function 'vrndm_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndmq_f16(float16x8_t a) { + return vrndmq_f16(a); // expected-warning{{implicit declaration of function 'vrndmq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndn_f16(float16x4_t a) { + return vrndn_f16(a); // expected-warning{{implicit declaration of function 'vrndn_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndnq_f16(float16x8_t a) { + return vrndnq_f16(a); // expected-warning{{implicit declaration of function 'vrndnq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndp_f16(float16x4_t a) { + return vrndp_f16(a); // expected-warning{{implicit declaration of function 'vrndp_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndpq_f16(float16x8_t a) { + return vrndpq_f16(a); // expected-warning{{implicit declaration of function 'vrndpq_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x8_t'}} +} + +float16x4_t test_vrndx_f16(float16x4_t a) { + return vrndx_f16(a); // expected-warning{{implicit declaration of function 'vrndx_f16'}} expected-error{{returning 'int' from a function with incompatible result type 'float16x4_t'}} +} + +float16x8_t test_vrndxq_f16(fl