Hi Dennis,

On 2/25/20 11:54 AM, Dennis Zhang wrote:
Hi all,

On 07/01/2020 12:12, Dennis Zhang wrote:
> Hi all,
>
> This patch is part of a series adding support for Armv8.6-A features.
> It depends on the patch enabling Arm BFmode
> https://gcc.gnu.org/ml/gcc-patches/2019-12/msg01448.html
>
> This patch adds intrinsics for brain half-precision float-point dot
> product.
> ACLE documents are at https://developer.arm.com/docs/101028/latest
> ISA documents are at https://developer.arm.com/docs/ddi0596/latest
>
> Regression tested for arm-none-linux-gnueabi-armv8-a.
>
> Is it OK for trunk please?
>
> Thanks,
> Dennis
>
> gcc/ChangeLog:
>
> 2020-01-03  Dennis Zhang  <dennis.zh...@arm.com>
>
>      * config/arm/arm_neon.h (vbfdot_f32, vbfdotq_f32): New
>      (vbfdot_lane_f32, vbfdotq_laneq_f32): New.
>      (vbfdot_laneq_f32, vbfdotq_lane_f32): New.
>      * config/arm/arm_neon_builtins.def (vbfdot): New.
>      (vbfdot_lanev4bf, vbfdot_lanev8bf): New.
>      * config/arm/iterators.md (VSF2BF): New mode attribute.
>      * config/arm/neon.md (neon_vbfdot<VCVTF:mode>): New.
>      (neon_vbfdot_lanev4bf<VCVTF:mode>): New.
>      (neon_vbfdot_lanev8bf<VCVTF:mode>): New.
>
> gcc/testsuite/ChangeLog:
>
> 2020-01-03  Dennis Zhang  <dennis.zh...@arm.com>
>
>      * gcc.target/arm/simd/bf16_dot_1.c: New test.
>      * gcc.target/arm/simd/bf16_dot_2.c: New test.
>

This patch updates tests in bf16_dot_1.c to make proper assembly check.
Is it OK for trunk, please?

Cheers
Dennis

Looks ok but...


new file mode 100644
index 00000000000..c533f9d0b2f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/bf16_dot_2.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
+/* { dg-add-options arm_v8_2a_bf16_neon } */
+
+#include "arm_neon.h"
+
+float32x2_t
+test_vbfdot_lane_f32 (float32x2_t r, bfloat16x4_t a, bfloat16x4_t b)
+{
+  return __builtin_neon_vbfdot_lanev4bfv2sf (r, a, b, 2); /* { dg-error {out 
of range 0 - 1} } */
+}
+
+float32x4_t
+test_vbfdotq_lane_f32 (float32x4_t r, bfloat16x8_t a, bfloat16x4_t b)
+{
+  return __builtin_neon_vbfdot_lanev4bfv4sf (r, a, b, 2); /* { dg-error {out 
of range 0 - 1} } */
+}
+
+float32x2_t
+test_vbfdot_laneq_f32 (float32x2_t r, bfloat16x4_t a, bfloat16x8_t b)
+{
+  return __builtin_neon_vbfdot_lanev8bfv2sf (r, a, b, 4); /* { dg-error {out 
of range 0 - 3} } */
+}
+
+float32x4_t
+test_vbfdotq_laneq_f32 (float32x4_t r, bfloat16x8_t a, bfloat16x8_t b)
+{
+  return __builtin_neon_vbfdot_lanev8bfv4sf (r, a, b, 4); /* { dg-error {out 
of range 0 - 3} } */
+}

These  tests shouldn't be calling the __builtin* directly, they are just an 
implementation detail.
What we want to test is the intrinsic itself.
Thanks,
Kyrill

Reply via email to