* [PATCH v1] RISC-V: Allow RVV intrinsic for more function target
@ 2024-03-27 3:16 pan2.li
2024-03-28 6:43 ` Kito Cheng
2024-04-02 14:26 ` [PATCH v2] " pan2.li
0 siblings, 2 replies; 13+ messages in thread
From: pan2.li @ 2024-03-27 3:16 UTC (permalink / raw)
To: gcc-patches; +Cc: juzhe.zhong, kito.cheng, yanzhang.wang, Pan Li
From: Pan Li <pan2.li@intel.com>
In previous, we allowed the target(("arch=+v")) for a function with
rv64gc build. This patch would like to support more arch options as
below:
* zve32x
* zve32f
* zve64x
* zve64f
* zve64d
* zvfhmin
* zvfh
For example, we have sample code as below.
vfloat32m1_t
__attribute__((target("arch=+zve64f")))
test_9 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
{
return __riscv_vfadd_vv_f32m1 (a, b, vl);
}
It will generate the asm code when build with -O3 -march=rv64gc
test_9:
vsetvli zero,a0,e32,m1,ta,ma
vfadd.vv v8,v8,v9
ret
Meanwhile, this patch introduces more error handling for the target
attribute. Take arch=+zve32x with vfloat32m1_t will have error message
"'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension".
And take arch=+zve32f with vfloat16m1_t will have error message
"'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension".
Below test are passed for this patch:
* The riscv fully regression test.
gcc/ChangeLog:
* config/riscv/riscv-c.cc (riscv_pragma_intrinsic): Add INT and
FP vector element flags, invoke override option and mode adjust.
* config/riscv/riscv-protos.h (riscv_option_override): New extern
func decl.
* config/riscv/riscv-vector-builtins.cc (expand_builtin): Return
target rtx after error_at.
* config/riscv/riscv.cc (riscv_vector_int_type_p): New predicate
func to tell one tree type is integer or not.
(riscv_vector_float_type_p): New predicate func to tell one tree
type is float or not.
(riscv_vector_element_bitsize): New func to get the element bitsize
of a vector tree type.
(riscv_validate_vector_type): New func to validate the tree type
is valid on flags.
(riscv_return_value_is_vector_type_p): Leverage the func
riscv_validate_vector_type to do the tree type validation.
(riscv_arguments_is_vector_type_p): Diito.
(riscv_override_options_internal): Ditto.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c: New test.
Signed-off-by: Pan Li <pan2.li@intel.com>
---
gcc/config/riscv/riscv-c.cc | 30 +++++-
gcc/config/riscv/riscv-protos.h | 1 +
gcc/config/riscv/riscv-vector-builtins.cc | 7 +-
gcc/config/riscv/riscv.cc | 101 ++++++++++++++++--
.../target_attribute_v_with_intrinsic-10.c | 12 +++
.../target_attribute_v_with_intrinsic-11.c | 26 +++++
.../target_attribute_v_with_intrinsic-12.c | 33 ++++++
.../target_attribute_v_with_intrinsic-13.c | 33 ++++++
.../target_attribute_v_with_intrinsic-14.c | 40 +++++++
.../target_attribute_v_with_intrinsic-15.c | 47 ++++++++
.../target_attribute_v_with_intrinsic-16.c | 12 +++
.../target_attribute_v_with_intrinsic-17.c | 13 +++
.../target_attribute_v_with_intrinsic-18.c | 13 +++
.../target_attribute_v_with_intrinsic-19.c | 13 +++
.../target_attribute_v_with_intrinsic-20.c | 13 +++
.../target_attribute_v_with_intrinsic-21.c | 13 +++
.../target_attribute_v_with_intrinsic-22.c | 13 +++
.../target_attribute_v_with_intrinsic-23.c | 13 +++
.../target_attribute_v_with_intrinsic-24.c | 13 +++
.../target_attribute_v_with_intrinsic-25.c | 13 +++
.../target_attribute_v_with_intrinsic-26.c | 13 +++
.../target_attribute_v_with_intrinsic-27.c | 13 +++
.../target_attribute_v_with_intrinsic-28.c | 13 +++
.../target_attribute_v_with_intrinsic-29.c | 13 +++
.../target_attribute_v_with_intrinsic-9.c | 12 +++
25 files changed, 511 insertions(+), 12 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc
index 01314037461..62405ef0004 100644
--- a/gcc/config/riscv/riscv-c.cc
+++ b/gcc/config/riscv/riscv-c.cc
@@ -207,13 +207,39 @@ riscv_pragma_intrinsic (cpp_reader *)
{
/* To make the the rvv types and intrinsic API available for the
target("arch=+v") attribute, we need to temporally enable the
- TARGET_VECTOR, and disable it after all initialized. */
+ related flags, and disable it after all initialized. */
target_flags |= MASK_VECTOR;
-
+ riscv_vector_elen_flags = riscv_vector_elen_flags
+ | MASK_VECTOR_ELEN_32
+ | MASK_VECTOR_ELEN_64
+ | MASK_VECTOR_ELEN_FP_16
+ | MASK_VECTOR_ELEN_FP_32
+ | MASK_VECTOR_ELEN_FP_64;
+ riscv_zvl_flags = riscv_zvl_flags
+ | MASK_ZVL32B
+ | MASK_ZVL64B
+ | MASK_ZVL128B;
+
+ riscv_option_override ();
+ init_adjust_machine_modes ();
riscv_vector::init_builtins ();
riscv_vector::handle_pragma_vector ();
target_flags &= ~MASK_VECTOR;
+ riscv_vector_elen_flags = riscv_vector_elen_flags
+ & ~MASK_VECTOR_ELEN_32
+ & ~MASK_VECTOR_ELEN_64
+ & ~MASK_VECTOR_ELEN_FP_16
+ & ~MASK_VECTOR_ELEN_FP_32
+ & ~MASK_VECTOR_ELEN_FP_64;
+ riscv_zvl_flags = riscv_zvl_flags
+ & ~MASK_ZVL32B
+ & ~MASK_ZVL64B
+ & ~MASK_ZVL128B;
+
+ /* Re-initialize after the flags are restored. */
+ riscv_option_override ();
+ init_adjust_machine_modes ();
}
}
else
diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h
index b8735593805..fc65f0c6c8a 100644
--- a/gcc/config/riscv/riscv-protos.h
+++ b/gcc/config/riscv/riscv-protos.h
@@ -762,6 +762,7 @@ extern bool
riscv_option_valid_attribute_p (tree, tree, tree, int);
extern void
riscv_override_options_internal (struct gcc_options *);
+extern void riscv_option_override (void);
struct riscv_tune_param;
/* Information about one micro-arch we know about. */
diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc
index e07373d8b57..85a575d3749 100644
--- a/gcc/config/riscv/riscv-vector-builtins.cc
+++ b/gcc/config/riscv/riscv-vector-builtins.cc
@@ -4588,8 +4588,11 @@ expand_builtin (unsigned int code, tree exp, rtx target)
registered_function &rfn = *(*registered_functions)[code];
if (!TARGET_VECTOR)
- error_at (EXPR_LOCATION (exp),
- "builtin function %qE requires the V ISA extension", exp);
+ {
+ error_at (EXPR_LOCATION (exp),
+ "builtin function %qE requires the V ISA extension", exp);
+ return target;
+ }
return function_expander (rfn.instance, rfn.decl, exp, target).expand ();
}
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index fe9976bfffe..5a1b24af949 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -5459,6 +5459,96 @@ riscv_v_abi ()
return v_abi;
}
+static bool
+riscv_vector_int_type_p (const_tree type)
+{
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+
+ return strstr (name, "vint") != NULL || strstr (name, "vuint") != NULL;
+}
+
+static bool
+riscv_vector_float_type_p (const_tree type)
+{
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+
+ return strstr (name, "vfloat") != NULL;
+}
+
+static unsigned
+riscv_vector_element_bitsize (const_tree type)
+{
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+
+ if (strstr (name, "bool") != NULL)
+ return 1;
+ if (strstr (name, "int8") != NULL)
+ return 8;
+ else if (strstr (name, "int16") != NULL || strstr (name, "float16") != NULL)
+ return 16;
+ else if (strstr (name, "int32") != NULL || strstr (name, "float32") != NULL)
+ return 32;
+ else if (strstr (name, "int64") != NULL || strstr (name, "float64") != NULL)
+ return 64;
+
+ gcc_unreachable ();
+}
+
+static void
+riscv_validate_vector_type (const_tree type, const char *hint)
+{
+ gcc_assert (riscv_vector_type_p (type));
+
+ if (VECTOR_MODE_P (TYPE_MODE (type)))
+ return;
+
+ if (!TARGET_VECTOR)
+ {
+ error_at (input_location, "%s %qT requires the V ISA extension",
+ hint, type);
+ return;
+ }
+
+ unsigned element_bitsize = riscv_vector_element_bitsize (type);
+ bool int_type_p = riscv_vector_int_type_p (type);
+ bool float_type_p = riscv_vector_float_type_p (type);
+
+ if (int_type_p && element_bitsize == 64
+ && !TARGET_VECTOR_ELEN_64_P (riscv_vector_elen_flags))
+ {
+ error_at (input_location,
+ "%s %qT requires the zve64x, zve64f or zve64d ISA extension",
+ hint, type);
+ return;
+ }
+
+ if (float_type_p && element_bitsize == 16
+ && !TARGET_VECTOR_ELEN_FP_16_P (riscv_vector_elen_flags))
+ {
+ error_at (input_location,
+ "%s %qT requires the zvfhmin or zvfh ISA extension",
+ hint, type);
+ return;
+ }
+
+ if (float_type_p && element_bitsize == 32
+ && !TARGET_VECTOR_ELEN_FP_32_P (riscv_vector_elen_flags))
+ {
+ error_at (input_location,
+ "%s %qT requires the zve32f, zve64f or zve64d ISA extension",
+ hint, type);
+ return;
+ }
+
+ if (float_type_p && element_bitsize == 64
+ && !TARGET_VECTOR_ELEN_FP_64_P (riscv_vector_elen_flags))
+ {
+ error_at (input_location,
+ "%s %qT requires the zve64d ISA extension", hint, type);
+ return;
+ }
+}
+
/* Return true if a function with type FNTYPE returns its value in
RISC-V V registers. */
@@ -5469,9 +5559,7 @@ riscv_return_value_is_vector_type_p (const_tree fntype)
if (riscv_vector_type_p (return_type))
{
- if (!TARGET_VECTOR)
- error_at (input_location,
- "return type %qT requires the V ISA extension", return_type);
+ riscv_validate_vector_type (return_type, "return type");
return true;
}
else
@@ -5490,10 +5578,7 @@ riscv_arguments_is_vector_type_p (const_tree fntype)
tree arg_type = TREE_VALUE (chain);
if (riscv_vector_type_p (arg_type))
{
- if (!TARGET_VECTOR)
- error_at (input_location,
- "argument type %qT requires the V ISA extension",
- arg_type);
+ riscv_validate_vector_type (arg_type, "argument type");
return true;
}
}
@@ -9107,7 +9192,7 @@ riscv_override_options_internal (struct gcc_options *opts)
/* Implement TARGET_OPTION_OVERRIDE. */
-static void
+void
riscv_option_override (void)
{
#ifdef SUBTARGET_OVERRIDE_OPTIONS
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
new file mode 100644
index 00000000000..3e6844475d5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+v,+zvfh")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
new file mode 100644
index 00000000000..df053073bc8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
@@ -0,0 +1,26 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve32x")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve32x")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
new file mode 100644
index 00000000000..51a91886f52
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
@@ -0,0 +1,33 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve32f")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve32f")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve32f")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
+
+vfloat32m1_t
+__attribute__((target("arch=+zve32f")))
+test_4 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
new file mode 100644
index 00000000000..994b1c0a5db
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
@@ -0,0 +1,33 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve64x")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve64x")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
+
+vint64m1_t
+__attribute__((target("arch=+zve64x")))
+test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
new file mode 100644
index 00000000000..caa2a10e943
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
@@ -0,0 +1,40 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve64f")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve64f")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve64f")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
+
+vint64m1_t
+__attribute__((target("arch=+zve64f")))
+test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
+
+vfloat32m1_t
+__attribute__((target("arch=+zve64f")))
+test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
new file mode 100644
index 00000000000..72a2be6e560
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
@@ -0,0 +1,47 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve64d")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve64d")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve64d")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
+
+vint64m1_t
+__attribute__((target("arch=+zve64d")))
+test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
+
+vfloat32m1_t
+__attribute__((target("arch=+zve64d")))
+test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
+
+vfloat64m1_t
+__attribute__((target("arch=+zve64d")))
+test_6 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
new file mode 100644
index 00000000000..dabdcf8ff21
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+v,+zvfhmin")))
+test_1 (vfloat16mf2_t a, size_t vl)
+{
+ return __riscv_vfwcvt_f_f_v_f32m1 (a, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
new file mode 100644
index 00000000000..daabe88cd25
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint64m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f or zve64d ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
new file mode 100644
index 00000000000..4461bfd7412
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
new file mode 100644
index 00000000000..bfc26f8210a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
new file mode 100644
index 00000000000..27a3bf7ea82
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat64m1_t' requires the zve64d ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
new file mode 100644
index 00000000000..4aaccdd96f3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint64m1_t
+__attribute__((target("arch=+zve32f")))
+test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f or zve64d ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
new file mode 100644
index 00000000000..b5a894ecad4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve32f")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
new file mode 100644
index 00000000000..f98ebc4dd9f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve32f")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat64m1_t' requires the zve64d ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
new file mode 100644
index 00000000000..438f2ea7125
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
new file mode 100644
index 00000000000..f1241cb1771
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
new file mode 100644
index 00000000000..4852bfbd154
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat64m1_t' requires the zve64d ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
new file mode 100644
index 00000000000..c2e9490e7d7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve64f")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat64m1_t' requires the zve64d ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
new file mode 100644
index 00000000000..7eaa6adab82
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve64f")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
new file mode 100644
index 00000000000..eb74e33299f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve64d")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
new file mode 100644
index 00000000000..0764f403b89
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+v")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
--
2.34.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v1] RISC-V: Allow RVV intrinsic for more function target
2024-03-27 3:16 [PATCH v1] RISC-V: Allow RVV intrinsic for more function target pan2.li
@ 2024-03-28 6:43 ` Kito Cheng
2024-03-28 7:32 ` Li, Pan2
2024-04-02 14:26 ` [PATCH v2] " pan2.li
1 sibling, 1 reply; 13+ messages in thread
From: Kito Cheng @ 2024-03-28 6:43 UTC (permalink / raw)
To: pan2.li; +Cc: gcc-patches, juzhe.zhong, yanzhang.wang
Just tried something interesting:
$ riscv64-unknown-linux-gnu-gcc -march=rv64gc -O
target_attribute_v_with_intrinsic-9.c -S # Work
$ riscv64-unknown-linux-gnu-gcc -march=rv64gc_zve32x -O
target_attribute_v_with_intrinsic-9.c -S # Not work
Also I guess all zvk* and zvbb may also need to be added as well,
but...I suspect it's not scalable way?
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH v1] RISC-V: Allow RVV intrinsic for more function target
2024-03-28 6:43 ` Kito Cheng
@ 2024-03-28 7:32 ` Li, Pan2
2024-03-28 7:52 ` Li, Pan2
0 siblings, 1 reply; 13+ messages in thread
From: Li, Pan2 @ 2024-03-28 7:32 UTC (permalink / raw)
To: Kito Cheng; +Cc: gcc-patches, juzhe.zhong, Wang, Yanzhang
Thanks kito, looks missed this part in test, let me check it out.
Pan
-----Original Message-----
From: Kito Cheng <kito.cheng@gmail.com>
Sent: Thursday, March 28, 2024 2:44 PM
To: Li, Pan2 <pan2.li@intel.com>
Cc: gcc-patches@gcc.gnu.org; juzhe.zhong@rivai.ai; Wang, Yanzhang <yanzhang.wang@intel.com>
Subject: Re: [PATCH v1] RISC-V: Allow RVV intrinsic for more function target
Just tried something interesting:
$ riscv64-unknown-linux-gnu-gcc -march=rv64gc -O
target_attribute_v_with_intrinsic-9.c -S # Work
$ riscv64-unknown-linux-gnu-gcc -march=rv64gc_zve32x -O
target_attribute_v_with_intrinsic-9.c -S # Not work
Also I guess all zvk* and zvbb may also need to be added as well,
but...I suspect it's not scalable way?
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH v1] RISC-V: Allow RVV intrinsic for more function target
2024-03-28 7:32 ` Li, Pan2
@ 2024-03-28 7:52 ` Li, Pan2
0 siblings, 0 replies; 13+ messages in thread
From: Li, Pan2 @ 2024-03-28 7:52 UTC (permalink / raw)
To: Li, Pan2, Kito Cheng; +Cc: gcc-patches, juzhe.zhong, Wang, Yanzhang
I see. This failure comes from that we have zve32x (TARGET_VECTOR is true) in command line, and then we don't do the reinit in riscv_pragma_intrinsic in v1.
As I understand, we need something like below, no matter TARGET_VECTOR is true or false.
Int flags_backup = flags;
Int new_flags = flags | ...;
reinit ();
flags = flags_backup ();
reinit ();
> Also I guess all zvk* and zvbb may also need to be added as well,
> but...I suspect it's not scalable way?
If zvk* and zvbb doesn't introduce new modes, I suspect we don't need to add here, let me double check about it and update in v2.
Pan
-----Original Message-----
From: Li, Pan2 <pan2.li@intel.com>
Sent: Thursday, March 28, 2024 3:32 PM
To: Kito Cheng <kito.cheng@gmail.com>
Cc: gcc-patches@gcc.gnu.org; juzhe.zhong@rivai.ai; Wang, Yanzhang <yanzhang.wang@intel.com>
Subject: RE: [PATCH v1] RISC-V: Allow RVV intrinsic for more function target
Thanks kito, looks missed this part in test, let me check it out.
Pan
-----Original Message-----
From: Kito Cheng <kito.cheng@gmail.com>
Sent: Thursday, March 28, 2024 2:44 PM
To: Li, Pan2 <pan2.li@intel.com>
Cc: gcc-patches@gcc.gnu.org; juzhe.zhong@rivai.ai; Wang, Yanzhang <yanzhang.wang@intel.com>
Subject: Re: [PATCH v1] RISC-V: Allow RVV intrinsic for more function target
Just tried something interesting:
$ riscv64-unknown-linux-gnu-gcc -march=rv64gc -O
target_attribute_v_with_intrinsic-9.c -S # Work
$ riscv64-unknown-linux-gnu-gcc -march=rv64gc_zve32x -O
target_attribute_v_with_intrinsic-9.c -S # Not work
Also I guess all zvk* and zvbb may also need to be added as well,
but...I suspect it's not scalable way?
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2] RISC-V: Allow RVV intrinsic for more function target
2024-03-27 3:16 [PATCH v1] RISC-V: Allow RVV intrinsic for more function target pan2.li
2024-03-28 6:43 ` Kito Cheng
@ 2024-04-02 14:26 ` pan2.li
2024-04-08 1:23 ` Kito Cheng
1 sibling, 1 reply; 13+ messages in thread
From: pan2.li @ 2024-04-02 14:26 UTC (permalink / raw)
To: gcc-patches; +Cc: juzhe.zhong, kito.cheng, yanzhang.wang, Pan Li
From: Pan Li <pan2.li@intel.com>
In previous, we allowed the target(("arch=+v")) for a function with
rv64gc build. This patch would like to support more arch options as
below:
* zve32x
* zve32f
* zve64x
* zve64f
* zve64d
* zvfhmin
* zvfh
* zvk*
* zvbb
For example, we have sample code as below.
vfloat32m1_t
__attribute__((target("arch=+zve64f")))
test_9 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
{
return __riscv_vfadd_vv_f32m1 (a, b, vl);
}
It will generate the asm code when build with -O3 -march=rv64gc
test_9:
vsetvli zero,a0,e32,m1,ta,ma
vfadd.vv v8,v8,v9
ret
Meanwhile, this patch introduces more error handling for the target
attribute. Take arch=+zve32x with vfloat32m1_t will have error message
"'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension".
And take arch=+zve32f with vfloat16m1_t will have error message
"'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension".
By default, all the RVV types includes the cmdline march will be
registered when include the riscv_vector.h. And we have sorts of check
during args and return types.
Below test are passed for this patch:
* The riscv fully regression test.
gcc/ChangeLog:
* config/riscv/riscv-c.cc (struct pragma_intrinsic_flags): New
struct to hold all intrinisc related flags.
(riscv_pragma_intrinsic_flags_pollute): New func to pollute
the intrinsic flags and backup original flags.
(riscv_pragma_intrinsic_flags_restore): New func to restore
the flags from the backup intrinsic flags.
(riscv_pragma_intrinsic): Pollute the flags and register all
possible builtin types and functions, then restore and reinit.
* config/riscv/riscv-protos.h (reinit_builtins): New func
decl to reinit after flags pollution.
(riscv_option_override): New extern func decl.
* config/riscv/riscv-vector-builtins.cc (register_builtin_types_on_null):
New func to register builtin types if null.
(DEF_RVV_TYPE): Ditto.
(DEF_RVV_TUPLE_TYPE): Ditto.
(reinit_builtins): New func impl to reinit after flags pollution.
* config/riscv/riscv-vector-builtins.cc (expand_builtin): Return
target rtx after error_at.
* config/riscv/riscv.cc (riscv_vector_int_type_p): New predicate
func to tell one tree type is integer or not.
(riscv_vector_float_type_p): New predicate func to tell one tree
type is float or not.
(riscv_vector_element_bitsize): New func to get the element bitsize
of a vector tree type.
(riscv_vector_required_min_vlen): New func to get the required min vlen
of a vector tree type.
(riscv_validate_vector_type): New func to validate the tree type
is valid on flags.
(riscv_return_value_is_vector_type_p): Leverage the func
riscv_validate_vector_type to do the tree type validation.
(riscv_arguments_is_vector_type_p): Ditto.
(riscv_override_options_internal): Ditto.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/base/pr109479-1.c: Adjust the existing test
scenarios and add new error check tests.
* gcc.target/riscv/rvv/base/pr109479-2.c: Ditto.
* gcc.target/riscv/rvv/base/pr109479-3.c: Ditto.
* gcc.target/riscv/rvv/base/pr109479-4.c: Diito.
* gcc.target/riscv/rvv/base/pr109479-5.c: Diito.
* gcc.target/riscv/rvv/base/pr109479-6.c: Diito.
* gcc.target/riscv/rvv/base/user-10.c: Ditto.
* gcc.target/riscv/rvv/base/user-12.c: Ditto.
* gcc.target/riscv/rvv/base/user-13.c: Ditto.
* gcc.target/riscv/rvv/base/user-14.c: Ditto.
* gcc.target/riscv/rvv/base/user-15.c: Ditto.
* gcc.target/riscv/rvv/base/user-2.c: Ditto.
* gcc.target/riscv/rvv/base/user-3.c: Ditto.
* gcc.target/riscv/rvv/base/user-5.c: Ditto.
* gcc.target/riscv/rvv/base/user-6.c: Ditto.
* gcc.target/riscv/rvv/base/user-9.c: Ditto.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: New test.
* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c: New test.
Signed-off-by: Pan Li <pan2.li@intel.com>
---
gcc/config/riscv/riscv-c.cc | 94 +++++-
gcc/config/riscv/riscv-protos.h | 2 +
gcc/config/riscv/riscv-vector-builtins.cc | 53 +++-
gcc/config/riscv/riscv.cc | 157 +++++++++-
.../gcc.target/riscv/rvv/base/pr109479-1.c | 29 +-
.../gcc.target/riscv/rvv/base/pr109479-2.c | 29 +-
.../gcc.target/riscv/rvv/base/pr109479-3.c | 50 +++-
.../gcc.target/riscv/rvv/base/pr109479-4.c | 51 +++-
.../gcc.target/riscv/rvv/base/pr109479-5.c | 37 ++-
.../gcc.target/riscv/rvv/base/pr109479-6.c | 33 ++-
.../target_attribute_v_with_intrinsic-10.c | 12 +
.../target_attribute_v_with_intrinsic-11.c | 26 ++
.../target_attribute_v_with_intrinsic-12.c | 33 +++
.../target_attribute_v_with_intrinsic-13.c | 33 +++
.../target_attribute_v_with_intrinsic-14.c | 40 +++
.../target_attribute_v_with_intrinsic-15.c | 47 +++
.../target_attribute_v_with_intrinsic-16.c | 12 +
.../target_attribute_v_with_intrinsic-17.c | 13 +
.../target_attribute_v_with_intrinsic-18.c | 13 +
.../target_attribute_v_with_intrinsic-19.c | 13 +
.../target_attribute_v_with_intrinsic-20.c | 13 +
.../target_attribute_v_with_intrinsic-21.c | 13 +
.../target_attribute_v_with_intrinsic-22.c | 13 +
.../target_attribute_v_with_intrinsic-23.c | 13 +
.../target_attribute_v_with_intrinsic-24.c | 13 +
.../target_attribute_v_with_intrinsic-25.c | 13 +
.../target_attribute_v_with_intrinsic-26.c | 13 +
.../target_attribute_v_with_intrinsic-27.c | 13 +
.../target_attribute_v_with_intrinsic-28.c | 13 +
.../target_attribute_v_with_intrinsic-29.c | 13 +
.../target_attribute_v_with_intrinsic-30.c | 12 +
.../target_attribute_v_with_intrinsic-31.c | 12 +
.../target_attribute_v_with_intrinsic-32.c | 12 +
.../target_attribute_v_with_intrinsic-33.c | 12 +
.../target_attribute_v_with_intrinsic-34.c | 12 +
.../target_attribute_v_with_intrinsic-35.c | 12 +
.../target_attribute_v_with_intrinsic-36.c | 12 +
.../target_attribute_v_with_intrinsic-37.c | 12 +
.../target_attribute_v_with_intrinsic-38.c | 12 +
.../target_attribute_v_with_intrinsic-39.c | 12 +
.../target_attribute_v_with_intrinsic-40.c | 12 +
.../target_attribute_v_with_intrinsic-41.c | 12 +
.../target_attribute_v_with_intrinsic-42.c | 12 +
.../target_attribute_v_with_intrinsic-43.c | 12 +
.../target_attribute_v_with_intrinsic-44.c | 12 +
.../target_attribute_v_with_intrinsic-45.c | 12 +
.../target_attribute_v_with_intrinsic-46.c | 12 +
.../target_attribute_v_with_intrinsic-47.c | 12 +
.../target_attribute_v_with_intrinsic-48.c | 12 +
.../target_attribute_v_with_intrinsic-49.c | 12 +
.../target_attribute_v_with_intrinsic-50.c | 12 +
.../target_attribute_v_with_intrinsic-51.c | 12 +
.../target_attribute_v_with_intrinsic-52.c | 12 +
.../target_attribute_v_with_intrinsic-53.c | 12 +
.../target_attribute_v_with_intrinsic-9.c | 12 +
.../gcc.target/riscv/rvv/base/user-10.c | 39 ++-
.../gcc.target/riscv/rvv/base/user-12.c | 275 ++++++++++++------
.../gcc.target/riscv/rvv/base/user-13.c | 156 ++++++----
.../gcc.target/riscv/rvv/base/user-14.c | 257 ++++++++++------
.../gcc.target/riscv/rvv/base/user-15.c | 106 ++++---
.../gcc.target/riscv/rvv/base/user-2.c | 33 ++-
.../gcc.target/riscv/rvv/base/user-3.c | 18 +-
.../gcc.target/riscv/rvv/base/user-5.c | 78 +++--
.../gcc.target/riscv/rvv/base/user-6.c | 66 +++--
.../gcc.target/riscv/rvv/base/user-9.c | 93 ++++--
65 files changed, 1886 insertions(+), 442 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc
index 01314037461..43c8eecbb6f 100644
--- a/gcc/config/riscv/riscv-c.cc
+++ b/gcc/config/riscv/riscv-c.cc
@@ -34,6 +34,72 @@ along with GCC; see the file COPYING3. If not see
#define builtin_define(TXT) cpp_define (pfile, TXT)
+struct pragma_intrinsic_flags
+{
+ int intrinsic_target_flags;
+
+ int intrinsic_riscv_vector_elen_flags;
+ int intrinsic_riscv_zvl_flags;
+ int intrinsic_riscv_zvb_subext;
+ int intrinsic_riscv_zvk_subext;
+};
+
+static void
+riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags)
+{
+ flags->intrinsic_target_flags = target_flags;
+ flags->intrinsic_riscv_vector_elen_flags = riscv_vector_elen_flags;
+ flags->intrinsic_riscv_zvl_flags = riscv_zvl_flags;
+ flags->intrinsic_riscv_zvb_subext = riscv_zvb_subext;
+ flags->intrinsic_riscv_zvk_subext = riscv_zvk_subext;
+
+ target_flags = target_flags
+ | MASK_VECTOR;
+
+ riscv_zvl_flags = riscv_zvl_flags
+ | MASK_ZVL32B
+ | MASK_ZVL64B
+ | MASK_ZVL128B;
+
+ riscv_vector_elen_flags = riscv_vector_elen_flags
+ | MASK_VECTOR_ELEN_32
+ | MASK_VECTOR_ELEN_64
+ | MASK_VECTOR_ELEN_FP_16
+ | MASK_VECTOR_ELEN_FP_32
+ | MASK_VECTOR_ELEN_FP_64;
+
+ riscv_zvb_subext = riscv_zvb_subext
+ | MASK_ZVBB
+ | MASK_ZVBC
+ | MASK_ZVKB;
+
+ riscv_zvk_subext = riscv_zvk_subext
+ | MASK_ZVKG
+ | MASK_ZVKNED
+ | MASK_ZVKNHA
+ | MASK_ZVKNHB
+ | MASK_ZVKSED
+ | MASK_ZVKSH
+ | MASK_ZVKN
+ | MASK_ZVKNC
+ | MASK_ZVKNG
+ | MASK_ZVKS
+ | MASK_ZVKSC
+ | MASK_ZVKSG
+ | MASK_ZVKT;
+}
+
+static void
+riscv_pragma_intrinsic_flags_restore (struct pragma_intrinsic_flags *flags)
+{
+ target_flags = flags->intrinsic_target_flags;
+
+ riscv_vector_elen_flags = flags->intrinsic_riscv_vector_elen_flags;
+ riscv_zvl_flags = flags->intrinsic_riscv_zvl_flags;
+ riscv_zvb_subext = flags->intrinsic_riscv_zvb_subext;
+ riscv_zvk_subext = flags->intrinsic_riscv_zvk_subext;
+}
+
static int
riscv_ext_version_value (unsigned major, unsigned minor)
{
@@ -201,20 +267,20 @@ riscv_pragma_intrinsic (cpp_reader *)
if (strcmp (name, "vector") == 0
|| strcmp (name, "xtheadvector") == 0)
{
- if (TARGET_VECTOR)
- riscv_vector::handle_pragma_vector ();
- else /* Indicates riscv_vector.h is included but v is missing in arch */
- {
- /* To make the the rvv types and intrinsic API available for the
- target("arch=+v") attribute, we need to temporally enable the
- TARGET_VECTOR, and disable it after all initialized. */
- target_flags |= MASK_VECTOR;
-
- riscv_vector::init_builtins ();
- riscv_vector::handle_pragma_vector ();
-
- target_flags &= ~MASK_VECTOR;
- }
+ struct pragma_intrinsic_flags backup_flags;
+
+ riscv_pragma_intrinsic_flags_pollute (&backup_flags);
+
+ riscv_option_override ();
+ init_adjust_machine_modes ();
+ riscv_vector::reinit_builtins ();
+ riscv_vector::handle_pragma_vector ();
+
+ riscv_pragma_intrinsic_flags_restore (&backup_flags);
+
+ /* Re-initialize after the flags are restored. */
+ riscv_option_override ();
+ init_adjust_machine_modes ();
}
else
error ("unknown %<#pragma riscv intrinsic%> option %qs", name);
diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h
index b8735593805..4677d9c46cd 100644
--- a/gcc/config/riscv/riscv-protos.h
+++ b/gcc/config/riscv/riscv-protos.h
@@ -546,6 +546,7 @@ enum avl_type
};
/* Routines implemented in riscv-vector-builtins.cc. */
void init_builtins (void);
+void reinit_builtins (void);
const char *mangle_builtin_type (const_tree);
tree lookup_vector_type_attribute (const_tree);
bool builtin_type_p (const_tree);
@@ -762,6 +763,7 @@ extern bool
riscv_option_valid_attribute_p (tree, tree, tree, int);
extern void
riscv_override_options_internal (struct gcc_options *);
+extern void riscv_option_override (void);
struct riscv_tune_param;
/* Information about one micro-arch we know about. */
diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc
index db9246eed2d..53ccea7889e 100644
--- a/gcc/config/riscv/riscv-vector-builtins.cc
+++ b/gcc/config/riscv/riscv-vector-builtins.cc
@@ -3123,6 +3123,36 @@ register_builtin_types ()
#include "riscv-vector-builtins.def"
}
+/* Similar as register_builtin_types but perform the registration if and
+ only if the element of abi_vector_type is NULL_TREE. */
+static void
+register_builtin_types_on_null ()
+{
+ /* Get type node from get_typenode_from_name to prevent we have different type
+ node define in different target libraries, e.g. int32_t defined as
+ `long` in RV32/newlib-stdint, but `int` for RV32/glibc-stdint.h.
+ NOTE: uint[16|32|64]_type_node already defined in tree.h. */
+ tree int8_type_node = get_typenode_from_name (INT8_TYPE);
+ tree uint8_type_node = get_typenode_from_name (UINT8_TYPE);
+ tree int16_type_node = get_typenode_from_name (INT16_TYPE);
+ tree int32_type_node = get_typenode_from_name (INT32_TYPE);
+ tree int64_type_node = get_typenode_from_name (INT64_TYPE);
+
+ machine_mode mode;
+#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
+ ARGS...) \
+ mode = VECTOR_MODE##mode; \
+ if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
+ register_builtin_type (VECTOR_TYPE_##NAME, SCALAR_TYPE##_type_node, mode);
+
+#define DEF_RVV_TUPLE_TYPE(NAME, NCHARS, ABI_NAME, SUBPART_TYPE, SCALAR_TYPE, \
+ NF, VECTOR_SUFFIX) \
+ if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
+ register_tuple_type (VECTOR_TYPE_##NAME, VECTOR_TYPE_##SUBPART_TYPE, \
+ SCALAR_TYPE##_type_node, NF);
+#include "riscv-vector-builtins.def"
+}
+
/* Register vector type TYPE under its risv_vector.h name. */
static void
register_vector_type (vector_type_index type)
@@ -4419,6 +4449,22 @@ init_builtins ()
handle_pragma_vector ();
}
+/* Reinitialize builtins similar to init_builtins, but only the null
+ builtin types will be registered. */
+void
+reinit_builtins ()
+{
+ rvv_switcher rvv;
+
+ if (!TARGET_VECTOR)
+ return;
+
+ register_builtin_types_on_null ();
+
+ if (in_lto_p)
+ handle_pragma_vector ();
+}
+
/* Implement TARGET_VERIFY_TYPE_CONTEXT for RVV types. */
bool
verify_type_context (location_t loc, type_context_kind context, const_tree type,
@@ -4588,8 +4634,11 @@ expand_builtin (unsigned int code, tree exp, rtx target)
registered_function &rfn = *(*registered_functions)[code];
if (!TARGET_VECTOR)
- error_at (EXPR_LOCATION (exp),
- "built-in function %qE requires the V ISA extension", exp);
+ {
+ error_at (EXPR_LOCATION (exp),
+ "built-in function %qE requires the V ISA extension", exp);
+ return target;
+ }
return function_expander (rfn.instance, rfn.decl, exp, target).expand ();
}
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index fe9976bfffe..2a71badfdc9 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -5459,6 +5459,152 @@ riscv_v_abi ()
return v_abi;
}
+static bool
+riscv_vector_int_type_p (const_tree type)
+{
+ machine_mode mode = TYPE_MODE (type);
+
+ if (VECTOR_MODE_P (mode))
+ return INTEGRAL_MODE_P (GET_MODE_INNER (mode));
+
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+ return strstr (name, "int") != NULL || strstr (name, "uint") != NULL;
+}
+
+static bool
+riscv_vector_float_type_p (const_tree type)
+{
+ machine_mode mode = TYPE_MODE (type);
+
+ if (VECTOR_MODE_P (mode))
+ return FLOAT_MODE_P (GET_MODE_INNER (mode));
+
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+ return strstr (name, "vfloat") != NULL;
+}
+
+static unsigned
+riscv_vector_element_bitsize (const_tree type)
+{
+ machine_mode mode = TYPE_MODE (type);
+
+ if (VECTOR_MODE_P (mode))
+ return GET_MODE_BITSIZE (GET_MODE_INNER (mode));
+
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+
+ if (strstr (name, "bool") != NULL)
+ return 1;
+ else if (strstr (name, "int8") != NULL)
+ return 8;
+ else if (strstr (name, "int16") != NULL || strstr (name, "float16") != NULL)
+ return 16;
+ else if (strstr (name, "int32") != NULL || strstr (name, "float32") != NULL)
+ return 32;
+ else if (strstr (name, "int64") != NULL || strstr (name, "float64") != NULL)
+ return 64;
+
+ gcc_unreachable ();
+}
+
+static unsigned
+riscv_vector_required_min_vlen (const_tree type)
+{
+ machine_mode mode = TYPE_MODE (type);
+
+ if (riscv_v_ext_mode_p (mode))
+ return TARGET_MIN_VLEN;
+
+ unsigned element_bitsize = riscv_vector_element_bitsize (type);
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+
+ if (strstr (name, "bool64") != NULL)
+ return element_bitsize * 64;
+ else if (strstr (name, "bool32") != NULL)
+ return element_bitsize * 32;
+ else if (strstr (name, "bool16") != NULL)
+ return element_bitsize * 16;
+ else if (strstr (name, "bool8") != NULL)
+ return element_bitsize * 8;
+ else if (strstr (name, "bool4") != NULL)
+ return element_bitsize * 4;
+ else if (strstr (name, "bool2") != NULL)
+ return element_bitsize * 2;
+
+ if (strstr (name, "mf8") != NULL)
+ return element_bitsize * 8;
+ else if (strstr (name, "mf4") != NULL)
+ return element_bitsize * 4;
+ else if (strstr (name, "mf2") != NULL)
+ return element_bitsize * 2;
+
+ return element_bitsize;
+}
+
+static void
+riscv_validate_vector_type (const_tree type, const char *hint)
+{
+ gcc_assert (riscv_vector_type_p (type));
+
+ if (!TARGET_VECTOR)
+ {
+ error_at (input_location, "%s %qT requires the V ISA extension",
+ hint, type);
+ return;
+ }
+
+ unsigned element_bitsize = riscv_vector_element_bitsize (type);
+ bool int_type_p = riscv_vector_int_type_p (type);
+
+ if (int_type_p && element_bitsize == 64
+ && !TARGET_VECTOR_ELEN_64_P (riscv_vector_elen_flags))
+ {
+ error_at (input_location,
+ "%s %qT requires the zve64x, zve64f, zve64d or v ISA extension",
+ hint, type);
+ return;
+ }
+
+ bool float_type_p = riscv_vector_float_type_p (type);
+
+ if (float_type_p && element_bitsize == 16
+ && !TARGET_VECTOR_ELEN_FP_16_P (riscv_vector_elen_flags))
+ {
+ error_at (input_location,
+ "%s %qT requires the zvfhmin or zvfh ISA extension",
+ hint, type);
+ return;
+ }
+
+ if (float_type_p && element_bitsize == 32
+ && !TARGET_VECTOR_ELEN_FP_32_P (riscv_vector_elen_flags))
+ {
+ error_at (input_location,
+ "%s %qT requires the zve32f, zve64f, zve64d or v ISA extension",
+ hint, type);
+ return;
+ }
+
+ if (float_type_p && element_bitsize == 64
+ && !TARGET_VECTOR_ELEN_FP_64_P (riscv_vector_elen_flags))
+ {
+ error_at (input_location,
+ "%s %qT requires the zve64d or v ISA extension", hint, type);
+ return;
+ }
+
+ unsigned required_min_vlen = riscv_vector_required_min_vlen (type);
+
+ if (TARGET_MIN_VLEN < required_min_vlen)
+ {
+ error_at (
+ input_location,
+ "%s %qT requires the minimal vector length %qd but %qd is given",
+ hint, type, required_min_vlen, TARGET_MIN_VLEN);
+ return;
+ }
+}
+
/* Return true if a function with type FNTYPE returns its value in
RISC-V V registers. */
@@ -5469,9 +5615,7 @@ riscv_return_value_is_vector_type_p (const_tree fntype)
if (riscv_vector_type_p (return_type))
{
- if (!TARGET_VECTOR)
- error_at (input_location,
- "return type %qT requires the V ISA extension", return_type);
+ riscv_validate_vector_type (return_type, "return type");
return true;
}
else
@@ -5490,10 +5634,7 @@ riscv_arguments_is_vector_type_p (const_tree fntype)
tree arg_type = TREE_VALUE (chain);
if (riscv_vector_type_p (arg_type))
{
- if (!TARGET_VECTOR)
- error_at (input_location,
- "argument type %qT requires the V ISA extension",
- arg_type);
+ riscv_validate_vector_type (arg_type, "argument type");
return true;
}
}
@@ -9107,7 +9248,7 @@ riscv_override_options_internal (struct gcc_options *opts)
/* Implement TARGET_OPTION_OVERRIDE. */
-static void
+void
riscv_option_override (void)
{
#ifdef SUBTARGET_OVERRIDE_OPTIONS
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
index a13cc12c543..1bd7efe61f2 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
@@ -3,11 +3,24 @@
#include "riscv_vector.h"
-void foo0 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
-void foo1 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
-void foo2 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
-void foo3 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
-void foo4 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
-void foo5 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
-void foo6 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
-void foo7 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void foo0 () {__rvv_int64m1_t t;}
+void foo1 () {__rvv_uint64m1_t t;}
+void foo2 () {__rvv_int64m2_t t;}
+void foo3 () {__rvv_uint64m2_t t;}
+void foo4 () {__rvv_int64m4_t t;}
+void foo5 () {__rvv_uint64m4_t t;}
+void foo6 () {__rvv_int64m8_t t;}
+void foo7 () {__rvv_uint64m8_t t;}
+
+void new_foo0 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo1 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo2 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo3 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo4 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo5 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo6 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo7 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
index dd6bcb0f548..ce6a62d1405 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
@@ -3,11 +3,24 @@
#include "riscv_vector.h"
-void foo0 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
-void foo1 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
-void foo2 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
-void foo3 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
-void foo4 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
-void foo5 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
-void foo6 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
-void foo7 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void foo0 () {vint64m1_t t;}
+void foo1 () {vuint64m1_t t;}
+void foo2 () {vint64m2_t t;}
+void foo3 () {vuint64m2_t t;}
+void foo4 () {vint64m4_t t;}
+void foo5 () {vuint64m4_t t;}
+void foo6 () {vint64m8_t t;}
+void foo7 () {vuint64m8_t t;}
+
+void new_foo0 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo1 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo2 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo3 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo4 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo5 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo6 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo7 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
index 01e86223da9..5c0cd1b1f7f 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
@@ -3,18 +3,38 @@
#include "riscv_vector.h"
-void foo0 () {__rvv_bool64_t t;} /* { dg-error {unknown type name '__rvv_bool64_t'} } */
-void foo1 () {__rvv_int8mf8_t t;} /* { dg-error {unknown type name '__rvv_int8mf8_t'} } */
-void foo2 () {__rvv_uint8mf8_t t;} /* { dg-error {unknown type name '__rvv_uint8mf8_t'} } */
-void foo3 () {__rvv_int16mf4_t t;} /* { dg-error {unknown type name '__rvv_int16mf4_t'} } */
-void foo4 () {__rvv_uint16mf4_t t;} /* { dg-error {unknown type name '__rvv_uint16mf4_t'} } */
-void foo5 () {__rvv_int32mf2_t t;} /* { dg-error {unknown type name '__rvv_int32mf2_t'} } */
-void foo6 () {__rvv_uint32mf2_t t;} /* { dg-error {unknown type name '__rvv_uint32mf2_t'} } */
-void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
-void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
-void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
-void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
-void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
-void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
-void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
-void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void foo0 () {__rvv_bool64_t t;}
+void foo1 () {__rvv_int8mf8_t t;}
+void foo2 () {__rvv_uint8mf8_t t;}
+void foo3 () {__rvv_int16mf4_t t;}
+void foo4 () {__rvv_uint16mf4_t t;}
+void foo5 () {__rvv_int32mf2_t t;}
+void foo6 () {__rvv_uint32mf2_t t;}
+void foo7 () {__rvv_int64m1_t t;}
+void foo8 () {__rvv_uint64m1_t t;}
+void foo9 () {__rvv_int64m2_t t;}
+void foo10 () {__rvv_uint64m2_t t;}
+void foo11 () {__rvv_int64m4_t t;}
+void foo12 () {__rvv_uint64m4_t t;}
+void foo13 () {__rvv_int64m8_t t;}
+void foo14 () {__rvv_uint64m8_t t;}
+
+void new_foo0 (__rvv_bool64_t t) { } /* { dg-error {argument type '__rvv_bool64_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo1 (__rvv_int8mf8_t t) { } /* { dg-error {argument type '__rvv_int8mf8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo2 (__rvv_uint8mf8_t t) { } /* { dg-error {argument type '__rvv_uint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo3 (__rvv_int16mf4_t t) { } /* { dg-error {argument type '__rvv_int16mf4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo4 (__rvv_uint16mf4_t t) { } /* { dg-error {argument type '__rvv_uint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo5 (__rvv_int32mf2_t t) { } /* { dg-error {argument type '__rvv_int32mf2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo6 (__rvv_uint32mf2_t t) { } /* { dg-error {argument type '__rvv_uint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
index 62385b8dcd1..48e1f278e70 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
@@ -3,18 +3,39 @@
#include "riscv_vector.h"
-void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
-void foo1 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
-void foo2 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
-void foo3 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
-void foo4 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
-void foo5 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
-void foo6 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
-void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
-void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
-void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
-void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
-void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
-void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
-void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
-void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void foo0 () {vbool64_t t;}
+void foo1 () {vint8mf8_t t;}
+void foo2 () {vuint8mf8_t t;}
+void foo3 () {vint16mf4_t t;}
+void foo4 () {vuint16mf4_t t;}
+void foo5 () {vint32mf2_t t;}
+void foo6 () {vuint32mf2_t t;}
+void foo7 () {vint64m1_t t;}
+void foo8 () {vuint64m1_t t;}
+void foo9 () {vint64m2_t t;}
+void foo10 () {vuint64m2_t t;}
+void foo11 () {vint64m4_t t;}
+void foo12 () {vuint64m4_t t;}
+void foo13 () {vint64m8_t t;}
+void foo14 () {vuint64m8_t t;}
+
+void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo1 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo2 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo3 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo4 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo5 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo6 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
+
+void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
index 26a0a742965..af237f5d759 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
@@ -3,6 +3,10 @@
#include "riscv_vector.h"
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
void foo0 () {__rvv_bool64_t t;}
void foo1 () {__rvv_int8mf8_t t;}
void foo2 () {__rvv_uint8mf8_t t;}
@@ -10,11 +14,28 @@ void foo3 () {__rvv_int16mf4_t t;}
void foo4 () {__rvv_uint16mf4_t t;}
void foo5 () {__rvv_int32mf2_t t;}
void foo6 () {__rvv_uint32mf2_t t;}
-void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
-void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
-void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
-void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
-void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
-void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
-void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
-void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
+void foo7 () {__rvv_int64m1_t t;}
+void foo8 () {__rvv_uint64m1_t t;}
+void foo9 () {__rvv_int64m2_t t;}
+void foo10 () {__rvv_uint64m2_t t;}
+void foo11 () {__rvv_int64m4_t t;}
+void foo12 () {__rvv_uint64m4_t t;}
+void foo13 () {__rvv_int64m8_t t;}
+void foo14 () {__rvv_uint64m8_t t;}
+
+void new_foo0 (__rvv_bool64_t t) { }
+void new_foo1 (__rvv_int8mf8_t t) { }
+void new_foo2 (__rvv_uint8mf8_t t) { }
+void new_foo3 (__rvv_int16mf4_t t) { }
+void new_foo4 (__rvv_uint16mf4_t t) { }
+void new_foo5 (__rvv_int32mf2_t t) { }
+void new_foo6 (__rvv_uint32mf2_t t) { }
+
+void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
index eb66f3ea2bd..2779fbda053 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
@@ -10,11 +10,28 @@ void foo3 () {vint16mf4_t t;}
void foo4 () {vuint16mf4_t t;}
void foo5 () {vint32mf2_t t;}
void foo6 () {vuint32mf2_t t;}
-void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
-void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
-void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
-void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
-void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
-void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
-void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
-void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
+void foo7 () {vint64m1_t t;}
+void foo8 () {vuint64m1_t t;}
+void foo9 () {vint64m2_t t;}
+void foo10 () {vuint64m2_t t;}
+void foo11 () {vint64m4_t t;}
+void foo12 () {vuint64m4_t t;}
+void foo13 () {vint64m8_t t;}
+void foo14 () {vuint64m8_t t;}
+
+void new_foo0 (vbool64_t t) { }
+void new_foo1 (vint8mf8_t t) { }
+void new_foo2 (vuint8mf8_t t) { }
+void new_foo3 (vint16mf4_t t) { }
+void new_foo4 (vuint16mf4_t t) { }
+void new_foo5 (vint32mf2_t t) { }
+void new_foo6 (vuint32mf2_t t) { }
+
+void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
new file mode 100644
index 00000000000..3e6844475d5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+v,+zvfh")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
new file mode 100644
index 00000000000..df053073bc8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
@@ -0,0 +1,26 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve32x")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve32x")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
new file mode 100644
index 00000000000..51a91886f52
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
@@ -0,0 +1,33 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve32f")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve32f")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve32f")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
+
+vfloat32m1_t
+__attribute__((target("arch=+zve32f")))
+test_4 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
new file mode 100644
index 00000000000..994b1c0a5db
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
@@ -0,0 +1,33 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve64x")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve64x")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
+
+vint64m1_t
+__attribute__((target("arch=+zve64x")))
+test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
new file mode 100644
index 00000000000..caa2a10e943
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
@@ -0,0 +1,40 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve64f")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve64f")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve64f")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
+
+vint64m1_t
+__attribute__((target("arch=+zve64f")))
+test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
+
+vfloat32m1_t
+__attribute__((target("arch=+zve64f")))
+test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
new file mode 100644
index 00000000000..72a2be6e560
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
@@ -0,0 +1,47 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint8m1_t
+__attribute__((target("arch=+zve64d")))
+test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i8m1 (a, b, vl);
+}
+
+vint16m1_t
+__attribute__((target("arch=+zve64d")))
+test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i16m1 (a, b, vl);
+}
+
+vint32m1_t
+__attribute__((target("arch=+zve64d")))
+test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i32m1 (a, b, vl);
+}
+
+vint64m1_t
+__attribute__((target("arch=+zve64d")))
+test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
+
+vfloat32m1_t
+__attribute__((target("arch=+zve64d")))
+test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
+
+vfloat64m1_t
+__attribute__((target("arch=+zve64d")))
+test_6 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
new file mode 100644
index 00000000000..dabdcf8ff21
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+v,+zvfhmin")))
+test_1 (vfloat16mf2_t a, size_t vl)
+{
+ return __riscv_vfwcvt_f_f_v_f32m1 (a, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
new file mode 100644
index 00000000000..a064417169d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint64m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
new file mode 100644
index 00000000000..61d3fb25dc2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
new file mode 100644
index 00000000000..bfc26f8210a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
new file mode 100644
index 00000000000..35a2924234f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
new file mode 100644
index 00000000000..e3aef339d68
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint64m1_t
+__attribute__((target("arch=+zve32f")))
+test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
new file mode 100644
index 00000000000..b5a894ecad4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve32f")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
new file mode 100644
index 00000000000..7267fa3304b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve32f")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
new file mode 100644
index 00000000000..5a7c4481a5a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
new file mode 100644
index 00000000000..f1241cb1771
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
new file mode 100644
index 00000000000..2738a29d673
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
new file mode 100644
index 00000000000..8610000b474
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve64f")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
new file mode 100644
index 00000000000..7eaa6adab82
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve64f")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
new file mode 100644
index 00000000000..eb74e33299f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve64d")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
+
+/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
new file mode 100644
index 00000000000..f68b4622ee7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+v")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
new file mode 100644
index 00000000000..2f146cda2dd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint64m1_t
+__attribute__((target("arch=+v")))
+test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
new file mode 100644
index 00000000000..737b5b00d73
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+v")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
new file mode 100644
index 00000000000..559e90e87f4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zvfh")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
new file mode 100644
index 00000000000..91ee510c77b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint64m1_t
+__attribute__((target("arch=+v")))
+test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
new file mode 100644
index 00000000000..ec184cff5dc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vint64m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
+{
+ return __riscv_vadd_vv_i64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
new file mode 100644
index 00000000000..a37f67c5320
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve64d")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
new file mode 100644
index 00000000000..3d62027848e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zvfh")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
new file mode 100644
index 00000000000..9b8a9cbafcb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+v")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
new file mode 100644
index 00000000000..67469a18cd9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+zve64f")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
new file mode 100644
index 00000000000..ce89391e4e7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+v")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
new file mode 100644
index 00000000000..8836cb14703
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zvfh")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
new file mode 100644
index 00000000000..57e542da1b8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat16m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f16m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
new file mode 100644
index 00000000000..7fb6b20a32e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
new file mode 100644
index 00000000000..ce6f97d8584
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve32x")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
new file mode 100644
index 00000000000..dbf92a3df24
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat64m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f64m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
new file mode 100644
index 00000000000..6d2e4e27bf4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+zve64x")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
new file mode 100644
index 00000000000..94bbcb05e4d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vuint32m1_t
+__attribute__((target("arch=+zvbb")))
+test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
+{
+ return __riscv_vandn_vv_u32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
new file mode 100644
index 00000000000..054b7630fa9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vuint32m1_t
+__attribute__((target("arch=+zvknha")))
+test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl)
+{
+ return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
new file mode 100644
index 00000000000..b2e6658f4d3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vuint32m2_t
+__attribute__((target("arch=+zvksh")))
+test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl)
+{
+ return __riscv_vsm3me_vv_u32m2 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
new file mode 100644
index 00000000000..8574cd049cf
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vuint32m1_t
+__attribute__((target("arch=+zvkned")))
+test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
+{
+ return __riscv_vaesdm_vv_u32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
new file mode 100644
index 00000000000..e27b4d5fbb3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vuint32m1_t
+__attribute__((target("arch=+zvkg")))
+test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
+{
+ return __riscv_vgmul_vv_u32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
new file mode 100644
index 00000000000..2213c6fe35d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vuint32m2_t
+__attribute__((target("arch=+zvksed")))
+test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl)
+{
+ return __riscv_vsm4r_vv_u32m2 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
new file mode 100644
index 00000000000..66901cc72ad
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vuint32m1_t
+__attribute__((target("arch=+zvknhb")))
+test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl)
+{
+ return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
new file mode 100644
index 00000000000..0764f403b89
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
@@ -0,0 +1,12 @@
+/* Test that we do not have error when compile */
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+vfloat32m1_t
+__attribute__((target("arch=+v")))
+test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
+{
+ return __riscv_vfadd_vv_f32m1 (a, b, vl);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
index fdc28c77426..6bb9460d6d2 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
@@ -193,14 +193,31 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
-void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
-void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
-void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
-void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
-void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
-void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
-void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
-void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
-void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
-void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
-void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
+
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
+void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
+void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
+void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
+void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
+void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
+void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
+void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
+void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
+void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
+void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
+
+void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
index 332ff7627b6..2f2c150eeb0 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
@@ -3,20 +3,20 @@
#include "riscv_vector.h"
-void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */
-void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */
-void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */
-void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */
-void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */
-void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */
-void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */
-void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */
-void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */
-void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */
-void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */
-void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */
-void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */
-void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */
+void f_vint8mf8x2_t () {vint8mf8x2_t t;}
+void f_vuint8mf8x2_t () {vuint8mf8x2_t t;}
+void f_vint8mf8x3_t () {vint8mf8x3_t t;}
+void f_vuint8mf8x3_t () {vuint8mf8x3_t t;}
+void f_vint8mf8x4_t () {vint8mf8x4_t t;}
+void f_vuint8mf8x4_t () {vuint8mf8x4_t t;}
+void f_vint8mf8x5_t () {vint8mf8x5_t t;}
+void f_vuint8mf8x5_t () {vuint8mf8x5_t t;}
+void f_vint8mf8x6_t () {vint8mf8x6_t t;}
+void f_vuint8mf8x6_t () {vuint8mf8x6_t t;}
+void f_vint8mf8x7_t () {vint8mf8x7_t t;}
+void f_vuint8mf8x7_t () {vuint8mf8x7_t t;}
+void f_vint8mf8x8_t () {vint8mf8x8_t t;}
+void f_vuint8mf8x8_t () {vuint8mf8x8_t t;}
void f_vint8mf4x2_t () {vint8mf4x2_t t;}
void f_vuint8mf4x2_t () {vuint8mf4x2_t t;}
void f_vint8mf4x3_t () {vint8mf4x3_t t;}
@@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;}
void f_vuint8m2x4_t () {vuint8m2x4_t t;}
void f_vint8m4x2_t () {vint8m4x2_t t;}
void f_vuint8m4x2_t () {vuint8m4x2_t t;}
-void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */
-void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */
-void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */
-void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */
-void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */
-void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */
-void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */
-void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */
-void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */
-void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */
-void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */
-void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */
-void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */
-void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */
+void f_vint16mf4x2_t () {vint16mf4x2_t t;}
+void f_vuint16mf4x2_t () {vuint16mf4x2_t t;}
+void f_vint16mf4x3_t () {vint16mf4x3_t t;}
+void f_vuint16mf4x3_t () {vuint16mf4x3_t t;}
+void f_vint16mf4x4_t () {vint16mf4x4_t t;}
+void f_vuint16mf4x4_t () {vuint16mf4x4_t t;}
+void f_vint16mf4x5_t () {vint16mf4x5_t t;}
+void f_vuint16mf4x5_t () {vuint16mf4x5_t t;}
+void f_vint16mf4x6_t () {vint16mf4x6_t t;}
+void f_vuint16mf4x6_t () {vuint16mf4x6_t t;}
+void f_vint16mf4x7_t () {vint16mf4x7_t t;}
+void f_vuint16mf4x7_t () {vuint16mf4x7_t t;}
+void f_vint16mf4x8_t () {vint16mf4x8_t t;}
+void f_vuint16mf4x8_t () {vuint16mf4x8_t t;}
void f_vint16mf2x2_t () {vint16mf2x2_t t;}
void f_vuint16mf2x2_t () {vuint16mf2x2_t t;}
void f_vint16mf2x3_t () {vint16mf2x3_t t;}
@@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;}
void f_vuint16m2x4_t () {vuint16m2x4_t t;}
void f_vint16m4x2_t () {vint16m4x2_t t;}
void f_vuint16m4x2_t () {vuint16m4x2_t t;}
-void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */
-void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */
-void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */
-void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */
-void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */
-void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */
-void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */
-void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */
-void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */
-void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */
-void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */
-void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */
-void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */
-void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */
+void f_vint32mf2x2_t () {vint32mf2x2_t t;}
+void f_vuint32mf2x2_t () {vuint32mf2x2_t t;}
+void f_vint32mf2x3_t () {vint32mf2x3_t t;}
+void f_vuint32mf2x3_t () {vuint32mf2x3_t t;}
+void f_vint32mf2x4_t () {vint32mf2x4_t t;}
+void f_vuint32mf2x4_t () {vuint32mf2x4_t t;}
+void f_vint32mf2x5_t () {vint32mf2x5_t t;}
+void f_vuint32mf2x5_t () {vuint32mf2x5_t t;}
+void f_vint32mf2x6_t () {vint32mf2x6_t t;}
+void f_vuint32mf2x6_t () {vuint32mf2x6_t t;}
+void f_vint32mf2x7_t () {vint32mf2x7_t t;}
+void f_vuint32mf2x7_t () {vuint32mf2x7_t t;}
+void f_vint32mf2x8_t () {vint32mf2x8_t t;}
+void f_vuint32mf2x8_t () {vuint32mf2x8_t t;}
void f_vint32m1x2_t () {vint32m1x2_t t;}
void f_vuint32m1x2_t () {vuint32m1x2_t t;}
void f_vint32m1x3_t () {vint32m1x3_t t;}
@@ -153,54 +153,143 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
void f_vuint32m2x4_t () {vuint32m2x4_t t;}
void f_vint32m4x2_t () {vint32m4x2_t t;}
void f_vuint32m4x2_t () {vuint32m4x2_t t;}
-void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
-void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
-void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
-void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
-void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
-void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
-void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
-void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
-void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
-void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
-void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
-void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
-void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
-void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
-void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
-void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
-void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
-void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
-void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
-void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
-void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
-void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
-void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
-void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
-void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
-void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
-void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
-void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
-void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
-void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
-void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
-void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
-void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
-void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
-void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
-void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
-void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
-void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
-void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
-void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
-void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
-void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
-void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
-void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
-void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
-void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
-void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
-void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
-void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
-void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
-void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
+
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void f_vint64m1x2_t () {vint64m1x2_t t;}
+void f_vuint64m1x2_t () {vuint64m1x2_t t;}
+void f_vint64m1x3_t () {vint64m1x3_t t;}
+void f_vuint64m1x3_t () {vuint64m1x3_t t;}
+void f_vint64m1x4_t () {vint64m1x4_t t;}
+void f_vuint64m1x4_t () {vuint64m1x4_t t;}
+void f_vint64m1x5_t () {vint64m1x5_t t;}
+void f_vuint64m1x5_t () {vuint64m1x5_t t;}
+void f_vint64m1x6_t () {vint64m1x6_t t;}
+void f_vuint64m1x6_t () {vuint64m1x6_t t;}
+void f_vint64m1x7_t () {vint64m1x7_t t;}
+void f_vuint64m1x7_t () {vuint64m1x7_t t;}
+void f_vint64m1x8_t () {vint64m1x8_t t;}
+void f_vuint64m1x8_t () {vuint64m1x8_t t;}
+void f_vint64m2x2_t () {vint64m2x2_t t;}
+void f_vuint64m2x2_t () {vuint64m2x2_t t;}
+void f_vint64m2x3_t () {vint64m2x3_t t;}
+void f_vuint64m2x3_t () {vuint64m2x3_t t;}
+void f_vint64m2x4_t () {vint64m2x4_t t;}
+void f_vuint64m2x4_t () {vuint64m2x4_t t;}
+void f_vint64m4x2_t () {vint64m4x2_t t;}
+void f_vuint64m4x2_t () {vuint64m4x2_t t;}
+void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
+void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
+void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
+void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
+void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
+void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
+void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
+void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
+void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
+void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
+void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
+void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
+void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
+void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
+void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
+void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
+void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
+void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
+void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
+void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
+void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
+void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
+void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
+void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
+void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
+void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
+void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
+void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
+void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
+
+void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
+
+void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+
+void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+
+void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+
+void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
index ed180749cb6..967eeece274 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
@@ -153,54 +153,108 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
void f_vuint32m2x4_t () {vuint32m2x4_t t;}
void f_vint32m4x2_t () {vint32m4x2_t t;}
void f_vuint32m4x2_t () {vuint32m4x2_t t;}
-void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
-void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
-void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
-void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
-void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
-void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
-void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
-void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
-void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
-void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
-void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
-void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
-void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
-void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
-void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
-void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
-void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
-void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
-void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
-void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
-void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
-void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
-void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
-void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
-void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
-void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
-void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
-void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
-void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
-void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
-void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
-void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
-void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
-void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
-void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
-void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
-void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
-void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
-void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
-void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
-void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
-void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
-void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
-void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
-void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
-void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
-void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
-void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
-void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
-void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
-void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
+void f_vint64m1x2_t () {vint64m1x2_t t;}
+void f_vuint64m1x2_t () {vuint64m1x2_t t;}
+void f_vint64m1x3_t () {vint64m1x3_t t;}
+void f_vuint64m1x3_t () {vuint64m1x3_t t;}
+void f_vint64m1x4_t () {vint64m1x4_t t;}
+void f_vuint64m1x4_t () {vuint64m1x4_t t;}
+void f_vint64m1x5_t () {vint64m1x5_t t;}
+void f_vuint64m1x5_t () {vuint64m1x5_t t;}
+void f_vint64m1x6_t () {vint64m1x6_t t;}
+void f_vuint64m1x6_t () {vuint64m1x6_t t;}
+void f_vint64m1x7_t () {vint64m1x7_t t;}
+void f_vuint64m1x7_t () {vuint64m1x7_t t;}
+void f_vint64m1x8_t () {vint64m1x8_t t;}
+void f_vuint64m1x8_t () {vuint64m1x8_t t;}
+void f_vint64m2x2_t () {vint64m2x2_t t;}
+void f_vuint64m2x2_t () {vuint64m2x2_t t;}
+void f_vint64m2x3_t () {vint64m2x3_t t;}
+void f_vuint64m2x3_t () {vuint64m2x3_t t;}
+void f_vint64m2x4_t () {vint64m2x4_t t;}
+void f_vuint64m2x4_t () {vuint64m2x4_t t;}
+void f_vint64m4x2_t () {vint64m4x2_t t;}
+void f_vuint64m4x2_t () {vuint64m4x2_t t;}
+void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
+void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
+void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
+void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
+void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
+void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
+void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
+void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
+void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
+void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
+void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
+void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
+void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
+void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
+void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
+void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
+void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
+void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
+void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
+void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
+void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
+void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
+void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
+void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
+void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
+void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
+void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
+void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
+void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
+
+void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+
+void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+
+void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
index 70e0989b6e1..b868f314163 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
@@ -3,20 +3,20 @@
#include "riscv_vector.h"
-void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */
-void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */
-void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */
-void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */
-void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */
-void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */
-void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */
-void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */
-void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */
-void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */
-void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */
-void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */
-void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */
-void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */
+void f_vint8mf8x2_t () {vint8mf8x2_t t;}
+void f_vuint8mf8x2_t () {vuint8mf8x2_t t;}
+void f_vint8mf8x3_t () {vint8mf8x3_t t;}
+void f_vuint8mf8x3_t () {vuint8mf8x3_t t;}
+void f_vint8mf8x4_t () {vint8mf8x4_t t;}
+void f_vuint8mf8x4_t () {vuint8mf8x4_t t;}
+void f_vint8mf8x5_t () {vint8mf8x5_t t;}
+void f_vuint8mf8x5_t () {vuint8mf8x5_t t;}
+void f_vint8mf8x6_t () {vint8mf8x6_t t;}
+void f_vuint8mf8x6_t () {vuint8mf8x6_t t;}
+void f_vint8mf8x7_t () {vint8mf8x7_t t;}
+void f_vuint8mf8x7_t () {vuint8mf8x7_t t;}
+void f_vint8mf8x8_t () {vint8mf8x8_t t;}
+void f_vuint8mf8x8_t () {vuint8mf8x8_t t;}
void f_vint8mf4x2_t () {vint8mf4x2_t t;}
void f_vuint8mf4x2_t () {vuint8mf4x2_t t;}
void f_vint8mf4x3_t () {vint8mf4x3_t t;}
@@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;}
void f_vuint8m2x4_t () {vuint8m2x4_t t;}
void f_vint8m4x2_t () {vint8m4x2_t t;}
void f_vuint8m4x2_t () {vuint8m4x2_t t;}
-void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */
-void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */
-void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */
-void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */
-void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */
-void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */
-void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */
-void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */
-void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */
-void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */
-void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */
-void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */
-void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */
-void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */
+void f_vint16mf4x2_t () {vint16mf4x2_t t;}
+void f_vuint16mf4x2_t () {vuint16mf4x2_t t;}
+void f_vint16mf4x3_t () {vint16mf4x3_t t;}
+void f_vuint16mf4x3_t () {vuint16mf4x3_t t;}
+void f_vint16mf4x4_t () {vint16mf4x4_t t;}
+void f_vuint16mf4x4_t () {vuint16mf4x4_t t;}
+void f_vint16mf4x5_t () {vint16mf4x5_t t;}
+void f_vuint16mf4x5_t () {vuint16mf4x5_t t;}
+void f_vint16mf4x6_t () {vint16mf4x6_t t;}
+void f_vuint16mf4x6_t () {vuint16mf4x6_t t;}
+void f_vint16mf4x7_t () {vint16mf4x7_t t;}
+void f_vuint16mf4x7_t () {vuint16mf4x7_t t;}
+void f_vint16mf4x8_t () {vint16mf4x8_t t;}
+void f_vuint16mf4x8_t () {vuint16mf4x8_t t;}
void f_vint16mf2x2_t () {vint16mf2x2_t t;}
void f_vuint16mf2x2_t () {vuint16mf2x2_t t;}
void f_vint16mf2x3_t () {vint16mf2x3_t t;}
@@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;}
void f_vuint16m2x4_t () {vuint16m2x4_t t;}
void f_vint16m4x2_t () {vint16m4x2_t t;}
void f_vuint16m4x2_t () {vuint16m4x2_t t;}
-void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */
-void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */
-void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */
-void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */
-void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */
-void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */
-void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */
-void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */
-void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */
-void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */
-void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */
-void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */
-void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */
-void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */
+void f_vint32mf2x2_t () {vint32mf2x2_t t;}
+void f_vuint32mf2x2_t () {vuint32mf2x2_t t;}
+void f_vint32mf2x3_t () {vint32mf2x3_t t;}
+void f_vuint32mf2x3_t () {vuint32mf2x3_t t;}
+void f_vint32mf2x4_t () {vint32mf2x4_t t;}
+void f_vuint32mf2x4_t () {vuint32mf2x4_t t;}
+void f_vint32mf2x5_t () {vint32mf2x5_t t;}
+void f_vuint32mf2x5_t () {vuint32mf2x5_t t;}
+void f_vint32mf2x6_t () {vint32mf2x6_t t;}
+void f_vuint32mf2x6_t () {vuint32mf2x6_t t;}
+void f_vint32mf2x7_t () {vint32mf2x7_t t;}
+void f_vuint32mf2x7_t () {vuint32mf2x7_t t;}
+void f_vint32mf2x8_t () {vint32mf2x8_t t;}
+void f_vuint32mf2x8_t () {vuint32mf2x8_t t;}
void f_vint32m1x2_t () {vint32m1x2_t t;}
void f_vuint32m1x2_t () {vuint32m1x2_t t;}
void f_vint32m1x3_t () {vint32m1x3_t t;}
@@ -153,35 +153,35 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
void f_vuint32m2x4_t () {vuint32m2x4_t t;}
void f_vint32m4x2_t () {vint32m4x2_t t;}
void f_vuint32m4x2_t () {vuint32m4x2_t t;}
-void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
-void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
-void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
-void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
-void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
-void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
-void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
-void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
-void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
-void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
-void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
-void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
-void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
-void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
-void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
-void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
-void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
-void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
-void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
-void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
-void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
-void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
-void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
-void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
-void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
-void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
-void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
-void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
-void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
+void f_vint64m1x2_t () {vint64m1x2_t t;}
+void f_vuint64m1x2_t () {vuint64m1x2_t t;}
+void f_vint64m1x3_t () {vint64m1x3_t t;}
+void f_vuint64m1x3_t () {vuint64m1x3_t t;}
+void f_vint64m1x4_t () {vint64m1x4_t t;}
+void f_vuint64m1x4_t () {vuint64m1x4_t t;}
+void f_vint64m1x5_t () {vint64m1x5_t t;}
+void f_vuint64m1x5_t () {vuint64m1x5_t t;}
+void f_vint64m1x6_t () {vint64m1x6_t t;}
+void f_vuint64m1x6_t () {vuint64m1x6_t t;}
+void f_vint64m1x7_t () {vint64m1x7_t t;}
+void f_vuint64m1x7_t () {vuint64m1x7_t t;}
+void f_vint64m1x8_t () {vint64m1x8_t t;}
+void f_vuint64m1x8_t () {vuint64m1x8_t t;}
+void f_vint64m2x2_t () {vint64m2x2_t t;}
+void f_vuint64m2x2_t () {vuint64m2x2_t t;}
+void f_vint64m2x3_t () {vint64m2x3_t t;}
+void f_vuint64m2x3_t () {vuint64m2x3_t t;}
+void f_vint64m2x4_t () {vint64m2x4_t t;}
+void f_vuint64m2x4_t () {vuint64m2x4_t t;}
+void f_vint64m4x2_t () {vint64m4x2_t t;}
+void f_vuint64m4x2_t () {vuint64m4x2_t t;}
+void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
+void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
+void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
+void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
+void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
+void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
+void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
@@ -193,14 +193,107 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
-void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
-void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
-void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
-void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
-void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
-void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
-void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
-void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
-void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
-void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
-void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
+
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
+void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
+void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
+void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
+void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
+void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
+void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
+void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
+void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
+void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
+void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
+
+void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
+
+void new_f_vint16mf4x2_t (vint16mf4x2_t t) { } /* { dg-error {argument type 'vint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint16mf4x2_t (vuint16mf4x2_t t) { } /* { dg-error {argument type 'vuint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint16mf4x3_t (vint16mf4x3_t t) { } /* { dg-error {argument type 'vint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint16mf4x3_t (vuint16mf4x3_t t) { } /* { dg-error {argument type 'vuint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint16mf4x4_t (vint16mf4x4_t t) { } /* { dg-error {argument type 'vint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint16mf4x4_t (vuint16mf4x4_t t) { } /* { dg-error {argument type 'vuint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint16mf4x5_t (vint16mf4x5_t t) { } /* { dg-error {argument type 'vint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint16mf4x5_t (vuint16mf4x5_t t) { } /* { dg-error {argument type 'vuint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint16mf4x6_t (vint16mf4x6_t t) { } /* { dg-error {argument type 'vint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint16mf4x6_t (vuint16mf4x6_t t) { } /* { dg-error {argument type 'vuint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint16mf4x7_t (vint16mf4x7_t t) { } /* { dg-error {argument type 'vint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint16mf4x7_t (vuint16mf4x7_t t) { } /* { dg-error {argument type 'vuint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint16mf4x8_t (vint16mf4x8_t t) { } /* { dg-error {argument type 'vint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint16mf4x8_t (vuint16mf4x8_t t) { } /* { dg-error {argument type 'vuint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */
+
+void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
+
+void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+
+void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
+void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
+
+void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
index 2a615f80816..094b7efdef4 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
@@ -153,28 +153,28 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
void f_vuint32m2x4_t () {vuint32m2x4_t t;}
void f_vint32m4x2_t () {vint32m4x2_t t;}
void f_vuint32m4x2_t () {vuint32m4x2_t t;}
-void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
-void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
-void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
-void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
-void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
-void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
-void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
-void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
-void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
-void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
-void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
-void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
-void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
-void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
-void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
-void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
-void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
-void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
-void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
-void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
-void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
-void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
+void f_vint64m1x2_t () {vint64m1x2_t t;}
+void f_vuint64m1x2_t () {vuint64m1x2_t t;}
+void f_vint64m1x3_t () {vint64m1x3_t t;}
+void f_vuint64m1x3_t () {vuint64m1x3_t t;}
+void f_vint64m1x4_t () {vint64m1x4_t t;}
+void f_vuint64m1x4_t () {vuint64m1x4_t t;}
+void f_vint64m1x5_t () {vint64m1x5_t t;}
+void f_vuint64m1x5_t () {vuint64m1x5_t t;}
+void f_vint64m1x6_t () {vint64m1x6_t t;}
+void f_vuint64m1x6_t () {vuint64m1x6_t t;}
+void f_vint64m1x7_t () {vint64m1x7_t t;}
+void f_vuint64m1x7_t () {vuint64m1x7_t t;}
+void f_vint64m1x8_t () {vint64m1x8_t t;}
+void f_vuint64m1x8_t () {vuint64m1x8_t t;}
+void f_vint64m2x2_t () {vint64m2x2_t t;}
+void f_vuint64m2x2_t () {vuint64m2x2_t t;}
+void f_vint64m2x3_t () {vint64m2x3_t t;}
+void f_vuint64m2x3_t () {vuint64m2x3_t t;}
+void f_vint64m2x4_t () {vint64m2x4_t t;}
+void f_vuint64m2x4_t () {vuint64m2x4_t t;}
+void f_vint64m4x2_t () {vint64m4x2_t t;}
+void f_vuint64m4x2_t () {vuint64m4x2_t t;}
void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
@@ -193,14 +193,54 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
-void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
-void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
-void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
-void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
-void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
-void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
-void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
-void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
-void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
-void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
-void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
+
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
+void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
+void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
+void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
+void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
+void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
+void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
+void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
+void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
+void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
+void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
+
+void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+
+void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
+void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
index 92f4ee02d20..6e08f522d9f 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
@@ -54,12 +54,27 @@ void foo47 () {vint64m4_t t;}
void foo48 () {vuint64m4_t t;}
void foo49 () {vint64m8_t t;}
void foo50 () {vuint64m8_t t;}
-void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
-void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */
-void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */
-void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */
-void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */
-void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
-void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
-void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
-void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
+
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void foo57 () {vfloat32mf2_t t;}
+void foo58 () {vfloat32m1_t t;}
+void foo59 () {vfloat32m2_t t;}
+void foo60 () {vfloat32m4_t t;}
+void foo61 () {vfloat32m8_t t;}
+void foo62 () {vfloat64m1_t t;}
+void foo63 () {vfloat64m2_t t;}
+void foo64 () {vfloat64m4_t t;}
+void foo65 () {vfloat64m8_t t;}
+
+void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
+void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
+void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
+void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
index 3a425721863..4fb40233509 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
@@ -59,7 +59,17 @@ void foo58 () {vfloat32m1_t t;}
void foo59 () {vfloat32m2_t t;}
void foo60 () {vfloat32m4_t t;}
void foo61 () {vfloat32m8_t t;}
-void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
-void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
-void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
-void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
+
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void foo62 () {vfloat64m1_t t;}
+void foo63 () {vfloat64m2_t t;}
+void foo64 () {vfloat64m4_t t;}
+void foo65 () {vfloat64m8_t t;}
+
+void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
+void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
+void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
+void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
index de850e5e10d..28b3ae708f5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
@@ -3,15 +3,15 @@
#include "riscv_vector.h"
-void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
+void foo0 () {vbool64_t t;}
void foo1 () {vbool32_t t;}
void foo2 () {vbool16_t t;}
void foo3 () {vbool8_t t;}
void foo4 () {vbool4_t t;}
void foo5 () {vbool2_t t;}
void foo6 () {vbool1_t t;}
-void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
-void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
+void foo7 () {vint8mf8_t t;}
+void foo8 () {vuint8mf8_t t;}
void foo9 () {vint8mf4_t t;}
void foo10 () {vuint8mf4_t t;}
void foo11 () {vint8mf2_t t;}
@@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;}
void foo18 () {vuint8m4_t t;}
void foo19 () {vint8m8_t t;}
void foo20 () {vuint8m8_t t;}
-void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
-void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
+void foo21 () {vint16mf4_t t;}
+void foo22 () {vuint16mf4_t t;}
void foo23 () {vint16mf2_t t;}
void foo24 () {vuint16mf2_t t;}
void foo25 () {vint16m1_t t;}
@@ -36,8 +36,8 @@ void foo29 () {vint16m4_t t;}
void foo30 () {vuint16m4_t t;}
void foo31 () {vint16m8_t t;}
void foo32 () {vuint16m8_t t;}
-void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
-void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
+void foo33 () {vint32mf2_t t;}
+void foo34 () {vuint32mf2_t t;}
void foo35 () {vint32m1_t t;}
void foo36 () {vuint32m1_t t;}
void foo37 () {vint32m2_t t;}
@@ -46,20 +46,50 @@ void foo39 () {vint32m4_t t;}
void foo40 () {vuint32m4_t t;}
void foo41 () {vint32m8_t t;}
void foo42 () {vuint32m8_t t;}
-void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
-void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
-void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
-void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
-void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
-void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
-void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
-void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
-void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
-void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */
-void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */
-void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */
-void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */
-void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
-void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
-void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
-void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
+void foo43 () {vint64m1_t t;}
+void foo44 () {vuint64m1_t t;}
+void foo45 () {vint64m2_t t;}
+void foo46 () {vuint64m2_t t;}
+void foo47 () {vint64m4_t t;}
+void foo48 () {vuint64m4_t t;}
+void foo49 () {vint64m8_t t;}
+void foo50 () {vuint64m8_t t;}
+
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void foo57 () {vfloat32mf2_t t;}
+void foo58 () {vfloat32m1_t t;}
+void foo59 () {vfloat32m2_t t;}
+void foo60 () {vfloat32m4_t t;}
+void foo61 () {vfloat32m8_t t;}
+void foo62 () {vfloat64m1_t t;}
+void foo63 () {vfloat64m2_t t;}
+void foo64 () {vfloat64m4_t t;}
+void foo65 () {vfloat64m8_t t;}
+
+void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo33 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
+void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
+void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
+void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
index 1d79b6b8eac..e48ee391992 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
@@ -3,15 +3,15 @@
#include "riscv_vector.h"
-void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
+void foo0 () {vbool64_t t;}
void foo1 () {vbool32_t t;}
void foo2 () {vbool16_t t;}
void foo3 () {vbool8_t t;}
void foo4 () {vbool4_t t;}
void foo5 () {vbool2_t t;}
void foo6 () {vbool1_t t;}
-void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
-void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
+void foo7 () {vint8mf8_t t;}
+void foo8 () {vuint8mf8_t t;}
void foo9 () {vint8mf4_t t;}
void foo10 () {vuint8mf4_t t;}
void foo11 () {vint8mf2_t t;}
@@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;}
void foo18 () {vuint8m4_t t;}
void foo19 () {vint8m8_t t;}
void foo20 () {vuint8m8_t t;}
-void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
-void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
+void foo21 () {vint16mf4_t t;}
+void foo22 () {vuint16mf4_t t;}
void foo23 () {vint16mf2_t t;}
void foo24 () {vuint16mf2_t t;}
void foo25 () {vint16m1_t t;}
@@ -36,8 +36,13 @@ void foo29 () {vint16m4_t t;}
void foo30 () {vuint16m4_t t;}
void foo31 () {vint16m8_t t;}
void foo32 () {vuint16m8_t t;}
-void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
-void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
+
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void foo33 () {vint32mf2_t t;}
+void foo34 () {vuint32mf2_t t;}
void foo35 () {vint32m1_t t;}
void foo36 () {vuint32m1_t t;}
void foo37 () {vint32m2_t t;}
@@ -46,20 +51,41 @@ void foo39 () {vint32m4_t t;}
void foo40 () {vuint32m4_t t;}
void foo41 () {vint32m8_t t;}
void foo42 () {vuint32m8_t t;}
-void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
-void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
-void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
-void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
-void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
-void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
-void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
-void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
-void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
+void foo43 () {vint64m1_t t;}
+void foo44 () {vuint64m1_t t;}
+void foo45 () {vint64m2_t t;}
+void foo46 () {vuint64m2_t t;}
+void foo47 () {vint64m4_t t;}
+void foo48 () {vuint64m4_t t;}
+void foo49 () {vint64m8_t t;}
+void foo50 () {vuint64m8_t t;}
+void foo57 () {vfloat32mf2_t t;}
void foo58 () {vfloat32m1_t t;}
void foo59 () {vfloat32m2_t t;}
void foo60 () {vfloat32m4_t t;}
void foo61 () {vfloat32m8_t t;}
-void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
-void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
-void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
-void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
+void foo62 () {vfloat64m1_t t;}
+void foo63 () {vfloat64m2_t t;}
+void foo64 () {vfloat64m4_t t;}
+void foo65 () {vfloat64m8_t t;}
+
+void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32'} } */
+void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo33 (vint32mf2_t t) {} /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
+void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the minimal vector length '64' but '32' is given} } */
+void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
+void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
+void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
+void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
index 98a7d391d4e..57ede32a400 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
@@ -175,32 +175,67 @@ void f_vint64m2x4_t () {vint64m2x4_t t;}
void f_vuint64m2x4_t () {vuint64m2x4_t t;}
void f_vint64m4x2_t () {vint64m4x2_t t;}
void f_vuint64m4x2_t () {vuint64m4x2_t t;}
-void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
-void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
-void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
-void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
-void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
-void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
-void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
-void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
-void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
-void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
-void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
-void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
-void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
-void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
-void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
-void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
-void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
-void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
-void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
-void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
-void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
-void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
-void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
-void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
-void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
-void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
-void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
-void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
-void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
+
+/* To support target attribute, the vfloat*m*x*_t need to be registered
+ in advance. We add type and args/return value check during the
+ set current function but cannot cover below cases. It is the same
+ behavior compared to aarch64 sve. */
+void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
+void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
+void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
+void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
+void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
+void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
+void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
+void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
+void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
+void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
+void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
+void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
+void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
+void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
+void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
+void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
+void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
+void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
+void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
+void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
+void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
+void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
+void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
+void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
+void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
+void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
+void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
+void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
+void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
+
+void f_arg_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
+void f_arg_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
+void f_arg_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
--
2.34.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] RISC-V: Allow RVV intrinsic for more function target
2024-04-02 14:26 ` [PATCH v2] " pan2.li
@ 2024-04-08 1:23 ` Kito Cheng
2024-04-08 1:30 ` Li, Pan2
0 siblings, 1 reply; 13+ messages in thread
From: Kito Cheng @ 2024-04-08 1:23 UTC (permalink / raw)
To: pan2.li; +Cc: gcc-patches, juzhe.zhong, yanzhang.wang
LGTM :)
On Tue, Apr 2, 2024 at 10:28 PM <pan2.li@intel.com> wrote:
>
> From: Pan Li <pan2.li@intel.com>
>
> In previous, we allowed the target(("arch=+v")) for a function with
> rv64gc build. This patch would like to support more arch options as
> below:
> * zve32x
> * zve32f
> * zve64x
> * zve64f
> * zve64d
> * zvfhmin
> * zvfh
> * zvk*
> * zvbb
>
> For example, we have sample code as below.
> vfloat32m1_t
> __attribute__((target("arch=+zve64f")))
> test_9 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> {
> return __riscv_vfadd_vv_f32m1 (a, b, vl);
> }
>
> It will generate the asm code when build with -O3 -march=rv64gc
> test_9:
> vsetvli zero,a0,e32,m1,ta,ma
> vfadd.vv v8,v8,v9
> ret
>
> Meanwhile, this patch introduces more error handling for the target
> attribute. Take arch=+zve32x with vfloat32m1_t will have error message
> "'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension".
> And take arch=+zve32f with vfloat16m1_t will have error message
> "'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension".
>
> By default, all the RVV types includes the cmdline march will be
> registered when include the riscv_vector.h. And we have sorts of check
> during args and return types.
>
> Below test are passed for this patch:
> * The riscv fully regression test.
>
> gcc/ChangeLog:
>
> * config/riscv/riscv-c.cc (struct pragma_intrinsic_flags): New
> struct to hold all intrinisc related flags.
> (riscv_pragma_intrinsic_flags_pollute): New func to pollute
> the intrinsic flags and backup original flags.
> (riscv_pragma_intrinsic_flags_restore): New func to restore
> the flags from the backup intrinsic flags.
> (riscv_pragma_intrinsic): Pollute the flags and register all
> possible builtin types and functions, then restore and reinit.
> * config/riscv/riscv-protos.h (reinit_builtins): New func
> decl to reinit after flags pollution.
> (riscv_option_override): New extern func decl.
> * config/riscv/riscv-vector-builtins.cc (register_builtin_types_on_null):
> New func to register builtin types if null.
> (DEF_RVV_TYPE): Ditto.
> (DEF_RVV_TUPLE_TYPE): Ditto.
> (reinit_builtins): New func impl to reinit after flags pollution.
> * config/riscv/riscv-vector-builtins.cc (expand_builtin): Return
> target rtx after error_at.
> * config/riscv/riscv.cc (riscv_vector_int_type_p): New predicate
> func to tell one tree type is integer or not.
> (riscv_vector_float_type_p): New predicate func to tell one tree
> type is float or not.
> (riscv_vector_element_bitsize): New func to get the element bitsize
> of a vector tree type.
> (riscv_vector_required_min_vlen): New func to get the required min vlen
> of a vector tree type.
> (riscv_validate_vector_type): New func to validate the tree type
> is valid on flags.
> (riscv_return_value_is_vector_type_p): Leverage the func
> riscv_validate_vector_type to do the tree type validation.
> (riscv_arguments_is_vector_type_p): Ditto.
> (riscv_override_options_internal): Ditto.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.target/riscv/rvv/base/pr109479-1.c: Adjust the existing test
> scenarios and add new error check tests.
> * gcc.target/riscv/rvv/base/pr109479-2.c: Ditto.
> * gcc.target/riscv/rvv/base/pr109479-3.c: Ditto.
> * gcc.target/riscv/rvv/base/pr109479-4.c: Diito.
> * gcc.target/riscv/rvv/base/pr109479-5.c: Diito.
> * gcc.target/riscv/rvv/base/pr109479-6.c: Diito.
> * gcc.target/riscv/rvv/base/user-10.c: Ditto.
> * gcc.target/riscv/rvv/base/user-12.c: Ditto.
> * gcc.target/riscv/rvv/base/user-13.c: Ditto.
> * gcc.target/riscv/rvv/base/user-14.c: Ditto.
> * gcc.target/riscv/rvv/base/user-15.c: Ditto.
> * gcc.target/riscv/rvv/base/user-2.c: Ditto.
> * gcc.target/riscv/rvv/base/user-3.c: Ditto.
> * gcc.target/riscv/rvv/base/user-5.c: Ditto.
> * gcc.target/riscv/rvv/base/user-6.c: Ditto.
> * gcc.target/riscv/rvv/base/user-9.c: Ditto.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c: New test.
>
> Signed-off-by: Pan Li <pan2.li@intel.com>
> ---
> gcc/config/riscv/riscv-c.cc | 94 +++++-
> gcc/config/riscv/riscv-protos.h | 2 +
> gcc/config/riscv/riscv-vector-builtins.cc | 53 +++-
> gcc/config/riscv/riscv.cc | 157 +++++++++-
> .../gcc.target/riscv/rvv/base/pr109479-1.c | 29 +-
> .../gcc.target/riscv/rvv/base/pr109479-2.c | 29 +-
> .../gcc.target/riscv/rvv/base/pr109479-3.c | 50 +++-
> .../gcc.target/riscv/rvv/base/pr109479-4.c | 51 +++-
> .../gcc.target/riscv/rvv/base/pr109479-5.c | 37 ++-
> .../gcc.target/riscv/rvv/base/pr109479-6.c | 33 ++-
> .../target_attribute_v_with_intrinsic-10.c | 12 +
> .../target_attribute_v_with_intrinsic-11.c | 26 ++
> .../target_attribute_v_with_intrinsic-12.c | 33 +++
> .../target_attribute_v_with_intrinsic-13.c | 33 +++
> .../target_attribute_v_with_intrinsic-14.c | 40 +++
> .../target_attribute_v_with_intrinsic-15.c | 47 +++
> .../target_attribute_v_with_intrinsic-16.c | 12 +
> .../target_attribute_v_with_intrinsic-17.c | 13 +
> .../target_attribute_v_with_intrinsic-18.c | 13 +
> .../target_attribute_v_with_intrinsic-19.c | 13 +
> .../target_attribute_v_with_intrinsic-20.c | 13 +
> .../target_attribute_v_with_intrinsic-21.c | 13 +
> .../target_attribute_v_with_intrinsic-22.c | 13 +
> .../target_attribute_v_with_intrinsic-23.c | 13 +
> .../target_attribute_v_with_intrinsic-24.c | 13 +
> .../target_attribute_v_with_intrinsic-25.c | 13 +
> .../target_attribute_v_with_intrinsic-26.c | 13 +
> .../target_attribute_v_with_intrinsic-27.c | 13 +
> .../target_attribute_v_with_intrinsic-28.c | 13 +
> .../target_attribute_v_with_intrinsic-29.c | 13 +
> .../target_attribute_v_with_intrinsic-30.c | 12 +
> .../target_attribute_v_with_intrinsic-31.c | 12 +
> .../target_attribute_v_with_intrinsic-32.c | 12 +
> .../target_attribute_v_with_intrinsic-33.c | 12 +
> .../target_attribute_v_with_intrinsic-34.c | 12 +
> .../target_attribute_v_with_intrinsic-35.c | 12 +
> .../target_attribute_v_with_intrinsic-36.c | 12 +
> .../target_attribute_v_with_intrinsic-37.c | 12 +
> .../target_attribute_v_with_intrinsic-38.c | 12 +
> .../target_attribute_v_with_intrinsic-39.c | 12 +
> .../target_attribute_v_with_intrinsic-40.c | 12 +
> .../target_attribute_v_with_intrinsic-41.c | 12 +
> .../target_attribute_v_with_intrinsic-42.c | 12 +
> .../target_attribute_v_with_intrinsic-43.c | 12 +
> .../target_attribute_v_with_intrinsic-44.c | 12 +
> .../target_attribute_v_with_intrinsic-45.c | 12 +
> .../target_attribute_v_with_intrinsic-46.c | 12 +
> .../target_attribute_v_with_intrinsic-47.c | 12 +
> .../target_attribute_v_with_intrinsic-48.c | 12 +
> .../target_attribute_v_with_intrinsic-49.c | 12 +
> .../target_attribute_v_with_intrinsic-50.c | 12 +
> .../target_attribute_v_with_intrinsic-51.c | 12 +
> .../target_attribute_v_with_intrinsic-52.c | 12 +
> .../target_attribute_v_with_intrinsic-53.c | 12 +
> .../target_attribute_v_with_intrinsic-9.c | 12 +
> .../gcc.target/riscv/rvv/base/user-10.c | 39 ++-
> .../gcc.target/riscv/rvv/base/user-12.c | 275 ++++++++++++------
> .../gcc.target/riscv/rvv/base/user-13.c | 156 ++++++----
> .../gcc.target/riscv/rvv/base/user-14.c | 257 ++++++++++------
> .../gcc.target/riscv/rvv/base/user-15.c | 106 ++++---
> .../gcc.target/riscv/rvv/base/user-2.c | 33 ++-
> .../gcc.target/riscv/rvv/base/user-3.c | 18 +-
> .../gcc.target/riscv/rvv/base/user-5.c | 78 +++--
> .../gcc.target/riscv/rvv/base/user-6.c | 66 +++--
> .../gcc.target/riscv/rvv/base/user-9.c | 93 ++++--
> 65 files changed, 1886 insertions(+), 442 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
>
> diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc
> index 01314037461..43c8eecbb6f 100644
> --- a/gcc/config/riscv/riscv-c.cc
> +++ b/gcc/config/riscv/riscv-c.cc
> @@ -34,6 +34,72 @@ along with GCC; see the file COPYING3. If not see
>
> #define builtin_define(TXT) cpp_define (pfile, TXT)
>
> +struct pragma_intrinsic_flags
> +{
> + int intrinsic_target_flags;
> +
> + int intrinsic_riscv_vector_elen_flags;
> + int intrinsic_riscv_zvl_flags;
> + int intrinsic_riscv_zvb_subext;
> + int intrinsic_riscv_zvk_subext;
> +};
> +
> +static void
> +riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags)
> +{
> + flags->intrinsic_target_flags = target_flags;
> + flags->intrinsic_riscv_vector_elen_flags = riscv_vector_elen_flags;
> + flags->intrinsic_riscv_zvl_flags = riscv_zvl_flags;
> + flags->intrinsic_riscv_zvb_subext = riscv_zvb_subext;
> + flags->intrinsic_riscv_zvk_subext = riscv_zvk_subext;
> +
> + target_flags = target_flags
> + | MASK_VECTOR;
> +
> + riscv_zvl_flags = riscv_zvl_flags
> + | MASK_ZVL32B
> + | MASK_ZVL64B
> + | MASK_ZVL128B;
> +
> + riscv_vector_elen_flags = riscv_vector_elen_flags
> + | MASK_VECTOR_ELEN_32
> + | MASK_VECTOR_ELEN_64
> + | MASK_VECTOR_ELEN_FP_16
> + | MASK_VECTOR_ELEN_FP_32
> + | MASK_VECTOR_ELEN_FP_64;
> +
> + riscv_zvb_subext = riscv_zvb_subext
> + | MASK_ZVBB
> + | MASK_ZVBC
> + | MASK_ZVKB;
> +
> + riscv_zvk_subext = riscv_zvk_subext
> + | MASK_ZVKG
> + | MASK_ZVKNED
> + | MASK_ZVKNHA
> + | MASK_ZVKNHB
> + | MASK_ZVKSED
> + | MASK_ZVKSH
> + | MASK_ZVKN
> + | MASK_ZVKNC
> + | MASK_ZVKNG
> + | MASK_ZVKS
> + | MASK_ZVKSC
> + | MASK_ZVKSG
> + | MASK_ZVKT;
> +}
> +
> +static void
> +riscv_pragma_intrinsic_flags_restore (struct pragma_intrinsic_flags *flags)
> +{
> + target_flags = flags->intrinsic_target_flags;
> +
> + riscv_vector_elen_flags = flags->intrinsic_riscv_vector_elen_flags;
> + riscv_zvl_flags = flags->intrinsic_riscv_zvl_flags;
> + riscv_zvb_subext = flags->intrinsic_riscv_zvb_subext;
> + riscv_zvk_subext = flags->intrinsic_riscv_zvk_subext;
> +}
> +
> static int
> riscv_ext_version_value (unsigned major, unsigned minor)
> {
> @@ -201,20 +267,20 @@ riscv_pragma_intrinsic (cpp_reader *)
> if (strcmp (name, "vector") == 0
> || strcmp (name, "xtheadvector") == 0)
> {
> - if (TARGET_VECTOR)
> - riscv_vector::handle_pragma_vector ();
> - else /* Indicates riscv_vector.h is included but v is missing in arch */
> - {
> - /* To make the the rvv types and intrinsic API available for the
> - target("arch=+v") attribute, we need to temporally enable the
> - TARGET_VECTOR, and disable it after all initialized. */
> - target_flags |= MASK_VECTOR;
> -
> - riscv_vector::init_builtins ();
> - riscv_vector::handle_pragma_vector ();
> -
> - target_flags &= ~MASK_VECTOR;
> - }
> + struct pragma_intrinsic_flags backup_flags;
> +
> + riscv_pragma_intrinsic_flags_pollute (&backup_flags);
> +
> + riscv_option_override ();
> + init_adjust_machine_modes ();
> + riscv_vector::reinit_builtins ();
> + riscv_vector::handle_pragma_vector ();
> +
> + riscv_pragma_intrinsic_flags_restore (&backup_flags);
> +
> + /* Re-initialize after the flags are restored. */
> + riscv_option_override ();
> + init_adjust_machine_modes ();
> }
> else
> error ("unknown %<#pragma riscv intrinsic%> option %qs", name);
> diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h
> index b8735593805..4677d9c46cd 100644
> --- a/gcc/config/riscv/riscv-protos.h
> +++ b/gcc/config/riscv/riscv-protos.h
> @@ -546,6 +546,7 @@ enum avl_type
> };
> /* Routines implemented in riscv-vector-builtins.cc. */
> void init_builtins (void);
> +void reinit_builtins (void);
> const char *mangle_builtin_type (const_tree);
> tree lookup_vector_type_attribute (const_tree);
> bool builtin_type_p (const_tree);
> @@ -762,6 +763,7 @@ extern bool
> riscv_option_valid_attribute_p (tree, tree, tree, int);
> extern void
> riscv_override_options_internal (struct gcc_options *);
> +extern void riscv_option_override (void);
>
> struct riscv_tune_param;
> /* Information about one micro-arch we know about. */
> diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc
> index db9246eed2d..53ccea7889e 100644
> --- a/gcc/config/riscv/riscv-vector-builtins.cc
> +++ b/gcc/config/riscv/riscv-vector-builtins.cc
> @@ -3123,6 +3123,36 @@ register_builtin_types ()
> #include "riscv-vector-builtins.def"
> }
>
> +/* Similar as register_builtin_types but perform the registration if and
> + only if the element of abi_vector_type is NULL_TREE. */
> +static void
> +register_builtin_types_on_null ()
> +{
> + /* Get type node from get_typenode_from_name to prevent we have different type
> + node define in different target libraries, e.g. int32_t defined as
> + `long` in RV32/newlib-stdint, but `int` for RV32/glibc-stdint.h.
> + NOTE: uint[16|32|64]_type_node already defined in tree.h. */
> + tree int8_type_node = get_typenode_from_name (INT8_TYPE);
> + tree uint8_type_node = get_typenode_from_name (UINT8_TYPE);
> + tree int16_type_node = get_typenode_from_name (INT16_TYPE);
> + tree int32_type_node = get_typenode_from_name (INT32_TYPE);
> + tree int64_type_node = get_typenode_from_name (INT64_TYPE);
> +
> + machine_mode mode;
> +#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
> + ARGS...) \
> + mode = VECTOR_MODE##mode; \
> + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
> + register_builtin_type (VECTOR_TYPE_##NAME, SCALAR_TYPE##_type_node, mode);
> +
> +#define DEF_RVV_TUPLE_TYPE(NAME, NCHARS, ABI_NAME, SUBPART_TYPE, SCALAR_TYPE, \
> + NF, VECTOR_SUFFIX) \
> + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
> + register_tuple_type (VECTOR_TYPE_##NAME, VECTOR_TYPE_##SUBPART_TYPE, \
> + SCALAR_TYPE##_type_node, NF);
> +#include "riscv-vector-builtins.def"
> +}
> +
> /* Register vector type TYPE under its risv_vector.h name. */
> static void
> register_vector_type (vector_type_index type)
> @@ -4419,6 +4449,22 @@ init_builtins ()
> handle_pragma_vector ();
> }
>
> +/* Reinitialize builtins similar to init_builtins, but only the null
> + builtin types will be registered. */
> +void
> +reinit_builtins ()
> +{
> + rvv_switcher rvv;
> +
> + if (!TARGET_VECTOR)
> + return;
> +
> + register_builtin_types_on_null ();
> +
> + if (in_lto_p)
> + handle_pragma_vector ();
> +}
> +
> /* Implement TARGET_VERIFY_TYPE_CONTEXT for RVV types. */
> bool
> verify_type_context (location_t loc, type_context_kind context, const_tree type,
> @@ -4588,8 +4634,11 @@ expand_builtin (unsigned int code, tree exp, rtx target)
> registered_function &rfn = *(*registered_functions)[code];
>
> if (!TARGET_VECTOR)
> - error_at (EXPR_LOCATION (exp),
> - "built-in function %qE requires the V ISA extension", exp);
> + {
> + error_at (EXPR_LOCATION (exp),
> + "built-in function %qE requires the V ISA extension", exp);
> + return target;
> + }
>
> return function_expander (rfn.instance, rfn.decl, exp, target).expand ();
> }
> diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
> index fe9976bfffe..2a71badfdc9 100644
> --- a/gcc/config/riscv/riscv.cc
> +++ b/gcc/config/riscv/riscv.cc
> @@ -5459,6 +5459,152 @@ riscv_v_abi ()
> return v_abi;
> }
>
> +static bool
> +riscv_vector_int_type_p (const_tree type)
> +{
> + machine_mode mode = TYPE_MODE (type);
> +
> + if (VECTOR_MODE_P (mode))
> + return INTEGRAL_MODE_P (GET_MODE_INNER (mode));
> +
> + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> + return strstr (name, "int") != NULL || strstr (name, "uint") != NULL;
> +}
> +
> +static bool
> +riscv_vector_float_type_p (const_tree type)
> +{
> + machine_mode mode = TYPE_MODE (type);
> +
> + if (VECTOR_MODE_P (mode))
> + return FLOAT_MODE_P (GET_MODE_INNER (mode));
> +
> + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> + return strstr (name, "vfloat") != NULL;
> +}
> +
> +static unsigned
> +riscv_vector_element_bitsize (const_tree type)
> +{
> + machine_mode mode = TYPE_MODE (type);
> +
> + if (VECTOR_MODE_P (mode))
> + return GET_MODE_BITSIZE (GET_MODE_INNER (mode));
> +
> + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> +
> + if (strstr (name, "bool") != NULL)
> + return 1;
> + else if (strstr (name, "int8") != NULL)
> + return 8;
> + else if (strstr (name, "int16") != NULL || strstr (name, "float16") != NULL)
> + return 16;
> + else if (strstr (name, "int32") != NULL || strstr (name, "float32") != NULL)
> + return 32;
> + else if (strstr (name, "int64") != NULL || strstr (name, "float64") != NULL)
> + return 64;
> +
> + gcc_unreachable ();
> +}
> +
> +static unsigned
> +riscv_vector_required_min_vlen (const_tree type)
> +{
> + machine_mode mode = TYPE_MODE (type);
> +
> + if (riscv_v_ext_mode_p (mode))
> + return TARGET_MIN_VLEN;
> +
> + unsigned element_bitsize = riscv_vector_element_bitsize (type);
> + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> +
> + if (strstr (name, "bool64") != NULL)
> + return element_bitsize * 64;
> + else if (strstr (name, "bool32") != NULL)
> + return element_bitsize * 32;
> + else if (strstr (name, "bool16") != NULL)
> + return element_bitsize * 16;
> + else if (strstr (name, "bool8") != NULL)
> + return element_bitsize * 8;
> + else if (strstr (name, "bool4") != NULL)
> + return element_bitsize * 4;
> + else if (strstr (name, "bool2") != NULL)
> + return element_bitsize * 2;
> +
> + if (strstr (name, "mf8") != NULL)
> + return element_bitsize * 8;
> + else if (strstr (name, "mf4") != NULL)
> + return element_bitsize * 4;
> + else if (strstr (name, "mf2") != NULL)
> + return element_bitsize * 2;
> +
> + return element_bitsize;
> +}
> +
> +static void
> +riscv_validate_vector_type (const_tree type, const char *hint)
> +{
> + gcc_assert (riscv_vector_type_p (type));
> +
> + if (!TARGET_VECTOR)
> + {
> + error_at (input_location, "%s %qT requires the V ISA extension",
> + hint, type);
> + return;
> + }
> +
> + unsigned element_bitsize = riscv_vector_element_bitsize (type);
> + bool int_type_p = riscv_vector_int_type_p (type);
> +
> + if (int_type_p && element_bitsize == 64
> + && !TARGET_VECTOR_ELEN_64_P (riscv_vector_elen_flags))
> + {
> + error_at (input_location,
> + "%s %qT requires the zve64x, zve64f, zve64d or v ISA extension",
> + hint, type);
> + return;
> + }
> +
> + bool float_type_p = riscv_vector_float_type_p (type);
> +
> + if (float_type_p && element_bitsize == 16
> + && !TARGET_VECTOR_ELEN_FP_16_P (riscv_vector_elen_flags))
> + {
> + error_at (input_location,
> + "%s %qT requires the zvfhmin or zvfh ISA extension",
> + hint, type);
> + return;
> + }
> +
> + if (float_type_p && element_bitsize == 32
> + && !TARGET_VECTOR_ELEN_FP_32_P (riscv_vector_elen_flags))
> + {
> + error_at (input_location,
> + "%s %qT requires the zve32f, zve64f, zve64d or v ISA extension",
> + hint, type);
> + return;
> + }
> +
> + if (float_type_p && element_bitsize == 64
> + && !TARGET_VECTOR_ELEN_FP_64_P (riscv_vector_elen_flags))
> + {
> + error_at (input_location,
> + "%s %qT requires the zve64d or v ISA extension", hint, type);
> + return;
> + }
> +
> + unsigned required_min_vlen = riscv_vector_required_min_vlen (type);
> +
> + if (TARGET_MIN_VLEN < required_min_vlen)
> + {
> + error_at (
> + input_location,
> + "%s %qT requires the minimal vector length %qd but %qd is given",
> + hint, type, required_min_vlen, TARGET_MIN_VLEN);
> + return;
> + }
> +}
> +
> /* Return true if a function with type FNTYPE returns its value in
> RISC-V V registers. */
>
> @@ -5469,9 +5615,7 @@ riscv_return_value_is_vector_type_p (const_tree fntype)
>
> if (riscv_vector_type_p (return_type))
> {
> - if (!TARGET_VECTOR)
> - error_at (input_location,
> - "return type %qT requires the V ISA extension", return_type);
> + riscv_validate_vector_type (return_type, "return type");
> return true;
> }
> else
> @@ -5490,10 +5634,7 @@ riscv_arguments_is_vector_type_p (const_tree fntype)
> tree arg_type = TREE_VALUE (chain);
> if (riscv_vector_type_p (arg_type))
> {
> - if (!TARGET_VECTOR)
> - error_at (input_location,
> - "argument type %qT requires the V ISA extension",
> - arg_type);
> + riscv_validate_vector_type (arg_type, "argument type");
> return true;
> }
> }
> @@ -9107,7 +9248,7 @@ riscv_override_options_internal (struct gcc_options *opts)
>
> /* Implement TARGET_OPTION_OVERRIDE. */
>
> -static void
> +void
> riscv_option_override (void)
> {
> #ifdef SUBTARGET_OVERRIDE_OPTIONS
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> index a13cc12c543..1bd7efe61f2 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> @@ -3,11 +3,24 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> -void foo1 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> -void foo2 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> -void foo3 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> -void foo4 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> -void foo5 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> -void foo6 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> -void foo7 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo0 () {__rvv_int64m1_t t;}
> +void foo1 () {__rvv_uint64m1_t t;}
> +void foo2 () {__rvv_int64m2_t t;}
> +void foo3 () {__rvv_uint64m2_t t;}
> +void foo4 () {__rvv_int64m4_t t;}
> +void foo5 () {__rvv_uint64m4_t t;}
> +void foo6 () {__rvv_int64m8_t t;}
> +void foo7 () {__rvv_uint64m8_t t;}
> +
> +void new_foo0 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo1 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo2 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo3 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo4 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo5 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo6 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo7 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> index dd6bcb0f548..ce6a62d1405 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> @@ -3,11 +3,24 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo1 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo2 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo3 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo4 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo5 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo6 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo7 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo0 () {vint64m1_t t;}
> +void foo1 () {vuint64m1_t t;}
> +void foo2 () {vint64m2_t t;}
> +void foo3 () {vuint64m2_t t;}
> +void foo4 () {vint64m4_t t;}
> +void foo5 () {vuint64m4_t t;}
> +void foo6 () {vint64m8_t t;}
> +void foo7 () {vuint64m8_t t;}
> +
> +void new_foo0 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo1 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo2 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo3 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo4 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo5 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo6 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo7 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> index 01e86223da9..5c0cd1b1f7f 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> @@ -3,18 +3,38 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {__rvv_bool64_t t;} /* { dg-error {unknown type name '__rvv_bool64_t'} } */
> -void foo1 () {__rvv_int8mf8_t t;} /* { dg-error {unknown type name '__rvv_int8mf8_t'} } */
> -void foo2 () {__rvv_uint8mf8_t t;} /* { dg-error {unknown type name '__rvv_uint8mf8_t'} } */
> -void foo3 () {__rvv_int16mf4_t t;} /* { dg-error {unknown type name '__rvv_int16mf4_t'} } */
> -void foo4 () {__rvv_uint16mf4_t t;} /* { dg-error {unknown type name '__rvv_uint16mf4_t'} } */
> -void foo5 () {__rvv_int32mf2_t t;} /* { dg-error {unknown type name '__rvv_int32mf2_t'} } */
> -void foo6 () {__rvv_uint32mf2_t t;} /* { dg-error {unknown type name '__rvv_uint32mf2_t'} } */
> -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo0 () {__rvv_bool64_t t;}
> +void foo1 () {__rvv_int8mf8_t t;}
> +void foo2 () {__rvv_uint8mf8_t t;}
> +void foo3 () {__rvv_int16mf4_t t;}
> +void foo4 () {__rvv_uint16mf4_t t;}
> +void foo5 () {__rvv_int32mf2_t t;}
> +void foo6 () {__rvv_uint32mf2_t t;}
> +void foo7 () {__rvv_int64m1_t t;}
> +void foo8 () {__rvv_uint64m1_t t;}
> +void foo9 () {__rvv_int64m2_t t;}
> +void foo10 () {__rvv_uint64m2_t t;}
> +void foo11 () {__rvv_int64m4_t t;}
> +void foo12 () {__rvv_uint64m4_t t;}
> +void foo13 () {__rvv_int64m8_t t;}
> +void foo14 () {__rvv_uint64m8_t t;}
> +
> +void new_foo0 (__rvv_bool64_t t) { } /* { dg-error {argument type '__rvv_bool64_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo1 (__rvv_int8mf8_t t) { } /* { dg-error {argument type '__rvv_int8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo2 (__rvv_uint8mf8_t t) { } /* { dg-error {argument type '__rvv_uint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo3 (__rvv_int16mf4_t t) { } /* { dg-error {argument type '__rvv_int16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo4 (__rvv_uint16mf4_t t) { } /* { dg-error {argument type '__rvv_uint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo5 (__rvv_int32mf2_t t) { } /* { dg-error {argument type '__rvv_int32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo6 (__rvv_uint32mf2_t t) { } /* { dg-error {argument type '__rvv_uint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> index 62385b8dcd1..48e1f278e70 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> @@ -3,18 +3,39 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> -void foo1 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> -void foo2 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> -void foo3 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> -void foo4 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> -void foo5 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> -void foo6 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo0 () {vbool64_t t;}
> +void foo1 () {vint8mf8_t t;}
> +void foo2 () {vuint8mf8_t t;}
> +void foo3 () {vint16mf4_t t;}
> +void foo4 () {vuint16mf4_t t;}
> +void foo5 () {vint32mf2_t t;}
> +void foo6 () {vuint32mf2_t t;}
> +void foo7 () {vint64m1_t t;}
> +void foo8 () {vuint64m1_t t;}
> +void foo9 () {vint64m2_t t;}
> +void foo10 () {vuint64m2_t t;}
> +void foo11 () {vint64m4_t t;}
> +void foo12 () {vuint64m4_t t;}
> +void foo13 () {vint64m8_t t;}
> +void foo14 () {vuint64m8_t t;}
> +
> +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo1 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo2 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo3 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo4 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo5 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo6 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> index 26a0a742965..af237f5d759 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> @@ -3,6 +3,10 @@
>
> #include "riscv_vector.h"
>
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> void foo0 () {__rvv_bool64_t t;}
> void foo1 () {__rvv_int8mf8_t t;}
> void foo2 () {__rvv_uint8mf8_t t;}
> @@ -10,11 +14,28 @@ void foo3 () {__rvv_int16mf4_t t;}
> void foo4 () {__rvv_uint16mf4_t t;}
> void foo5 () {__rvv_int32mf2_t t;}
> void foo6 () {__rvv_uint32mf2_t t;}
> -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> +void foo7 () {__rvv_int64m1_t t;}
> +void foo8 () {__rvv_uint64m1_t t;}
> +void foo9 () {__rvv_int64m2_t t;}
> +void foo10 () {__rvv_uint64m2_t t;}
> +void foo11 () {__rvv_int64m4_t t;}
> +void foo12 () {__rvv_uint64m4_t t;}
> +void foo13 () {__rvv_int64m8_t t;}
> +void foo14 () {__rvv_uint64m8_t t;}
> +
> +void new_foo0 (__rvv_bool64_t t) { }
> +void new_foo1 (__rvv_int8mf8_t t) { }
> +void new_foo2 (__rvv_uint8mf8_t t) { }
> +void new_foo3 (__rvv_int16mf4_t t) { }
> +void new_foo4 (__rvv_uint16mf4_t t) { }
> +void new_foo5 (__rvv_int32mf2_t t) { }
> +void new_foo6 (__rvv_uint32mf2_t t) { }
> +
> +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> index eb66f3ea2bd..2779fbda053 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> @@ -10,11 +10,28 @@ void foo3 () {vint16mf4_t t;}
> void foo4 () {vuint16mf4_t t;}
> void foo5 () {vint32mf2_t t;}
> void foo6 () {vuint32mf2_t t;}
> -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> +void foo7 () {vint64m1_t t;}
> +void foo8 () {vuint64m1_t t;}
> +void foo9 () {vint64m2_t t;}
> +void foo10 () {vuint64m2_t t;}
> +void foo11 () {vint64m4_t t;}
> +void foo12 () {vuint64m4_t t;}
> +void foo13 () {vint64m8_t t;}
> +void foo14 () {vuint64m8_t t;}
> +
> +void new_foo0 (vbool64_t t) { }
> +void new_foo1 (vint8mf8_t t) { }
> +void new_foo2 (vuint8mf8_t t) { }
> +void new_foo3 (vint16mf4_t t) { }
> +void new_foo4 (vuint16mf4_t t) { }
> +void new_foo5 (vint32mf2_t t) { }
> +void new_foo6 (vuint32mf2_t t) { }
> +
> +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> new file mode 100644
> index 00000000000..3e6844475d5
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+v,+zvfh")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> new file mode 100644
> index 00000000000..df053073bc8
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> @@ -0,0 +1,26 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> new file mode 100644
> index 00000000000..51a91886f52
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> @@ -0,0 +1,33 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_4 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> new file mode 100644
> index 00000000000..994b1c0a5db
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> @@ -0,0 +1,33 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> new file mode 100644
> index 00000000000..caa2a10e943
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> @@ -0,0 +1,40 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> new file mode 100644
> index 00000000000..72a2be6e560
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> @@ -0,0 +1,47 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_6 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> new file mode 100644
> index 00000000000..dabdcf8ff21
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+v,+zvfhmin")))
> +test_1 (vfloat16mf2_t a, size_t vl)
> +{
> + return __riscv_vfwcvt_f_f_v_f32m1 (a, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> new file mode 100644
> index 00000000000..a064417169d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> new file mode 100644
> index 00000000000..61d3fb25dc2
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> new file mode 100644
> index 00000000000..bfc26f8210a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> new file mode 100644
> index 00000000000..35a2924234f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> new file mode 100644
> index 00000000000..e3aef339d68
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> new file mode 100644
> index 00000000000..b5a894ecad4
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> new file mode 100644
> index 00000000000..7267fa3304b
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> new file mode 100644
> index 00000000000..5a7c4481a5a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> new file mode 100644
> index 00000000000..f1241cb1771
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> new file mode 100644
> index 00000000000..2738a29d673
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> new file mode 100644
> index 00000000000..8610000b474
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> new file mode 100644
> index 00000000000..7eaa6adab82
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> new file mode 100644
> index 00000000000..eb74e33299f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> new file mode 100644
> index 00000000000..f68b4622ee7
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> new file mode 100644
> index 00000000000..2f146cda2dd
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> new file mode 100644
> index 00000000000..737b5b00d73
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> new file mode 100644
> index 00000000000..559e90e87f4
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zvfh")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> new file mode 100644
> index 00000000000..91ee510c77b
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> new file mode 100644
> index 00000000000..ec184cff5dc
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> new file mode 100644
> index 00000000000..a37f67c5320
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> new file mode 100644
> index 00000000000..3d62027848e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zvfh")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> new file mode 100644
> index 00000000000..9b8a9cbafcb
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> new file mode 100644
> index 00000000000..67469a18cd9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> new file mode 100644
> index 00000000000..ce89391e4e7
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> new file mode 100644
> index 00000000000..8836cb14703
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zvfh")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> new file mode 100644
> index 00000000000..57e542da1b8
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> new file mode 100644
> index 00000000000..7fb6b20a32e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> new file mode 100644
> index 00000000000..ce6f97d8584
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> new file mode 100644
> index 00000000000..dbf92a3df24
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> new file mode 100644
> index 00000000000..6d2e4e27bf4
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> new file mode 100644
> index 00000000000..94bbcb05e4d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvbb")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
> +{
> + return __riscv_vandn_vv_u32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> new file mode 100644
> index 00000000000..054b7630fa9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvknha")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl)
> +{
> + return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> new file mode 100644
> index 00000000000..b2e6658f4d3
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m2_t
> +__attribute__((target("arch=+zvksh")))
> +test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl)
> +{
> + return __riscv_vsm3me_vv_u32m2 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> new file mode 100644
> index 00000000000..8574cd049cf
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvkned")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
> +{
> + return __riscv_vaesdm_vv_u32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> new file mode 100644
> index 00000000000..e27b4d5fbb3
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvkg")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
> +{
> + return __riscv_vgmul_vv_u32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> new file mode 100644
> index 00000000000..2213c6fe35d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m2_t
> +__attribute__((target("arch=+zvksed")))
> +test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl)
> +{
> + return __riscv_vsm4r_vv_u32m2 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> new file mode 100644
> index 00000000000..66901cc72ad
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvknhb")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl)
> +{
> + return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
> new file mode 100644
> index 00000000000..0764f403b89
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
> index fdc28c77426..6bb9460d6d2 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
> @@ -193,14 +193,31 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
> index 332ff7627b6..2f2c150eeb0 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
> @@ -3,20 +3,20 @@
>
> #include "riscv_vector.h"
>
> -void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */
> -void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */
> -void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */
> -void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */
> -void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */
> -void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */
> -void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */
> -void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */
> -void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */
> -void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */
> -void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */
> -void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */
> -void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */
> -void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */
> +void f_vint8mf8x2_t () {vint8mf8x2_t t;}
> +void f_vuint8mf8x2_t () {vuint8mf8x2_t t;}
> +void f_vint8mf8x3_t () {vint8mf8x3_t t;}
> +void f_vuint8mf8x3_t () {vuint8mf8x3_t t;}
> +void f_vint8mf8x4_t () {vint8mf8x4_t t;}
> +void f_vuint8mf8x4_t () {vuint8mf8x4_t t;}
> +void f_vint8mf8x5_t () {vint8mf8x5_t t;}
> +void f_vuint8mf8x5_t () {vuint8mf8x5_t t;}
> +void f_vint8mf8x6_t () {vint8mf8x6_t t;}
> +void f_vuint8mf8x6_t () {vuint8mf8x6_t t;}
> +void f_vint8mf8x7_t () {vint8mf8x7_t t;}
> +void f_vuint8mf8x7_t () {vuint8mf8x7_t t;}
> +void f_vint8mf8x8_t () {vint8mf8x8_t t;}
> +void f_vuint8mf8x8_t () {vuint8mf8x8_t t;}
> void f_vint8mf4x2_t () {vint8mf4x2_t t;}
> void f_vuint8mf4x2_t () {vuint8mf4x2_t t;}
> void f_vint8mf4x3_t () {vint8mf4x3_t t;}
> @@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;}
> void f_vuint8m2x4_t () {vuint8m2x4_t t;}
> void f_vint8m4x2_t () {vint8m4x2_t t;}
> void f_vuint8m4x2_t () {vuint8m4x2_t t;}
> -void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */
> -void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */
> -void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */
> -void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */
> -void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */
> -void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */
> -void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */
> -void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */
> -void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */
> -void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */
> -void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */
> -void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */
> -void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */
> -void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */
> +void f_vint16mf4x2_t () {vint16mf4x2_t t;}
> +void f_vuint16mf4x2_t () {vuint16mf4x2_t t;}
> +void f_vint16mf4x3_t () {vint16mf4x3_t t;}
> +void f_vuint16mf4x3_t () {vuint16mf4x3_t t;}
> +void f_vint16mf4x4_t () {vint16mf4x4_t t;}
> +void f_vuint16mf4x4_t () {vuint16mf4x4_t t;}
> +void f_vint16mf4x5_t () {vint16mf4x5_t t;}
> +void f_vuint16mf4x5_t () {vuint16mf4x5_t t;}
> +void f_vint16mf4x6_t () {vint16mf4x6_t t;}
> +void f_vuint16mf4x6_t () {vuint16mf4x6_t t;}
> +void f_vint16mf4x7_t () {vint16mf4x7_t t;}
> +void f_vuint16mf4x7_t () {vuint16mf4x7_t t;}
> +void f_vint16mf4x8_t () {vint16mf4x8_t t;}
> +void f_vuint16mf4x8_t () {vuint16mf4x8_t t;}
> void f_vint16mf2x2_t () {vint16mf2x2_t t;}
> void f_vuint16mf2x2_t () {vuint16mf2x2_t t;}
> void f_vint16mf2x3_t () {vint16mf2x3_t t;}
> @@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;}
> void f_vuint16m2x4_t () {vuint16m2x4_t t;}
> void f_vint16m4x2_t () {vint16m4x2_t t;}
> void f_vuint16m4x2_t () {vuint16m4x2_t t;}
> -void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */
> -void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */
> -void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */
> -void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */
> -void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */
> -void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */
> -void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */
> -void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */
> -void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */
> -void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */
> -void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */
> -void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */
> -void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */
> -void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */
> +void f_vint32mf2x2_t () {vint32mf2x2_t t;}
> +void f_vuint32mf2x2_t () {vuint32mf2x2_t t;}
> +void f_vint32mf2x3_t () {vint32mf2x3_t t;}
> +void f_vuint32mf2x3_t () {vuint32mf2x3_t t;}
> +void f_vint32mf2x4_t () {vint32mf2x4_t t;}
> +void f_vuint32mf2x4_t () {vuint32mf2x4_t t;}
> +void f_vint32mf2x5_t () {vint32mf2x5_t t;}
> +void f_vuint32mf2x5_t () {vuint32mf2x5_t t;}
> +void f_vint32mf2x6_t () {vint32mf2x6_t t;}
> +void f_vuint32mf2x6_t () {vuint32mf2x6_t t;}
> +void f_vint32mf2x7_t () {vint32mf2x7_t t;}
> +void f_vuint32mf2x7_t () {vuint32mf2x7_t t;}
> +void f_vint32mf2x8_t () {vint32mf2x8_t t;}
> +void f_vuint32mf2x8_t () {vuint32mf2x8_t t;}
> void f_vint32m1x2_t () {vint32m1x2_t t;}
> void f_vuint32m1x2_t () {vuint32m1x2_t t;}
> void f_vint32m1x3_t () {vint32m1x3_t t;}
> @@ -153,54 +153,143 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> void f_vint32m4x2_t () {vint32m4x2_t t;}
> void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
> -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
> -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
> -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
> -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
> -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
> -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
> -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
> -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
> -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
> -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vint64m1x2_t () {vint64m1x2_t t;}
> +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> +void f_vint64m1x3_t () {vint64m1x3_t t;}
> +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> +void f_vint64m1x4_t () {vint64m1x4_t t;}
> +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> +void f_vint64m1x5_t () {vint64m1x5_t t;}
> +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> +void f_vint64m1x6_t () {vint64m1x6_t t;}
> +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> +void f_vint64m1x7_t () {vint64m1x7_t t;}
> +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> +void f_vint64m1x8_t () {vint64m1x8_t t;}
> +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> +void f_vint64m2x2_t () {vint64m2x2_t t;}
> +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> +void f_vint64m2x3_t () {vint64m2x3_t t;}
> +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> +void f_vint64m2x4_t () {vint64m2x4_t t;}
> +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> +void f_vint64m4x2_t () {vint64m4x2_t t;}
> +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
> +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
> +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
> +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
> +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
> index ed180749cb6..967eeece274 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
> @@ -153,54 +153,108 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> void f_vint32m4x2_t () {vint32m4x2_t t;}
> void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
> -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
> -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
> -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
> -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
> -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
> -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
> -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
> -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
> -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
> -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +void f_vint64m1x2_t () {vint64m1x2_t t;}
> +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> +void f_vint64m1x3_t () {vint64m1x3_t t;}
> +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> +void f_vint64m1x4_t () {vint64m1x4_t t;}
> +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> +void f_vint64m1x5_t () {vint64m1x5_t t;}
> +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> +void f_vint64m1x6_t () {vint64m1x6_t t;}
> +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> +void f_vint64m1x7_t () {vint64m1x7_t t;}
> +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> +void f_vint64m1x8_t () {vint64m1x8_t t;}
> +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> +void f_vint64m2x2_t () {vint64m2x2_t t;}
> +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> +void f_vint64m2x3_t () {vint64m2x3_t t;}
> +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> +void f_vint64m2x4_t () {vint64m2x4_t t;}
> +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> +void f_vint64m4x2_t () {vint64m4x2_t t;}
> +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
> +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
> +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
> +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
> +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
> index 70e0989b6e1..b868f314163 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
> @@ -3,20 +3,20 @@
>
> #include "riscv_vector.h"
>
> -void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */
> -void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */
> -void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */
> -void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */
> -void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */
> -void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */
> -void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */
> -void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */
> -void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */
> -void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */
> -void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */
> -void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */
> -void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */
> -void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */
> +void f_vint8mf8x2_t () {vint8mf8x2_t t;}
> +void f_vuint8mf8x2_t () {vuint8mf8x2_t t;}
> +void f_vint8mf8x3_t () {vint8mf8x3_t t;}
> +void f_vuint8mf8x3_t () {vuint8mf8x3_t t;}
> +void f_vint8mf8x4_t () {vint8mf8x4_t t;}
> +void f_vuint8mf8x4_t () {vuint8mf8x4_t t;}
> +void f_vint8mf8x5_t () {vint8mf8x5_t t;}
> +void f_vuint8mf8x5_t () {vuint8mf8x5_t t;}
> +void f_vint8mf8x6_t () {vint8mf8x6_t t;}
> +void f_vuint8mf8x6_t () {vuint8mf8x6_t t;}
> +void f_vint8mf8x7_t () {vint8mf8x7_t t;}
> +void f_vuint8mf8x7_t () {vuint8mf8x7_t t;}
> +void f_vint8mf8x8_t () {vint8mf8x8_t t;}
> +void f_vuint8mf8x8_t () {vuint8mf8x8_t t;}
> void f_vint8mf4x2_t () {vint8mf4x2_t t;}
> void f_vuint8mf4x2_t () {vuint8mf4x2_t t;}
> void f_vint8mf4x3_t () {vint8mf4x3_t t;}
> @@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;}
> void f_vuint8m2x4_t () {vuint8m2x4_t t;}
> void f_vint8m4x2_t () {vint8m4x2_t t;}
> void f_vuint8m4x2_t () {vuint8m4x2_t t;}
> -void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */
> -void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */
> -void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */
> -void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */
> -void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */
> -void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */
> -void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */
> -void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */
> -void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */
> -void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */
> -void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */
> -void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */
> -void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */
> -void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */
> +void f_vint16mf4x2_t () {vint16mf4x2_t t;}
> +void f_vuint16mf4x2_t () {vuint16mf4x2_t t;}
> +void f_vint16mf4x3_t () {vint16mf4x3_t t;}
> +void f_vuint16mf4x3_t () {vuint16mf4x3_t t;}
> +void f_vint16mf4x4_t () {vint16mf4x4_t t;}
> +void f_vuint16mf4x4_t () {vuint16mf4x4_t t;}
> +void f_vint16mf4x5_t () {vint16mf4x5_t t;}
> +void f_vuint16mf4x5_t () {vuint16mf4x5_t t;}
> +void f_vint16mf4x6_t () {vint16mf4x6_t t;}
> +void f_vuint16mf4x6_t () {vuint16mf4x6_t t;}
> +void f_vint16mf4x7_t () {vint16mf4x7_t t;}
> +void f_vuint16mf4x7_t () {vuint16mf4x7_t t;}
> +void f_vint16mf4x8_t () {vint16mf4x8_t t;}
> +void f_vuint16mf4x8_t () {vuint16mf4x8_t t;}
> void f_vint16mf2x2_t () {vint16mf2x2_t t;}
> void f_vuint16mf2x2_t () {vuint16mf2x2_t t;}
> void f_vint16mf2x3_t () {vint16mf2x3_t t;}
> @@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;}
> void f_vuint16m2x4_t () {vuint16m2x4_t t;}
> void f_vint16m4x2_t () {vint16m4x2_t t;}
> void f_vuint16m4x2_t () {vuint16m4x2_t t;}
> -void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */
> -void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */
> -void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */
> -void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */
> -void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */
> -void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */
> -void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */
> -void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */
> -void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */
> -void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */
> -void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */
> -void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */
> -void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */
> -void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */
> +void f_vint32mf2x2_t () {vint32mf2x2_t t;}
> +void f_vuint32mf2x2_t () {vuint32mf2x2_t t;}
> +void f_vint32mf2x3_t () {vint32mf2x3_t t;}
> +void f_vuint32mf2x3_t () {vuint32mf2x3_t t;}
> +void f_vint32mf2x4_t () {vint32mf2x4_t t;}
> +void f_vuint32mf2x4_t () {vuint32mf2x4_t t;}
> +void f_vint32mf2x5_t () {vint32mf2x5_t t;}
> +void f_vuint32mf2x5_t () {vuint32mf2x5_t t;}
> +void f_vint32mf2x6_t () {vint32mf2x6_t t;}
> +void f_vuint32mf2x6_t () {vuint32mf2x6_t t;}
> +void f_vint32mf2x7_t () {vint32mf2x7_t t;}
> +void f_vuint32mf2x7_t () {vuint32mf2x7_t t;}
> +void f_vint32mf2x8_t () {vint32mf2x8_t t;}
> +void f_vuint32mf2x8_t () {vuint32mf2x8_t t;}
> void f_vint32m1x2_t () {vint32m1x2_t t;}
> void f_vuint32m1x2_t () {vuint32m1x2_t t;}
> void f_vint32m1x3_t () {vint32m1x3_t t;}
> @@ -153,35 +153,35 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> void f_vint32m4x2_t () {vint32m4x2_t t;}
> void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> +void f_vint64m1x2_t () {vint64m1x2_t t;}
> +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> +void f_vint64m1x3_t () {vint64m1x3_t t;}
> +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> +void f_vint64m1x4_t () {vint64m1x4_t t;}
> +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> +void f_vint64m1x5_t () {vint64m1x5_t t;}
> +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> +void f_vint64m1x6_t () {vint64m1x6_t t;}
> +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> +void f_vint64m1x7_t () {vint64m1x7_t t;}
> +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> +void f_vint64m1x8_t () {vint64m1x8_t t;}
> +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> +void f_vint64m2x2_t () {vint64m2x2_t t;}
> +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> +void f_vint64m2x3_t () {vint64m2x3_t t;}
> +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> +void f_vint64m2x4_t () {vint64m2x4_t t;}
> +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> +void f_vint64m4x2_t () {vint64m4x2_t t;}
> +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> @@ -193,14 +193,107 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vint16mf4x2_t (vint16mf4x2_t t) { } /* { dg-error {argument type 'vint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x2_t (vuint16mf4x2_t t) { } /* { dg-error {argument type 'vuint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x3_t (vint16mf4x3_t t) { } /* { dg-error {argument type 'vint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x3_t (vuint16mf4x3_t t) { } /* { dg-error {argument type 'vuint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x4_t (vint16mf4x4_t t) { } /* { dg-error {argument type 'vint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x4_t (vuint16mf4x4_t t) { } /* { dg-error {argument type 'vuint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x5_t (vint16mf4x5_t t) { } /* { dg-error {argument type 'vint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x5_t (vuint16mf4x5_t t) { } /* { dg-error {argument type 'vuint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x6_t (vint16mf4x6_t t) { } /* { dg-error {argument type 'vint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x6_t (vuint16mf4x6_t t) { } /* { dg-error {argument type 'vuint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x7_t (vint16mf4x7_t t) { } /* { dg-error {argument type 'vint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x7_t (vuint16mf4x7_t t) { } /* { dg-error {argument type 'vuint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x8_t (vint16mf4x8_t t) { } /* { dg-error {argument type 'vint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x8_t (vuint16mf4x8_t t) { } /* { dg-error {argument type 'vuint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
> index 2a615f80816..094b7efdef4 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
> @@ -153,28 +153,28 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> void f_vint32m4x2_t () {vint32m4x2_t t;}
> void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> +void f_vint64m1x2_t () {vint64m1x2_t t;}
> +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> +void f_vint64m1x3_t () {vint64m1x3_t t;}
> +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> +void f_vint64m1x4_t () {vint64m1x4_t t;}
> +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> +void f_vint64m1x5_t () {vint64m1x5_t t;}
> +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> +void f_vint64m1x6_t () {vint64m1x6_t t;}
> +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> +void f_vint64m1x7_t () {vint64m1x7_t t;}
> +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> +void f_vint64m1x8_t () {vint64m1x8_t t;}
> +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> +void f_vint64m2x2_t () {vint64m2x2_t t;}
> +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> +void f_vint64m2x3_t () {vint64m2x3_t t;}
> +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> +void f_vint64m2x4_t () {vint64m2x4_t t;}
> +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> +void f_vint64m4x2_t () {vint64m4x2_t t;}
> +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> @@ -193,14 +193,54 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
> index 92f4ee02d20..6e08f522d9f 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
> @@ -54,12 +54,27 @@ void foo47 () {vint64m4_t t;}
> void foo48 () {vuint64m4_t t;}
> void foo49 () {vint64m8_t t;}
> void foo50 () {vuint64m8_t t;}
> -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
> -void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */
> -void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */
> -void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */
> -void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */
> -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo57 () {vfloat32mf2_t t;}
> +void foo58 () {vfloat32m1_t t;}
> +void foo59 () {vfloat32m2_t t;}
> +void foo60 () {vfloat32m4_t t;}
> +void foo61 () {vfloat32m8_t t;}
> +void foo62 () {vfloat64m1_t t;}
> +void foo63 () {vfloat64m2_t t;}
> +void foo64 () {vfloat64m4_t t;}
> +void foo65 () {vfloat64m8_t t;}
> +
> +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
> index 3a425721863..4fb40233509 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
> @@ -59,7 +59,17 @@ void foo58 () {vfloat32m1_t t;}
> void foo59 () {vfloat32m2_t t;}
> void foo60 () {vfloat32m4_t t;}
> void foo61 () {vfloat32m8_t t;}
> -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo62 () {vfloat64m1_t t;}
> +void foo63 () {vfloat64m2_t t;}
> +void foo64 () {vfloat64m4_t t;}
> +void foo65 () {vfloat64m8_t t;}
> +
> +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
> index de850e5e10d..28b3ae708f5 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
> @@ -3,15 +3,15 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> +void foo0 () {vbool64_t t;}
> void foo1 () {vbool32_t t;}
> void foo2 () {vbool16_t t;}
> void foo3 () {vbool8_t t;}
> void foo4 () {vbool4_t t;}
> void foo5 () {vbool2_t t;}
> void foo6 () {vbool1_t t;}
> -void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> -void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> +void foo7 () {vint8mf8_t t;}
> +void foo8 () {vuint8mf8_t t;}
> void foo9 () {vint8mf4_t t;}
> void foo10 () {vuint8mf4_t t;}
> void foo11 () {vint8mf2_t t;}
> @@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;}
> void foo18 () {vuint8m4_t t;}
> void foo19 () {vint8m8_t t;}
> void foo20 () {vuint8m8_t t;}
> -void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> -void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> +void foo21 () {vint16mf4_t t;}
> +void foo22 () {vuint16mf4_t t;}
> void foo23 () {vint16mf2_t t;}
> void foo24 () {vuint16mf2_t t;}
> void foo25 () {vint16m1_t t;}
> @@ -36,8 +36,8 @@ void foo29 () {vint16m4_t t;}
> void foo30 () {vuint16m4_t t;}
> void foo31 () {vint16m8_t t;}
> void foo32 () {vuint16m8_t t;}
> -void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> -void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> +void foo33 () {vint32mf2_t t;}
> +void foo34 () {vuint32mf2_t t;}
> void foo35 () {vint32m1_t t;}
> void foo36 () {vuint32m1_t t;}
> void foo37 () {vint32m2_t t;}
> @@ -46,20 +46,50 @@ void foo39 () {vint32m4_t t;}
> void foo40 () {vuint32m4_t t;}
> void foo41 () {vint32m8_t t;}
> void foo42 () {vuint32m8_t t;}
> -void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
> -void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */
> -void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */
> -void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */
> -void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */
> -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> +void foo43 () {vint64m1_t t;}
> +void foo44 () {vuint64m1_t t;}
> +void foo45 () {vint64m2_t t;}
> +void foo46 () {vuint64m2_t t;}
> +void foo47 () {vint64m4_t t;}
> +void foo48 () {vuint64m4_t t;}
> +void foo49 () {vint64m8_t t;}
> +void foo50 () {vuint64m8_t t;}
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo57 () {vfloat32mf2_t t;}
> +void foo58 () {vfloat32m1_t t;}
> +void foo59 () {vfloat32m2_t t;}
> +void foo60 () {vfloat32m4_t t;}
> +void foo61 () {vfloat32m8_t t;}
> +void foo62 () {vfloat64m1_t t;}
> +void foo63 () {vfloat64m2_t t;}
> +void foo64 () {vfloat64m4_t t;}
> +void foo65 () {vfloat64m8_t t;}
> +
> +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo33 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
> index 1d79b6b8eac..e48ee391992 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
> @@ -3,15 +3,15 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> +void foo0 () {vbool64_t t;}
> void foo1 () {vbool32_t t;}
> void foo2 () {vbool16_t t;}
> void foo3 () {vbool8_t t;}
> void foo4 () {vbool4_t t;}
> void foo5 () {vbool2_t t;}
> void foo6 () {vbool1_t t;}
> -void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> -void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> +void foo7 () {vint8mf8_t t;}
> +void foo8 () {vuint8mf8_t t;}
> void foo9 () {vint8mf4_t t;}
> void foo10 () {vuint8mf4_t t;}
> void foo11 () {vint8mf2_t t;}
> @@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;}
> void foo18 () {vuint8m4_t t;}
> void foo19 () {vint8m8_t t;}
> void foo20 () {vuint8m8_t t;}
> -void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> -void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> +void foo21 () {vint16mf4_t t;}
> +void foo22 () {vuint16mf4_t t;}
> void foo23 () {vint16mf2_t t;}
> void foo24 () {vuint16mf2_t t;}
> void foo25 () {vint16m1_t t;}
> @@ -36,8 +36,13 @@ void foo29 () {vint16m4_t t;}
> void foo30 () {vuint16m4_t t;}
> void foo31 () {vint16m8_t t;}
> void foo32 () {vuint16m8_t t;}
> -void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> -void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo33 () {vint32mf2_t t;}
> +void foo34 () {vuint32mf2_t t;}
> void foo35 () {vint32m1_t t;}
> void foo36 () {vuint32m1_t t;}
> void foo37 () {vint32m2_t t;}
> @@ -46,20 +51,41 @@ void foo39 () {vint32m4_t t;}
> void foo40 () {vuint32m4_t t;}
> void foo41 () {vint32m8_t t;}
> void foo42 () {vuint32m8_t t;}
> -void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
> +void foo43 () {vint64m1_t t;}
> +void foo44 () {vuint64m1_t t;}
> +void foo45 () {vint64m2_t t;}
> +void foo46 () {vuint64m2_t t;}
> +void foo47 () {vint64m4_t t;}
> +void foo48 () {vuint64m4_t t;}
> +void foo49 () {vint64m8_t t;}
> +void foo50 () {vuint64m8_t t;}
> +void foo57 () {vfloat32mf2_t t;}
> void foo58 () {vfloat32m1_t t;}
> void foo59 () {vfloat32m2_t t;}
> void foo60 () {vfloat32m4_t t;}
> void foo61 () {vfloat32m8_t t;}
> -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> +void foo62 () {vfloat64m1_t t;}
> +void foo63 () {vfloat64m2_t t;}
> +void foo64 () {vfloat64m4_t t;}
> +void foo65 () {vfloat64m8_t t;}
> +
> +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32'} } */
> +void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo33 (vint32mf2_t t) {} /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
> index 98a7d391d4e..57ede32a400 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
> @@ -175,32 +175,67 @@ void f_vint64m2x4_t () {vint64m2x4_t t;}
> void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> void f_vint64m4x2_t () {vint64m4x2_t t;}
> void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
> -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
> -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
> -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
> -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
> -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
> -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
> -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
> -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
> -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
> -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
> +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
> +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
> +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
> +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void f_arg_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH v2] RISC-V: Allow RVV intrinsic for more function target
2024-04-08 1:23 ` Kito Cheng
@ 2024-04-08 1:30 ` Li, Pan2
2024-04-12 4:51 ` Christoph Müllner
0 siblings, 1 reply; 13+ messages in thread
From: Li, Pan2 @ 2024-04-08 1:30 UTC (permalink / raw)
To: Kito Cheng; +Cc: gcc-patches, juzhe.zhong, Wang, Yanzhang
Committed, thanks Kito.
Pan
-----Original Message-----
From: Kito Cheng <kito.cheng@gmail.com>
Sent: Monday, April 8, 2024 9:24 AM
To: Li, Pan2 <pan2.li@intel.com>
Cc: gcc-patches@gcc.gnu.org; juzhe.zhong@rivai.ai; Wang, Yanzhang <yanzhang.wang@intel.com>
Subject: Re: [PATCH v2] RISC-V: Allow RVV intrinsic for more function target
LGTM :)
On Tue, Apr 2, 2024 at 10:28 PM <pan2.li@intel.com> wrote:
>
> From: Pan Li <pan2.li@intel.com>
>
> In previous, we allowed the target(("arch=+v")) for a function with
> rv64gc build. This patch would like to support more arch options as
> below:
> * zve32x
> * zve32f
> * zve64x
> * zve64f
> * zve64d
> * zvfhmin
> * zvfh
> * zvk*
> * zvbb
>
> For example, we have sample code as below.
> vfloat32m1_t
> __attribute__((target("arch=+zve64f")))
> test_9 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> {
> return __riscv_vfadd_vv_f32m1 (a, b, vl);
> }
>
> It will generate the asm code when build with -O3 -march=rv64gc
> test_9:
> vsetvli zero,a0,e32,m1,ta,ma
> vfadd.vv v8,v8,v9
> ret
>
> Meanwhile, this patch introduces more error handling for the target
> attribute. Take arch=+zve32x with vfloat32m1_t will have error message
> "'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension".
> And take arch=+zve32f with vfloat16m1_t will have error message
> "'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension".
>
> By default, all the RVV types includes the cmdline march will be
> registered when include the riscv_vector.h. And we have sorts of check
> during args and return types.
>
> Below test are passed for this patch:
> * The riscv fully regression test.
>
> gcc/ChangeLog:
>
> * config/riscv/riscv-c.cc (struct pragma_intrinsic_flags): New
> struct to hold all intrinisc related flags.
> (riscv_pragma_intrinsic_flags_pollute): New func to pollute
> the intrinsic flags and backup original flags.
> (riscv_pragma_intrinsic_flags_restore): New func to restore
> the flags from the backup intrinsic flags.
> (riscv_pragma_intrinsic): Pollute the flags and register all
> possible builtin types and functions, then restore and reinit.
> * config/riscv/riscv-protos.h (reinit_builtins): New func
> decl to reinit after flags pollution.
> (riscv_option_override): New extern func decl.
> * config/riscv/riscv-vector-builtins.cc (register_builtin_types_on_null):
> New func to register builtin types if null.
> (DEF_RVV_TYPE): Ditto.
> (DEF_RVV_TUPLE_TYPE): Ditto.
> (reinit_builtins): New func impl to reinit after flags pollution.
> * config/riscv/riscv-vector-builtins.cc (expand_builtin): Return
> target rtx after error_at.
> * config/riscv/riscv.cc (riscv_vector_int_type_p): New predicate
> func to tell one tree type is integer or not.
> (riscv_vector_float_type_p): New predicate func to tell one tree
> type is float or not.
> (riscv_vector_element_bitsize): New func to get the element bitsize
> of a vector tree type.
> (riscv_vector_required_min_vlen): New func to get the required min vlen
> of a vector tree type.
> (riscv_validate_vector_type): New func to validate the tree type
> is valid on flags.
> (riscv_return_value_is_vector_type_p): Leverage the func
> riscv_validate_vector_type to do the tree type validation.
> (riscv_arguments_is_vector_type_p): Ditto.
> (riscv_override_options_internal): Ditto.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.target/riscv/rvv/base/pr109479-1.c: Adjust the existing test
> scenarios and add new error check tests.
> * gcc.target/riscv/rvv/base/pr109479-2.c: Ditto.
> * gcc.target/riscv/rvv/base/pr109479-3.c: Ditto.
> * gcc.target/riscv/rvv/base/pr109479-4.c: Diito.
> * gcc.target/riscv/rvv/base/pr109479-5.c: Diito.
> * gcc.target/riscv/rvv/base/pr109479-6.c: Diito.
> * gcc.target/riscv/rvv/base/user-10.c: Ditto.
> * gcc.target/riscv/rvv/base/user-12.c: Ditto.
> * gcc.target/riscv/rvv/base/user-13.c: Ditto.
> * gcc.target/riscv/rvv/base/user-14.c: Ditto.
> * gcc.target/riscv/rvv/base/user-15.c: Ditto.
> * gcc.target/riscv/rvv/base/user-2.c: Ditto.
> * gcc.target/riscv/rvv/base/user-3.c: Ditto.
> * gcc.target/riscv/rvv/base/user-5.c: Ditto.
> * gcc.target/riscv/rvv/base/user-6.c: Ditto.
> * gcc.target/riscv/rvv/base/user-9.c: Ditto.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: New test.
> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c: New test.
>
> Signed-off-by: Pan Li <pan2.li@intel.com>
> ---
> gcc/config/riscv/riscv-c.cc | 94 +++++-
> gcc/config/riscv/riscv-protos.h | 2 +
> gcc/config/riscv/riscv-vector-builtins.cc | 53 +++-
> gcc/config/riscv/riscv.cc | 157 +++++++++-
> .../gcc.target/riscv/rvv/base/pr109479-1.c | 29 +-
> .../gcc.target/riscv/rvv/base/pr109479-2.c | 29 +-
> .../gcc.target/riscv/rvv/base/pr109479-3.c | 50 +++-
> .../gcc.target/riscv/rvv/base/pr109479-4.c | 51 +++-
> .../gcc.target/riscv/rvv/base/pr109479-5.c | 37 ++-
> .../gcc.target/riscv/rvv/base/pr109479-6.c | 33 ++-
> .../target_attribute_v_with_intrinsic-10.c | 12 +
> .../target_attribute_v_with_intrinsic-11.c | 26 ++
> .../target_attribute_v_with_intrinsic-12.c | 33 +++
> .../target_attribute_v_with_intrinsic-13.c | 33 +++
> .../target_attribute_v_with_intrinsic-14.c | 40 +++
> .../target_attribute_v_with_intrinsic-15.c | 47 +++
> .../target_attribute_v_with_intrinsic-16.c | 12 +
> .../target_attribute_v_with_intrinsic-17.c | 13 +
> .../target_attribute_v_with_intrinsic-18.c | 13 +
> .../target_attribute_v_with_intrinsic-19.c | 13 +
> .../target_attribute_v_with_intrinsic-20.c | 13 +
> .../target_attribute_v_with_intrinsic-21.c | 13 +
> .../target_attribute_v_with_intrinsic-22.c | 13 +
> .../target_attribute_v_with_intrinsic-23.c | 13 +
> .../target_attribute_v_with_intrinsic-24.c | 13 +
> .../target_attribute_v_with_intrinsic-25.c | 13 +
> .../target_attribute_v_with_intrinsic-26.c | 13 +
> .../target_attribute_v_with_intrinsic-27.c | 13 +
> .../target_attribute_v_with_intrinsic-28.c | 13 +
> .../target_attribute_v_with_intrinsic-29.c | 13 +
> .../target_attribute_v_with_intrinsic-30.c | 12 +
> .../target_attribute_v_with_intrinsic-31.c | 12 +
> .../target_attribute_v_with_intrinsic-32.c | 12 +
> .../target_attribute_v_with_intrinsic-33.c | 12 +
> .../target_attribute_v_with_intrinsic-34.c | 12 +
> .../target_attribute_v_with_intrinsic-35.c | 12 +
> .../target_attribute_v_with_intrinsic-36.c | 12 +
> .../target_attribute_v_with_intrinsic-37.c | 12 +
> .../target_attribute_v_with_intrinsic-38.c | 12 +
> .../target_attribute_v_with_intrinsic-39.c | 12 +
> .../target_attribute_v_with_intrinsic-40.c | 12 +
> .../target_attribute_v_with_intrinsic-41.c | 12 +
> .../target_attribute_v_with_intrinsic-42.c | 12 +
> .../target_attribute_v_with_intrinsic-43.c | 12 +
> .../target_attribute_v_with_intrinsic-44.c | 12 +
> .../target_attribute_v_with_intrinsic-45.c | 12 +
> .../target_attribute_v_with_intrinsic-46.c | 12 +
> .../target_attribute_v_with_intrinsic-47.c | 12 +
> .../target_attribute_v_with_intrinsic-48.c | 12 +
> .../target_attribute_v_with_intrinsic-49.c | 12 +
> .../target_attribute_v_with_intrinsic-50.c | 12 +
> .../target_attribute_v_with_intrinsic-51.c | 12 +
> .../target_attribute_v_with_intrinsic-52.c | 12 +
> .../target_attribute_v_with_intrinsic-53.c | 12 +
> .../target_attribute_v_with_intrinsic-9.c | 12 +
> .../gcc.target/riscv/rvv/base/user-10.c | 39 ++-
> .../gcc.target/riscv/rvv/base/user-12.c | 275 ++++++++++++------
> .../gcc.target/riscv/rvv/base/user-13.c | 156 ++++++----
> .../gcc.target/riscv/rvv/base/user-14.c | 257 ++++++++++------
> .../gcc.target/riscv/rvv/base/user-15.c | 106 ++++---
> .../gcc.target/riscv/rvv/base/user-2.c | 33 ++-
> .../gcc.target/riscv/rvv/base/user-3.c | 18 +-
> .../gcc.target/riscv/rvv/base/user-5.c | 78 +++--
> .../gcc.target/riscv/rvv/base/user-6.c | 66 +++--
> .../gcc.target/riscv/rvv/base/user-9.c | 93 ++++--
> 65 files changed, 1886 insertions(+), 442 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
>
> diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc
> index 01314037461..43c8eecbb6f 100644
> --- a/gcc/config/riscv/riscv-c.cc
> +++ b/gcc/config/riscv/riscv-c.cc
> @@ -34,6 +34,72 @@ along with GCC; see the file COPYING3. If not see
>
> #define builtin_define(TXT) cpp_define (pfile, TXT)
>
> +struct pragma_intrinsic_flags
> +{
> + int intrinsic_target_flags;
> +
> + int intrinsic_riscv_vector_elen_flags;
> + int intrinsic_riscv_zvl_flags;
> + int intrinsic_riscv_zvb_subext;
> + int intrinsic_riscv_zvk_subext;
> +};
> +
> +static void
> +riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags)
> +{
> + flags->intrinsic_target_flags = target_flags;
> + flags->intrinsic_riscv_vector_elen_flags = riscv_vector_elen_flags;
> + flags->intrinsic_riscv_zvl_flags = riscv_zvl_flags;
> + flags->intrinsic_riscv_zvb_subext = riscv_zvb_subext;
> + flags->intrinsic_riscv_zvk_subext = riscv_zvk_subext;
> +
> + target_flags = target_flags
> + | MASK_VECTOR;
> +
> + riscv_zvl_flags = riscv_zvl_flags
> + | MASK_ZVL32B
> + | MASK_ZVL64B
> + | MASK_ZVL128B;
> +
> + riscv_vector_elen_flags = riscv_vector_elen_flags
> + | MASK_VECTOR_ELEN_32
> + | MASK_VECTOR_ELEN_64
> + | MASK_VECTOR_ELEN_FP_16
> + | MASK_VECTOR_ELEN_FP_32
> + | MASK_VECTOR_ELEN_FP_64;
> +
> + riscv_zvb_subext = riscv_zvb_subext
> + | MASK_ZVBB
> + | MASK_ZVBC
> + | MASK_ZVKB;
> +
> + riscv_zvk_subext = riscv_zvk_subext
> + | MASK_ZVKG
> + | MASK_ZVKNED
> + | MASK_ZVKNHA
> + | MASK_ZVKNHB
> + | MASK_ZVKSED
> + | MASK_ZVKSH
> + | MASK_ZVKN
> + | MASK_ZVKNC
> + | MASK_ZVKNG
> + | MASK_ZVKS
> + | MASK_ZVKSC
> + | MASK_ZVKSG
> + | MASK_ZVKT;
> +}
> +
> +static void
> +riscv_pragma_intrinsic_flags_restore (struct pragma_intrinsic_flags *flags)
> +{
> + target_flags = flags->intrinsic_target_flags;
> +
> + riscv_vector_elen_flags = flags->intrinsic_riscv_vector_elen_flags;
> + riscv_zvl_flags = flags->intrinsic_riscv_zvl_flags;
> + riscv_zvb_subext = flags->intrinsic_riscv_zvb_subext;
> + riscv_zvk_subext = flags->intrinsic_riscv_zvk_subext;
> +}
> +
> static int
> riscv_ext_version_value (unsigned major, unsigned minor)
> {
> @@ -201,20 +267,20 @@ riscv_pragma_intrinsic (cpp_reader *)
> if (strcmp (name, "vector") == 0
> || strcmp (name, "xtheadvector") == 0)
> {
> - if (TARGET_VECTOR)
> - riscv_vector::handle_pragma_vector ();
> - else /* Indicates riscv_vector.h is included but v is missing in arch */
> - {
> - /* To make the the rvv types and intrinsic API available for the
> - target("arch=+v") attribute, we need to temporally enable the
> - TARGET_VECTOR, and disable it after all initialized. */
> - target_flags |= MASK_VECTOR;
> -
> - riscv_vector::init_builtins ();
> - riscv_vector::handle_pragma_vector ();
> -
> - target_flags &= ~MASK_VECTOR;
> - }
> + struct pragma_intrinsic_flags backup_flags;
> +
> + riscv_pragma_intrinsic_flags_pollute (&backup_flags);
> +
> + riscv_option_override ();
> + init_adjust_machine_modes ();
> + riscv_vector::reinit_builtins ();
> + riscv_vector::handle_pragma_vector ();
> +
> + riscv_pragma_intrinsic_flags_restore (&backup_flags);
> +
> + /* Re-initialize after the flags are restored. */
> + riscv_option_override ();
> + init_adjust_machine_modes ();
> }
> else
> error ("unknown %<#pragma riscv intrinsic%> option %qs", name);
> diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h
> index b8735593805..4677d9c46cd 100644
> --- a/gcc/config/riscv/riscv-protos.h
> +++ b/gcc/config/riscv/riscv-protos.h
> @@ -546,6 +546,7 @@ enum avl_type
> };
> /* Routines implemented in riscv-vector-builtins.cc. */
> void init_builtins (void);
> +void reinit_builtins (void);
> const char *mangle_builtin_type (const_tree);
> tree lookup_vector_type_attribute (const_tree);
> bool builtin_type_p (const_tree);
> @@ -762,6 +763,7 @@ extern bool
> riscv_option_valid_attribute_p (tree, tree, tree, int);
> extern void
> riscv_override_options_internal (struct gcc_options *);
> +extern void riscv_option_override (void);
>
> struct riscv_tune_param;
> /* Information about one micro-arch we know about. */
> diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc
> index db9246eed2d..53ccea7889e 100644
> --- a/gcc/config/riscv/riscv-vector-builtins.cc
> +++ b/gcc/config/riscv/riscv-vector-builtins.cc
> @@ -3123,6 +3123,36 @@ register_builtin_types ()
> #include "riscv-vector-builtins.def"
> }
>
> +/* Similar as register_builtin_types but perform the registration if and
> + only if the element of abi_vector_type is NULL_TREE. */
> +static void
> +register_builtin_types_on_null ()
> +{
> + /* Get type node from get_typenode_from_name to prevent we have different type
> + node define in different target libraries, e.g. int32_t defined as
> + `long` in RV32/newlib-stdint, but `int` for RV32/glibc-stdint.h.
> + NOTE: uint[16|32|64]_type_node already defined in tree.h. */
> + tree int8_type_node = get_typenode_from_name (INT8_TYPE);
> + tree uint8_type_node = get_typenode_from_name (UINT8_TYPE);
> + tree int16_type_node = get_typenode_from_name (INT16_TYPE);
> + tree int32_type_node = get_typenode_from_name (INT32_TYPE);
> + tree int64_type_node = get_typenode_from_name (INT64_TYPE);
> +
> + machine_mode mode;
> +#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
> + ARGS...) \
> + mode = VECTOR_MODE##mode; \
> + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
> + register_builtin_type (VECTOR_TYPE_##NAME, SCALAR_TYPE##_type_node, mode);
> +
> +#define DEF_RVV_TUPLE_TYPE(NAME, NCHARS, ABI_NAME, SUBPART_TYPE, SCALAR_TYPE, \
> + NF, VECTOR_SUFFIX) \
> + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
> + register_tuple_type (VECTOR_TYPE_##NAME, VECTOR_TYPE_##SUBPART_TYPE, \
> + SCALAR_TYPE##_type_node, NF);
> +#include "riscv-vector-builtins.def"
> +}
> +
> /* Register vector type TYPE under its risv_vector.h name. */
> static void
> register_vector_type (vector_type_index type)
> @@ -4419,6 +4449,22 @@ init_builtins ()
> handle_pragma_vector ();
> }
>
> +/* Reinitialize builtins similar to init_builtins, but only the null
> + builtin types will be registered. */
> +void
> +reinit_builtins ()
> +{
> + rvv_switcher rvv;
> +
> + if (!TARGET_VECTOR)
> + return;
> +
> + register_builtin_types_on_null ();
> +
> + if (in_lto_p)
> + handle_pragma_vector ();
> +}
> +
> /* Implement TARGET_VERIFY_TYPE_CONTEXT for RVV types. */
> bool
> verify_type_context (location_t loc, type_context_kind context, const_tree type,
> @@ -4588,8 +4634,11 @@ expand_builtin (unsigned int code, tree exp, rtx target)
> registered_function &rfn = *(*registered_functions)[code];
>
> if (!TARGET_VECTOR)
> - error_at (EXPR_LOCATION (exp),
> - "built-in function %qE requires the V ISA extension", exp);
> + {
> + error_at (EXPR_LOCATION (exp),
> + "built-in function %qE requires the V ISA extension", exp);
> + return target;
> + }
>
> return function_expander (rfn.instance, rfn.decl, exp, target).expand ();
> }
> diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
> index fe9976bfffe..2a71badfdc9 100644
> --- a/gcc/config/riscv/riscv.cc
> +++ b/gcc/config/riscv/riscv.cc
> @@ -5459,6 +5459,152 @@ riscv_v_abi ()
> return v_abi;
> }
>
> +static bool
> +riscv_vector_int_type_p (const_tree type)
> +{
> + machine_mode mode = TYPE_MODE (type);
> +
> + if (VECTOR_MODE_P (mode))
> + return INTEGRAL_MODE_P (GET_MODE_INNER (mode));
> +
> + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> + return strstr (name, "int") != NULL || strstr (name, "uint") != NULL;
> +}
> +
> +static bool
> +riscv_vector_float_type_p (const_tree type)
> +{
> + machine_mode mode = TYPE_MODE (type);
> +
> + if (VECTOR_MODE_P (mode))
> + return FLOAT_MODE_P (GET_MODE_INNER (mode));
> +
> + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> + return strstr (name, "vfloat") != NULL;
> +}
> +
> +static unsigned
> +riscv_vector_element_bitsize (const_tree type)
> +{
> + machine_mode mode = TYPE_MODE (type);
> +
> + if (VECTOR_MODE_P (mode))
> + return GET_MODE_BITSIZE (GET_MODE_INNER (mode));
> +
> + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> +
> + if (strstr (name, "bool") != NULL)
> + return 1;
> + else if (strstr (name, "int8") != NULL)
> + return 8;
> + else if (strstr (name, "int16") != NULL || strstr (name, "float16") != NULL)
> + return 16;
> + else if (strstr (name, "int32") != NULL || strstr (name, "float32") != NULL)
> + return 32;
> + else if (strstr (name, "int64") != NULL || strstr (name, "float64") != NULL)
> + return 64;
> +
> + gcc_unreachable ();
> +}
> +
> +static unsigned
> +riscv_vector_required_min_vlen (const_tree type)
> +{
> + machine_mode mode = TYPE_MODE (type);
> +
> + if (riscv_v_ext_mode_p (mode))
> + return TARGET_MIN_VLEN;
> +
> + unsigned element_bitsize = riscv_vector_element_bitsize (type);
> + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> +
> + if (strstr (name, "bool64") != NULL)
> + return element_bitsize * 64;
> + else if (strstr (name, "bool32") != NULL)
> + return element_bitsize * 32;
> + else if (strstr (name, "bool16") != NULL)
> + return element_bitsize * 16;
> + else if (strstr (name, "bool8") != NULL)
> + return element_bitsize * 8;
> + else if (strstr (name, "bool4") != NULL)
> + return element_bitsize * 4;
> + else if (strstr (name, "bool2") != NULL)
> + return element_bitsize * 2;
> +
> + if (strstr (name, "mf8") != NULL)
> + return element_bitsize * 8;
> + else if (strstr (name, "mf4") != NULL)
> + return element_bitsize * 4;
> + else if (strstr (name, "mf2") != NULL)
> + return element_bitsize * 2;
> +
> + return element_bitsize;
> +}
> +
> +static void
> +riscv_validate_vector_type (const_tree type, const char *hint)
> +{
> + gcc_assert (riscv_vector_type_p (type));
> +
> + if (!TARGET_VECTOR)
> + {
> + error_at (input_location, "%s %qT requires the V ISA extension",
> + hint, type);
> + return;
> + }
> +
> + unsigned element_bitsize = riscv_vector_element_bitsize (type);
> + bool int_type_p = riscv_vector_int_type_p (type);
> +
> + if (int_type_p && element_bitsize == 64
> + && !TARGET_VECTOR_ELEN_64_P (riscv_vector_elen_flags))
> + {
> + error_at (input_location,
> + "%s %qT requires the zve64x, zve64f, zve64d or v ISA extension",
> + hint, type);
> + return;
> + }
> +
> + bool float_type_p = riscv_vector_float_type_p (type);
> +
> + if (float_type_p && element_bitsize == 16
> + && !TARGET_VECTOR_ELEN_FP_16_P (riscv_vector_elen_flags))
> + {
> + error_at (input_location,
> + "%s %qT requires the zvfhmin or zvfh ISA extension",
> + hint, type);
> + return;
> + }
> +
> + if (float_type_p && element_bitsize == 32
> + && !TARGET_VECTOR_ELEN_FP_32_P (riscv_vector_elen_flags))
> + {
> + error_at (input_location,
> + "%s %qT requires the zve32f, zve64f, zve64d or v ISA extension",
> + hint, type);
> + return;
> + }
> +
> + if (float_type_p && element_bitsize == 64
> + && !TARGET_VECTOR_ELEN_FP_64_P (riscv_vector_elen_flags))
> + {
> + error_at (input_location,
> + "%s %qT requires the zve64d or v ISA extension", hint, type);
> + return;
> + }
> +
> + unsigned required_min_vlen = riscv_vector_required_min_vlen (type);
> +
> + if (TARGET_MIN_VLEN < required_min_vlen)
> + {
> + error_at (
> + input_location,
> + "%s %qT requires the minimal vector length %qd but %qd is given",
> + hint, type, required_min_vlen, TARGET_MIN_VLEN);
> + return;
> + }
> +}
> +
> /* Return true if a function with type FNTYPE returns its value in
> RISC-V V registers. */
>
> @@ -5469,9 +5615,7 @@ riscv_return_value_is_vector_type_p (const_tree fntype)
>
> if (riscv_vector_type_p (return_type))
> {
> - if (!TARGET_VECTOR)
> - error_at (input_location,
> - "return type %qT requires the V ISA extension", return_type);
> + riscv_validate_vector_type (return_type, "return type");
> return true;
> }
> else
> @@ -5490,10 +5634,7 @@ riscv_arguments_is_vector_type_p (const_tree fntype)
> tree arg_type = TREE_VALUE (chain);
> if (riscv_vector_type_p (arg_type))
> {
> - if (!TARGET_VECTOR)
> - error_at (input_location,
> - "argument type %qT requires the V ISA extension",
> - arg_type);
> + riscv_validate_vector_type (arg_type, "argument type");
> return true;
> }
> }
> @@ -9107,7 +9248,7 @@ riscv_override_options_internal (struct gcc_options *opts)
>
> /* Implement TARGET_OPTION_OVERRIDE. */
>
> -static void
> +void
> riscv_option_override (void)
> {
> #ifdef SUBTARGET_OVERRIDE_OPTIONS
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> index a13cc12c543..1bd7efe61f2 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> @@ -3,11 +3,24 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> -void foo1 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> -void foo2 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> -void foo3 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> -void foo4 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> -void foo5 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> -void foo6 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> -void foo7 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo0 () {__rvv_int64m1_t t;}
> +void foo1 () {__rvv_uint64m1_t t;}
> +void foo2 () {__rvv_int64m2_t t;}
> +void foo3 () {__rvv_uint64m2_t t;}
> +void foo4 () {__rvv_int64m4_t t;}
> +void foo5 () {__rvv_uint64m4_t t;}
> +void foo6 () {__rvv_int64m8_t t;}
> +void foo7 () {__rvv_uint64m8_t t;}
> +
> +void new_foo0 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo1 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo2 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo3 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo4 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo5 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo6 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo7 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> index dd6bcb0f548..ce6a62d1405 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> @@ -3,11 +3,24 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo1 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo2 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo3 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo4 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo5 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo6 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo7 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo0 () {vint64m1_t t;}
> +void foo1 () {vuint64m1_t t;}
> +void foo2 () {vint64m2_t t;}
> +void foo3 () {vuint64m2_t t;}
> +void foo4 () {vint64m4_t t;}
> +void foo5 () {vuint64m4_t t;}
> +void foo6 () {vint64m8_t t;}
> +void foo7 () {vuint64m8_t t;}
> +
> +void new_foo0 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo1 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo2 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo3 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo4 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo5 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo6 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo7 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> index 01e86223da9..5c0cd1b1f7f 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> @@ -3,18 +3,38 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {__rvv_bool64_t t;} /* { dg-error {unknown type name '__rvv_bool64_t'} } */
> -void foo1 () {__rvv_int8mf8_t t;} /* { dg-error {unknown type name '__rvv_int8mf8_t'} } */
> -void foo2 () {__rvv_uint8mf8_t t;} /* { dg-error {unknown type name '__rvv_uint8mf8_t'} } */
> -void foo3 () {__rvv_int16mf4_t t;} /* { dg-error {unknown type name '__rvv_int16mf4_t'} } */
> -void foo4 () {__rvv_uint16mf4_t t;} /* { dg-error {unknown type name '__rvv_uint16mf4_t'} } */
> -void foo5 () {__rvv_int32mf2_t t;} /* { dg-error {unknown type name '__rvv_int32mf2_t'} } */
> -void foo6 () {__rvv_uint32mf2_t t;} /* { dg-error {unknown type name '__rvv_uint32mf2_t'} } */
> -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo0 () {__rvv_bool64_t t;}
> +void foo1 () {__rvv_int8mf8_t t;}
> +void foo2 () {__rvv_uint8mf8_t t;}
> +void foo3 () {__rvv_int16mf4_t t;}
> +void foo4 () {__rvv_uint16mf4_t t;}
> +void foo5 () {__rvv_int32mf2_t t;}
> +void foo6 () {__rvv_uint32mf2_t t;}
> +void foo7 () {__rvv_int64m1_t t;}
> +void foo8 () {__rvv_uint64m1_t t;}
> +void foo9 () {__rvv_int64m2_t t;}
> +void foo10 () {__rvv_uint64m2_t t;}
> +void foo11 () {__rvv_int64m4_t t;}
> +void foo12 () {__rvv_uint64m4_t t;}
> +void foo13 () {__rvv_int64m8_t t;}
> +void foo14 () {__rvv_uint64m8_t t;}
> +
> +void new_foo0 (__rvv_bool64_t t) { } /* { dg-error {argument type '__rvv_bool64_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo1 (__rvv_int8mf8_t t) { } /* { dg-error {argument type '__rvv_int8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo2 (__rvv_uint8mf8_t t) { } /* { dg-error {argument type '__rvv_uint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo3 (__rvv_int16mf4_t t) { } /* { dg-error {argument type '__rvv_int16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo4 (__rvv_uint16mf4_t t) { } /* { dg-error {argument type '__rvv_uint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo5 (__rvv_int32mf2_t t) { } /* { dg-error {argument type '__rvv_int32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo6 (__rvv_uint32mf2_t t) { } /* { dg-error {argument type '__rvv_uint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> index 62385b8dcd1..48e1f278e70 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> @@ -3,18 +3,39 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> -void foo1 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> -void foo2 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> -void foo3 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> -void foo4 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> -void foo5 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> -void foo6 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo0 () {vbool64_t t;}
> +void foo1 () {vint8mf8_t t;}
> +void foo2 () {vuint8mf8_t t;}
> +void foo3 () {vint16mf4_t t;}
> +void foo4 () {vuint16mf4_t t;}
> +void foo5 () {vint32mf2_t t;}
> +void foo6 () {vuint32mf2_t t;}
> +void foo7 () {vint64m1_t t;}
> +void foo8 () {vuint64m1_t t;}
> +void foo9 () {vint64m2_t t;}
> +void foo10 () {vuint64m2_t t;}
> +void foo11 () {vint64m4_t t;}
> +void foo12 () {vuint64m4_t t;}
> +void foo13 () {vint64m8_t t;}
> +void foo14 () {vuint64m8_t t;}
> +
> +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo1 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo2 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo3 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo4 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo5 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo6 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> index 26a0a742965..af237f5d759 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> @@ -3,6 +3,10 @@
>
> #include "riscv_vector.h"
>
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> void foo0 () {__rvv_bool64_t t;}
> void foo1 () {__rvv_int8mf8_t t;}
> void foo2 () {__rvv_uint8mf8_t t;}
> @@ -10,11 +14,28 @@ void foo3 () {__rvv_int16mf4_t t;}
> void foo4 () {__rvv_uint16mf4_t t;}
> void foo5 () {__rvv_int32mf2_t t;}
> void foo6 () {__rvv_uint32mf2_t t;}
> -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> +void foo7 () {__rvv_int64m1_t t;}
> +void foo8 () {__rvv_uint64m1_t t;}
> +void foo9 () {__rvv_int64m2_t t;}
> +void foo10 () {__rvv_uint64m2_t t;}
> +void foo11 () {__rvv_int64m4_t t;}
> +void foo12 () {__rvv_uint64m4_t t;}
> +void foo13 () {__rvv_int64m8_t t;}
> +void foo14 () {__rvv_uint64m8_t t;}
> +
> +void new_foo0 (__rvv_bool64_t t) { }
> +void new_foo1 (__rvv_int8mf8_t t) { }
> +void new_foo2 (__rvv_uint8mf8_t t) { }
> +void new_foo3 (__rvv_int16mf4_t t) { }
> +void new_foo4 (__rvv_uint16mf4_t t) { }
> +void new_foo5 (__rvv_int32mf2_t t) { }
> +void new_foo6 (__rvv_uint32mf2_t t) { }
> +
> +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> index eb66f3ea2bd..2779fbda053 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> @@ -10,11 +10,28 @@ void foo3 () {vint16mf4_t t;}
> void foo4 () {vuint16mf4_t t;}
> void foo5 () {vint32mf2_t t;}
> void foo6 () {vuint32mf2_t t;}
> -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> +void foo7 () {vint64m1_t t;}
> +void foo8 () {vuint64m1_t t;}
> +void foo9 () {vint64m2_t t;}
> +void foo10 () {vuint64m2_t t;}
> +void foo11 () {vint64m4_t t;}
> +void foo12 () {vuint64m4_t t;}
> +void foo13 () {vint64m8_t t;}
> +void foo14 () {vuint64m8_t t;}
> +
> +void new_foo0 (vbool64_t t) { }
> +void new_foo1 (vint8mf8_t t) { }
> +void new_foo2 (vuint8mf8_t t) { }
> +void new_foo3 (vint16mf4_t t) { }
> +void new_foo4 (vuint16mf4_t t) { }
> +void new_foo5 (vint32mf2_t t) { }
> +void new_foo6 (vuint32mf2_t t) { }
> +
> +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> new file mode 100644
> index 00000000000..3e6844475d5
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+v,+zvfh")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> new file mode 100644
> index 00000000000..df053073bc8
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> @@ -0,0 +1,26 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> new file mode 100644
> index 00000000000..51a91886f52
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> @@ -0,0 +1,33 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_4 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> new file mode 100644
> index 00000000000..994b1c0a5db
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> @@ -0,0 +1,33 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> new file mode 100644
> index 00000000000..caa2a10e943
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> @@ -0,0 +1,40 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> new file mode 100644
> index 00000000000..72a2be6e560
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> @@ -0,0 +1,47 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint8m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i8m1 (a, b, vl);
> +}
> +
> +vint16m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i16m1 (a, b, vl);
> +}
> +
> +vint32m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i32m1 (a, b, vl);
> +}
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_6 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> new file mode 100644
> index 00000000000..dabdcf8ff21
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+v,+zvfhmin")))
> +test_1 (vfloat16mf2_t a, size_t vl)
> +{
> + return __riscv_vfwcvt_f_f_v_f32m1 (a, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> new file mode 100644
> index 00000000000..a064417169d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> new file mode 100644
> index 00000000000..61d3fb25dc2
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> new file mode 100644
> index 00000000000..bfc26f8210a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> new file mode 100644
> index 00000000000..35a2924234f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> new file mode 100644
> index 00000000000..e3aef339d68
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> new file mode 100644
> index 00000000000..b5a894ecad4
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> new file mode 100644
> index 00000000000..7267fa3304b
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve32f")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> new file mode 100644
> index 00000000000..5a7c4481a5a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> new file mode 100644
> index 00000000000..f1241cb1771
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> new file mode 100644
> index 00000000000..2738a29d673
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> new file mode 100644
> index 00000000000..8610000b474
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> new file mode 100644
> index 00000000000..7eaa6adab82
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> new file mode 100644
> index 00000000000..eb74e33299f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> +
> +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> new file mode 100644
> index 00000000000..f68b4622ee7
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> new file mode 100644
> index 00000000000..2f146cda2dd
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> new file mode 100644
> index 00000000000..737b5b00d73
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> new file mode 100644
> index 00000000000..559e90e87f4
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zvfh")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> new file mode 100644
> index 00000000000..91ee510c77b
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> new file mode 100644
> index 00000000000..ec184cff5dc
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vint64m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> +{
> + return __riscv_vadd_vv_i64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> new file mode 100644
> index 00000000000..a37f67c5320
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64d")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> new file mode 100644
> index 00000000000..3d62027848e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zvfh")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> new file mode 100644
> index 00000000000..9b8a9cbafcb
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> new file mode 100644
> index 00000000000..67469a18cd9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64f")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> new file mode 100644
> index 00000000000..ce89391e4e7
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> new file mode 100644
> index 00000000000..8836cb14703
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zvfh")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> new file mode 100644
> index 00000000000..57e542da1b8
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat16m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> new file mode 100644
> index 00000000000..7fb6b20a32e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> new file mode 100644
> index 00000000000..ce6f97d8584
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve32x")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> new file mode 100644
> index 00000000000..dbf92a3df24
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat64m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> new file mode 100644
> index 00000000000..6d2e4e27bf4
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+zve64x")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> new file mode 100644
> index 00000000000..94bbcb05e4d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvbb")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
> +{
> + return __riscv_vandn_vv_u32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> new file mode 100644
> index 00000000000..054b7630fa9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvknha")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl)
> +{
> + return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> new file mode 100644
> index 00000000000..b2e6658f4d3
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m2_t
> +__attribute__((target("arch=+zvksh")))
> +test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl)
> +{
> + return __riscv_vsm3me_vv_u32m2 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> new file mode 100644
> index 00000000000..8574cd049cf
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvkned")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
> +{
> + return __riscv_vaesdm_vv_u32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> new file mode 100644
> index 00000000000..e27b4d5fbb3
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvkg")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
> +{
> + return __riscv_vgmul_vv_u32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> new file mode 100644
> index 00000000000..2213c6fe35d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m2_t
> +__attribute__((target("arch=+zvksed")))
> +test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl)
> +{
> + return __riscv_vsm4r_vv_u32m2 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> new file mode 100644
> index 00000000000..66901cc72ad
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vuint32m1_t
> +__attribute__((target("arch=+zvknhb")))
> +test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl)
> +{
> + return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
> new file mode 100644
> index 00000000000..0764f403b89
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
> @@ -0,0 +1,12 @@
> +/* Test that we do not have error when compile */
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> +
> +#include "riscv_vector.h"
> +
> +vfloat32m1_t
> +__attribute__((target("arch=+v")))
> +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> +{
> + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> +}
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
> index fdc28c77426..6bb9460d6d2 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
> @@ -193,14 +193,31 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
> index 332ff7627b6..2f2c150eeb0 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
> @@ -3,20 +3,20 @@
>
> #include "riscv_vector.h"
>
> -void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */
> -void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */
> -void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */
> -void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */
> -void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */
> -void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */
> -void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */
> -void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */
> -void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */
> -void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */
> -void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */
> -void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */
> -void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */
> -void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */
> +void f_vint8mf8x2_t () {vint8mf8x2_t t;}
> +void f_vuint8mf8x2_t () {vuint8mf8x2_t t;}
> +void f_vint8mf8x3_t () {vint8mf8x3_t t;}
> +void f_vuint8mf8x3_t () {vuint8mf8x3_t t;}
> +void f_vint8mf8x4_t () {vint8mf8x4_t t;}
> +void f_vuint8mf8x4_t () {vuint8mf8x4_t t;}
> +void f_vint8mf8x5_t () {vint8mf8x5_t t;}
> +void f_vuint8mf8x5_t () {vuint8mf8x5_t t;}
> +void f_vint8mf8x6_t () {vint8mf8x6_t t;}
> +void f_vuint8mf8x6_t () {vuint8mf8x6_t t;}
> +void f_vint8mf8x7_t () {vint8mf8x7_t t;}
> +void f_vuint8mf8x7_t () {vuint8mf8x7_t t;}
> +void f_vint8mf8x8_t () {vint8mf8x8_t t;}
> +void f_vuint8mf8x8_t () {vuint8mf8x8_t t;}
> void f_vint8mf4x2_t () {vint8mf4x2_t t;}
> void f_vuint8mf4x2_t () {vuint8mf4x2_t t;}
> void f_vint8mf4x3_t () {vint8mf4x3_t t;}
> @@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;}
> void f_vuint8m2x4_t () {vuint8m2x4_t t;}
> void f_vint8m4x2_t () {vint8m4x2_t t;}
> void f_vuint8m4x2_t () {vuint8m4x2_t t;}
> -void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */
> -void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */
> -void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */
> -void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */
> -void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */
> -void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */
> -void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */
> -void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */
> -void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */
> -void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */
> -void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */
> -void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */
> -void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */
> -void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */
> +void f_vint16mf4x2_t () {vint16mf4x2_t t;}
> +void f_vuint16mf4x2_t () {vuint16mf4x2_t t;}
> +void f_vint16mf4x3_t () {vint16mf4x3_t t;}
> +void f_vuint16mf4x3_t () {vuint16mf4x3_t t;}
> +void f_vint16mf4x4_t () {vint16mf4x4_t t;}
> +void f_vuint16mf4x4_t () {vuint16mf4x4_t t;}
> +void f_vint16mf4x5_t () {vint16mf4x5_t t;}
> +void f_vuint16mf4x5_t () {vuint16mf4x5_t t;}
> +void f_vint16mf4x6_t () {vint16mf4x6_t t;}
> +void f_vuint16mf4x6_t () {vuint16mf4x6_t t;}
> +void f_vint16mf4x7_t () {vint16mf4x7_t t;}
> +void f_vuint16mf4x7_t () {vuint16mf4x7_t t;}
> +void f_vint16mf4x8_t () {vint16mf4x8_t t;}
> +void f_vuint16mf4x8_t () {vuint16mf4x8_t t;}
> void f_vint16mf2x2_t () {vint16mf2x2_t t;}
> void f_vuint16mf2x2_t () {vuint16mf2x2_t t;}
> void f_vint16mf2x3_t () {vint16mf2x3_t t;}
> @@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;}
> void f_vuint16m2x4_t () {vuint16m2x4_t t;}
> void f_vint16m4x2_t () {vint16m4x2_t t;}
> void f_vuint16m4x2_t () {vuint16m4x2_t t;}
> -void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */
> -void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */
> -void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */
> -void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */
> -void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */
> -void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */
> -void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */
> -void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */
> -void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */
> -void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */
> -void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */
> -void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */
> -void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */
> -void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */
> +void f_vint32mf2x2_t () {vint32mf2x2_t t;}
> +void f_vuint32mf2x2_t () {vuint32mf2x2_t t;}
> +void f_vint32mf2x3_t () {vint32mf2x3_t t;}
> +void f_vuint32mf2x3_t () {vuint32mf2x3_t t;}
> +void f_vint32mf2x4_t () {vint32mf2x4_t t;}
> +void f_vuint32mf2x4_t () {vuint32mf2x4_t t;}
> +void f_vint32mf2x5_t () {vint32mf2x5_t t;}
> +void f_vuint32mf2x5_t () {vuint32mf2x5_t t;}
> +void f_vint32mf2x6_t () {vint32mf2x6_t t;}
> +void f_vuint32mf2x6_t () {vuint32mf2x6_t t;}
> +void f_vint32mf2x7_t () {vint32mf2x7_t t;}
> +void f_vuint32mf2x7_t () {vuint32mf2x7_t t;}
> +void f_vint32mf2x8_t () {vint32mf2x8_t t;}
> +void f_vuint32mf2x8_t () {vuint32mf2x8_t t;}
> void f_vint32m1x2_t () {vint32m1x2_t t;}
> void f_vuint32m1x2_t () {vuint32m1x2_t t;}
> void f_vint32m1x3_t () {vint32m1x3_t t;}
> @@ -153,54 +153,143 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> void f_vint32m4x2_t () {vint32m4x2_t t;}
> void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
> -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
> -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
> -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
> -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
> -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
> -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
> -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
> -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
> -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
> -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vint64m1x2_t () {vint64m1x2_t t;}
> +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> +void f_vint64m1x3_t () {vint64m1x3_t t;}
> +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> +void f_vint64m1x4_t () {vint64m1x4_t t;}
> +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> +void f_vint64m1x5_t () {vint64m1x5_t t;}
> +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> +void f_vint64m1x6_t () {vint64m1x6_t t;}
> +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> +void f_vint64m1x7_t () {vint64m1x7_t t;}
> +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> +void f_vint64m1x8_t () {vint64m1x8_t t;}
> +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> +void f_vint64m2x2_t () {vint64m2x2_t t;}
> +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> +void f_vint64m2x3_t () {vint64m2x3_t t;}
> +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> +void f_vint64m2x4_t () {vint64m2x4_t t;}
> +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> +void f_vint64m4x2_t () {vint64m4x2_t t;}
> +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
> +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
> +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
> +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
> +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
> index ed180749cb6..967eeece274 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
> @@ -153,54 +153,108 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> void f_vint32m4x2_t () {vint32m4x2_t t;}
> void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
> -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
> -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
> -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
> -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
> -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
> -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
> -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
> -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
> -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
> -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +void f_vint64m1x2_t () {vint64m1x2_t t;}
> +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> +void f_vint64m1x3_t () {vint64m1x3_t t;}
> +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> +void f_vint64m1x4_t () {vint64m1x4_t t;}
> +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> +void f_vint64m1x5_t () {vint64m1x5_t t;}
> +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> +void f_vint64m1x6_t () {vint64m1x6_t t;}
> +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> +void f_vint64m1x7_t () {vint64m1x7_t t;}
> +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> +void f_vint64m1x8_t () {vint64m1x8_t t;}
> +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> +void f_vint64m2x2_t () {vint64m2x2_t t;}
> +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> +void f_vint64m2x3_t () {vint64m2x3_t t;}
> +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> +void f_vint64m2x4_t () {vint64m2x4_t t;}
> +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> +void f_vint64m4x2_t () {vint64m4x2_t t;}
> +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
> +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
> +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
> +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
> +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
> index 70e0989b6e1..b868f314163 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
> @@ -3,20 +3,20 @@
>
> #include "riscv_vector.h"
>
> -void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */
> -void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */
> -void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */
> -void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */
> -void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */
> -void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */
> -void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */
> -void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */
> -void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */
> -void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */
> -void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */
> -void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */
> -void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */
> -void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */
> +void f_vint8mf8x2_t () {vint8mf8x2_t t;}
> +void f_vuint8mf8x2_t () {vuint8mf8x2_t t;}
> +void f_vint8mf8x3_t () {vint8mf8x3_t t;}
> +void f_vuint8mf8x3_t () {vuint8mf8x3_t t;}
> +void f_vint8mf8x4_t () {vint8mf8x4_t t;}
> +void f_vuint8mf8x4_t () {vuint8mf8x4_t t;}
> +void f_vint8mf8x5_t () {vint8mf8x5_t t;}
> +void f_vuint8mf8x5_t () {vuint8mf8x5_t t;}
> +void f_vint8mf8x6_t () {vint8mf8x6_t t;}
> +void f_vuint8mf8x6_t () {vuint8mf8x6_t t;}
> +void f_vint8mf8x7_t () {vint8mf8x7_t t;}
> +void f_vuint8mf8x7_t () {vuint8mf8x7_t t;}
> +void f_vint8mf8x8_t () {vint8mf8x8_t t;}
> +void f_vuint8mf8x8_t () {vuint8mf8x8_t t;}
> void f_vint8mf4x2_t () {vint8mf4x2_t t;}
> void f_vuint8mf4x2_t () {vuint8mf4x2_t t;}
> void f_vint8mf4x3_t () {vint8mf4x3_t t;}
> @@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;}
> void f_vuint8m2x4_t () {vuint8m2x4_t t;}
> void f_vint8m4x2_t () {vint8m4x2_t t;}
> void f_vuint8m4x2_t () {vuint8m4x2_t t;}
> -void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */
> -void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */
> -void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */
> -void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */
> -void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */
> -void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */
> -void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */
> -void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */
> -void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */
> -void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */
> -void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */
> -void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */
> -void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */
> -void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */
> +void f_vint16mf4x2_t () {vint16mf4x2_t t;}
> +void f_vuint16mf4x2_t () {vuint16mf4x2_t t;}
> +void f_vint16mf4x3_t () {vint16mf4x3_t t;}
> +void f_vuint16mf4x3_t () {vuint16mf4x3_t t;}
> +void f_vint16mf4x4_t () {vint16mf4x4_t t;}
> +void f_vuint16mf4x4_t () {vuint16mf4x4_t t;}
> +void f_vint16mf4x5_t () {vint16mf4x5_t t;}
> +void f_vuint16mf4x5_t () {vuint16mf4x5_t t;}
> +void f_vint16mf4x6_t () {vint16mf4x6_t t;}
> +void f_vuint16mf4x6_t () {vuint16mf4x6_t t;}
> +void f_vint16mf4x7_t () {vint16mf4x7_t t;}
> +void f_vuint16mf4x7_t () {vuint16mf4x7_t t;}
> +void f_vint16mf4x8_t () {vint16mf4x8_t t;}
> +void f_vuint16mf4x8_t () {vuint16mf4x8_t t;}
> void f_vint16mf2x2_t () {vint16mf2x2_t t;}
> void f_vuint16mf2x2_t () {vuint16mf2x2_t t;}
> void f_vint16mf2x3_t () {vint16mf2x3_t t;}
> @@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;}
> void f_vuint16m2x4_t () {vuint16m2x4_t t;}
> void f_vint16m4x2_t () {vint16m4x2_t t;}
> void f_vuint16m4x2_t () {vuint16m4x2_t t;}
> -void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */
> -void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */
> -void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */
> -void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */
> -void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */
> -void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */
> -void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */
> -void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */
> -void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */
> -void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */
> -void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */
> -void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */
> -void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */
> -void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */
> +void f_vint32mf2x2_t () {vint32mf2x2_t t;}
> +void f_vuint32mf2x2_t () {vuint32mf2x2_t t;}
> +void f_vint32mf2x3_t () {vint32mf2x3_t t;}
> +void f_vuint32mf2x3_t () {vuint32mf2x3_t t;}
> +void f_vint32mf2x4_t () {vint32mf2x4_t t;}
> +void f_vuint32mf2x4_t () {vuint32mf2x4_t t;}
> +void f_vint32mf2x5_t () {vint32mf2x5_t t;}
> +void f_vuint32mf2x5_t () {vuint32mf2x5_t t;}
> +void f_vint32mf2x6_t () {vint32mf2x6_t t;}
> +void f_vuint32mf2x6_t () {vuint32mf2x6_t t;}
> +void f_vint32mf2x7_t () {vint32mf2x7_t t;}
> +void f_vuint32mf2x7_t () {vuint32mf2x7_t t;}
> +void f_vint32mf2x8_t () {vint32mf2x8_t t;}
> +void f_vuint32mf2x8_t () {vuint32mf2x8_t t;}
> void f_vint32m1x2_t () {vint32m1x2_t t;}
> void f_vuint32m1x2_t () {vuint32m1x2_t t;}
> void f_vint32m1x3_t () {vint32m1x3_t t;}
> @@ -153,35 +153,35 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> void f_vint32m4x2_t () {vint32m4x2_t t;}
> void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> +void f_vint64m1x2_t () {vint64m1x2_t t;}
> +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> +void f_vint64m1x3_t () {vint64m1x3_t t;}
> +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> +void f_vint64m1x4_t () {vint64m1x4_t t;}
> +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> +void f_vint64m1x5_t () {vint64m1x5_t t;}
> +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> +void f_vint64m1x6_t () {vint64m1x6_t t;}
> +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> +void f_vint64m1x7_t () {vint64m1x7_t t;}
> +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> +void f_vint64m1x8_t () {vint64m1x8_t t;}
> +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> +void f_vint64m2x2_t () {vint64m2x2_t t;}
> +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> +void f_vint64m2x3_t () {vint64m2x3_t t;}
> +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> +void f_vint64m2x4_t () {vint64m2x4_t t;}
> +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> +void f_vint64m4x2_t () {vint64m4x2_t t;}
> +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> @@ -193,14 +193,107 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vint16mf4x2_t (vint16mf4x2_t t) { } /* { dg-error {argument type 'vint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x2_t (vuint16mf4x2_t t) { } /* { dg-error {argument type 'vuint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x3_t (vint16mf4x3_t t) { } /* { dg-error {argument type 'vint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x3_t (vuint16mf4x3_t t) { } /* { dg-error {argument type 'vuint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x4_t (vint16mf4x4_t t) { } /* { dg-error {argument type 'vint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x4_t (vuint16mf4x4_t t) { } /* { dg-error {argument type 'vuint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x5_t (vint16mf4x5_t t) { } /* { dg-error {argument type 'vint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x5_t (vuint16mf4x5_t t) { } /* { dg-error {argument type 'vuint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x6_t (vint16mf4x6_t t) { } /* { dg-error {argument type 'vint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x6_t (vuint16mf4x6_t t) { } /* { dg-error {argument type 'vuint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x7_t (vint16mf4x7_t t) { } /* { dg-error {argument type 'vint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x7_t (vuint16mf4x7_t t) { } /* { dg-error {argument type 'vuint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint16mf4x8_t (vint16mf4x8_t t) { } /* { dg-error {argument type 'vint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint16mf4x8_t (vuint16mf4x8_t t) { } /* { dg-error {argument type 'vuint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> +
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
> index 2a615f80816..094b7efdef4 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
> @@ -153,28 +153,28 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> void f_vint32m4x2_t () {vint32m4x2_t t;}
> void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> +void f_vint64m1x2_t () {vint64m1x2_t t;}
> +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> +void f_vint64m1x3_t () {vint64m1x3_t t;}
> +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> +void f_vint64m1x4_t () {vint64m1x4_t t;}
> +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> +void f_vint64m1x5_t () {vint64m1x5_t t;}
> +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> +void f_vint64m1x6_t () {vint64m1x6_t t;}
> +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> +void f_vint64m1x7_t () {vint64m1x7_t t;}
> +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> +void f_vint64m1x8_t () {vint64m1x8_t t;}
> +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> +void f_vint64m2x2_t () {vint64m2x2_t t;}
> +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> +void f_vint64m2x3_t () {vint64m2x3_t t;}
> +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> +void f_vint64m2x4_t () {vint64m2x4_t t;}
> +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> +void f_vint64m4x2_t () {vint64m4x2_t t;}
> +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> @@ -193,14 +193,54 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +
> +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
> index 92f4ee02d20..6e08f522d9f 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
> @@ -54,12 +54,27 @@ void foo47 () {vint64m4_t t;}
> void foo48 () {vuint64m4_t t;}
> void foo49 () {vint64m8_t t;}
> void foo50 () {vuint64m8_t t;}
> -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
> -void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */
> -void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */
> -void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */
> -void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */
> -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo57 () {vfloat32mf2_t t;}
> +void foo58 () {vfloat32m1_t t;}
> +void foo59 () {vfloat32m2_t t;}
> +void foo60 () {vfloat32m4_t t;}
> +void foo61 () {vfloat32m8_t t;}
> +void foo62 () {vfloat64m1_t t;}
> +void foo63 () {vfloat64m2_t t;}
> +void foo64 () {vfloat64m4_t t;}
> +void foo65 () {vfloat64m8_t t;}
> +
> +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
> index 3a425721863..4fb40233509 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
> @@ -59,7 +59,17 @@ void foo58 () {vfloat32m1_t t;}
> void foo59 () {vfloat32m2_t t;}
> void foo60 () {vfloat32m4_t t;}
> void foo61 () {vfloat32m8_t t;}
> -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo62 () {vfloat64m1_t t;}
> +void foo63 () {vfloat64m2_t t;}
> +void foo64 () {vfloat64m4_t t;}
> +void foo65 () {vfloat64m8_t t;}
> +
> +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
> index de850e5e10d..28b3ae708f5 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
> @@ -3,15 +3,15 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> +void foo0 () {vbool64_t t;}
> void foo1 () {vbool32_t t;}
> void foo2 () {vbool16_t t;}
> void foo3 () {vbool8_t t;}
> void foo4 () {vbool4_t t;}
> void foo5 () {vbool2_t t;}
> void foo6 () {vbool1_t t;}
> -void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> -void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> +void foo7 () {vint8mf8_t t;}
> +void foo8 () {vuint8mf8_t t;}
> void foo9 () {vint8mf4_t t;}
> void foo10 () {vuint8mf4_t t;}
> void foo11 () {vint8mf2_t t;}
> @@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;}
> void foo18 () {vuint8m4_t t;}
> void foo19 () {vint8m8_t t;}
> void foo20 () {vuint8m8_t t;}
> -void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> -void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> +void foo21 () {vint16mf4_t t;}
> +void foo22 () {vuint16mf4_t t;}
> void foo23 () {vint16mf2_t t;}
> void foo24 () {vuint16mf2_t t;}
> void foo25 () {vint16m1_t t;}
> @@ -36,8 +36,8 @@ void foo29 () {vint16m4_t t;}
> void foo30 () {vuint16m4_t t;}
> void foo31 () {vint16m8_t t;}
> void foo32 () {vuint16m8_t t;}
> -void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> -void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> +void foo33 () {vint32mf2_t t;}
> +void foo34 () {vuint32mf2_t t;}
> void foo35 () {vint32m1_t t;}
> void foo36 () {vuint32m1_t t;}
> void foo37 () {vint32m2_t t;}
> @@ -46,20 +46,50 @@ void foo39 () {vint32m4_t t;}
> void foo40 () {vuint32m4_t t;}
> void foo41 () {vint32m8_t t;}
> void foo42 () {vuint32m8_t t;}
> -void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
> -void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */
> -void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */
> -void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */
> -void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */
> -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> +void foo43 () {vint64m1_t t;}
> +void foo44 () {vuint64m1_t t;}
> +void foo45 () {vint64m2_t t;}
> +void foo46 () {vuint64m2_t t;}
> +void foo47 () {vint64m4_t t;}
> +void foo48 () {vuint64m4_t t;}
> +void foo49 () {vint64m8_t t;}
> +void foo50 () {vuint64m8_t t;}
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo57 () {vfloat32mf2_t t;}
> +void foo58 () {vfloat32m1_t t;}
> +void foo59 () {vfloat32m2_t t;}
> +void foo60 () {vfloat32m4_t t;}
> +void foo61 () {vfloat32m8_t t;}
> +void foo62 () {vfloat64m1_t t;}
> +void foo63 () {vfloat64m2_t t;}
> +void foo64 () {vfloat64m4_t t;}
> +void foo65 () {vfloat64m8_t t;}
> +
> +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo33 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
> index 1d79b6b8eac..e48ee391992 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
> @@ -3,15 +3,15 @@
>
> #include "riscv_vector.h"
>
> -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> +void foo0 () {vbool64_t t;}
> void foo1 () {vbool32_t t;}
> void foo2 () {vbool16_t t;}
> void foo3 () {vbool8_t t;}
> void foo4 () {vbool4_t t;}
> void foo5 () {vbool2_t t;}
> void foo6 () {vbool1_t t;}
> -void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> -void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> +void foo7 () {vint8mf8_t t;}
> +void foo8 () {vuint8mf8_t t;}
> void foo9 () {vint8mf4_t t;}
> void foo10 () {vuint8mf4_t t;}
> void foo11 () {vint8mf2_t t;}
> @@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;}
> void foo18 () {vuint8m4_t t;}
> void foo19 () {vint8m8_t t;}
> void foo20 () {vuint8m8_t t;}
> -void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> -void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> +void foo21 () {vint16mf4_t t;}
> +void foo22 () {vuint16mf4_t t;}
> void foo23 () {vint16mf2_t t;}
> void foo24 () {vuint16mf2_t t;}
> void foo25 () {vint16m1_t t;}
> @@ -36,8 +36,13 @@ void foo29 () {vint16m4_t t;}
> void foo30 () {vuint16m4_t t;}
> void foo31 () {vint16m8_t t;}
> void foo32 () {vuint16m8_t t;}
> -void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> -void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void foo33 () {vint32mf2_t t;}
> +void foo34 () {vuint32mf2_t t;}
> void foo35 () {vint32m1_t t;}
> void foo36 () {vuint32m1_t t;}
> void foo37 () {vint32m2_t t;}
> @@ -46,20 +51,41 @@ void foo39 () {vint32m4_t t;}
> void foo40 () {vuint32m4_t t;}
> void foo41 () {vint32m8_t t;}
> void foo42 () {vuint32m8_t t;}
> -void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> -void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> -void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> -void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> -void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> -void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> -void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> -void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
> +void foo43 () {vint64m1_t t;}
> +void foo44 () {vuint64m1_t t;}
> +void foo45 () {vint64m2_t t;}
> +void foo46 () {vuint64m2_t t;}
> +void foo47 () {vint64m4_t t;}
> +void foo48 () {vuint64m4_t t;}
> +void foo49 () {vint64m8_t t;}
> +void foo50 () {vuint64m8_t t;}
> +void foo57 () {vfloat32mf2_t t;}
> void foo58 () {vfloat32m1_t t;}
> void foo59 () {vfloat32m2_t t;}
> void foo60 () {vfloat32m4_t t;}
> void foo61 () {vfloat32m8_t t;}
> -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> +void foo62 () {vfloat64m1_t t;}
> +void foo63 () {vfloat64m2_t t;}
> +void foo64 () {vfloat64m4_t t;}
> +void foo65 () {vfloat64m8_t t;}
> +
> +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32'} } */
> +void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo33 (vint32mf2_t t) {} /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
> index 98a7d391d4e..57ede32a400 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
> @@ -175,32 +175,67 @@ void f_vint64m2x4_t () {vint64m2x4_t t;}
> void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> void f_vint64m4x2_t () {vint64m4x2_t t;}
> void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
> -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
> -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
> -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
> -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
> -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
> -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
> -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
> -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
> -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
> -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
> -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> +
> +/* To support target attribute, the vfloat*m*x*_t need to be registered
> + in advance. We add type and args/return value check during the
> + set current function but cannot cover below cases. It is the same
> + behavior compared to aarch64 sve. */
> +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
> +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
> +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
> +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
> +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> +
> +void f_arg_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> +void f_arg_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] RISC-V: Allow RVV intrinsic for more function target
2024-04-08 1:30 ` Li, Pan2
@ 2024-04-12 4:51 ` Christoph Müllner
2024-04-12 6:12 ` Li, Pan2
0 siblings, 1 reply; 13+ messages in thread
From: Christoph Müllner @ 2024-04-12 4:51 UTC (permalink / raw)
To: Li, Pan2; +Cc: Kito Cheng, gcc-patches, juzhe.zhong, Wang, Yanzhang
Hi Pan,
This patch triggers the following error with --enable-werror-always:
gcc/config/riscv/riscv.cc: In function ‘void
riscv_validate_vector_type(const_tree, const char*)’:
gcc/config/riscv/riscv.cc:5614:23: error: comparison of integer
expressions of different signedness: ‘int’ and ‘unsigned int’
[-Werror=sign-compare]
5614 | if (TARGET_MIN_VLEN < required_min_vlen)
BR
Christoph
On Mon, Apr 8, 2024 at 3:31 AM Li, Pan2 <pan2.li@intel.com> wrote:
>
> Committed, thanks Kito.
>
> Pan
>
> -----Original Message-----
> From: Kito Cheng <kito.cheng@gmail.com>
> Sent: Monday, April 8, 2024 9:24 AM
> To: Li, Pan2 <pan2.li@intel.com>
> Cc: gcc-patches@gcc.gnu.org; juzhe.zhong@rivai.ai; Wang, Yanzhang <yanzhang.wang@intel.com>
> Subject: Re: [PATCH v2] RISC-V: Allow RVV intrinsic for more function target
>
> LGTM :)
>
> On Tue, Apr 2, 2024 at 10:28 PM <pan2.li@intel.com> wrote:
> >
> > From: Pan Li <pan2.li@intel.com>
> >
> > In previous, we allowed the target(("arch=+v")) for a function with
> > rv64gc build. This patch would like to support more arch options as
> > below:
> > * zve32x
> > * zve32f
> > * zve64x
> > * zve64f
> > * zve64d
> > * zvfhmin
> > * zvfh
> > * zvk*
> > * zvbb
> >
> > For example, we have sample code as below.
> > vfloat32m1_t
> > __attribute__((target("arch=+zve64f")))
> > test_9 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > {
> > return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > }
> >
> > It will generate the asm code when build with -O3 -march=rv64gc
> > test_9:
> > vsetvli zero,a0,e32,m1,ta,ma
> > vfadd.vv v8,v8,v9
> > ret
> >
> > Meanwhile, this patch introduces more error handling for the target
> > attribute. Take arch=+zve32x with vfloat32m1_t will have error message
> > "'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension".
> > And take arch=+zve32f with vfloat16m1_t will have error message
> > "'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension".
> >
> > By default, all the RVV types includes the cmdline march will be
> > registered when include the riscv_vector.h. And we have sorts of check
> > during args and return types.
> >
> > Below test are passed for this patch:
> > * The riscv fully regression test.
> >
> > gcc/ChangeLog:
> >
> > * config/riscv/riscv-c.cc (struct pragma_intrinsic_flags): New
> > struct to hold all intrinisc related flags.
> > (riscv_pragma_intrinsic_flags_pollute): New func to pollute
> > the intrinsic flags and backup original flags.
> > (riscv_pragma_intrinsic_flags_restore): New func to restore
> > the flags from the backup intrinsic flags.
> > (riscv_pragma_intrinsic): Pollute the flags and register all
> > possible builtin types and functions, then restore and reinit.
> > * config/riscv/riscv-protos.h (reinit_builtins): New func
> > decl to reinit after flags pollution.
> > (riscv_option_override): New extern func decl.
> > * config/riscv/riscv-vector-builtins.cc (register_builtin_types_on_null):
> > New func to register builtin types if null.
> > (DEF_RVV_TYPE): Ditto.
> > (DEF_RVV_TUPLE_TYPE): Ditto.
> > (reinit_builtins): New func impl to reinit after flags pollution.
> > * config/riscv/riscv-vector-builtins.cc (expand_builtin): Return
> > target rtx after error_at.
> > * config/riscv/riscv.cc (riscv_vector_int_type_p): New predicate
> > func to tell one tree type is integer or not.
> > (riscv_vector_float_type_p): New predicate func to tell one tree
> > type is float or not.
> > (riscv_vector_element_bitsize): New func to get the element bitsize
> > of a vector tree type.
> > (riscv_vector_required_min_vlen): New func to get the required min vlen
> > of a vector tree type.
> > (riscv_validate_vector_type): New func to validate the tree type
> > is valid on flags.
> > (riscv_return_value_is_vector_type_p): Leverage the func
> > riscv_validate_vector_type to do the tree type validation.
> > (riscv_arguments_is_vector_type_p): Ditto.
> > (riscv_override_options_internal): Ditto.
> >
> > gcc/testsuite/ChangeLog:
> >
> > * gcc.target/riscv/rvv/base/pr109479-1.c: Adjust the existing test
> > scenarios and add new error check tests.
> > * gcc.target/riscv/rvv/base/pr109479-2.c: Ditto.
> > * gcc.target/riscv/rvv/base/pr109479-3.c: Ditto.
> > * gcc.target/riscv/rvv/base/pr109479-4.c: Diito.
> > * gcc.target/riscv/rvv/base/pr109479-5.c: Diito.
> > * gcc.target/riscv/rvv/base/pr109479-6.c: Diito.
> > * gcc.target/riscv/rvv/base/user-10.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-12.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-13.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-14.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-15.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-2.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-3.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-5.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-6.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-9.c: Ditto.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c: New test.
> >
> > Signed-off-by: Pan Li <pan2.li@intel.com>
> > ---
> > gcc/config/riscv/riscv-c.cc | 94 +++++-
> > gcc/config/riscv/riscv-protos.h | 2 +
> > gcc/config/riscv/riscv-vector-builtins.cc | 53 +++-
> > gcc/config/riscv/riscv.cc | 157 +++++++++-
> > .../gcc.target/riscv/rvv/base/pr109479-1.c | 29 +-
> > .../gcc.target/riscv/rvv/base/pr109479-2.c | 29 +-
> > .../gcc.target/riscv/rvv/base/pr109479-3.c | 50 +++-
> > .../gcc.target/riscv/rvv/base/pr109479-4.c | 51 +++-
> > .../gcc.target/riscv/rvv/base/pr109479-5.c | 37 ++-
> > .../gcc.target/riscv/rvv/base/pr109479-6.c | 33 ++-
> > .../target_attribute_v_with_intrinsic-10.c | 12 +
> > .../target_attribute_v_with_intrinsic-11.c | 26 ++
> > .../target_attribute_v_with_intrinsic-12.c | 33 +++
> > .../target_attribute_v_with_intrinsic-13.c | 33 +++
> > .../target_attribute_v_with_intrinsic-14.c | 40 +++
> > .../target_attribute_v_with_intrinsic-15.c | 47 +++
> > .../target_attribute_v_with_intrinsic-16.c | 12 +
> > .../target_attribute_v_with_intrinsic-17.c | 13 +
> > .../target_attribute_v_with_intrinsic-18.c | 13 +
> > .../target_attribute_v_with_intrinsic-19.c | 13 +
> > .../target_attribute_v_with_intrinsic-20.c | 13 +
> > .../target_attribute_v_with_intrinsic-21.c | 13 +
> > .../target_attribute_v_with_intrinsic-22.c | 13 +
> > .../target_attribute_v_with_intrinsic-23.c | 13 +
> > .../target_attribute_v_with_intrinsic-24.c | 13 +
> > .../target_attribute_v_with_intrinsic-25.c | 13 +
> > .../target_attribute_v_with_intrinsic-26.c | 13 +
> > .../target_attribute_v_with_intrinsic-27.c | 13 +
> > .../target_attribute_v_with_intrinsic-28.c | 13 +
> > .../target_attribute_v_with_intrinsic-29.c | 13 +
> > .../target_attribute_v_with_intrinsic-30.c | 12 +
> > .../target_attribute_v_with_intrinsic-31.c | 12 +
> > .../target_attribute_v_with_intrinsic-32.c | 12 +
> > .../target_attribute_v_with_intrinsic-33.c | 12 +
> > .../target_attribute_v_with_intrinsic-34.c | 12 +
> > .../target_attribute_v_with_intrinsic-35.c | 12 +
> > .../target_attribute_v_with_intrinsic-36.c | 12 +
> > .../target_attribute_v_with_intrinsic-37.c | 12 +
> > .../target_attribute_v_with_intrinsic-38.c | 12 +
> > .../target_attribute_v_with_intrinsic-39.c | 12 +
> > .../target_attribute_v_with_intrinsic-40.c | 12 +
> > .../target_attribute_v_with_intrinsic-41.c | 12 +
> > .../target_attribute_v_with_intrinsic-42.c | 12 +
> > .../target_attribute_v_with_intrinsic-43.c | 12 +
> > .../target_attribute_v_with_intrinsic-44.c | 12 +
> > .../target_attribute_v_with_intrinsic-45.c | 12 +
> > .../target_attribute_v_with_intrinsic-46.c | 12 +
> > .../target_attribute_v_with_intrinsic-47.c | 12 +
> > .../target_attribute_v_with_intrinsic-48.c | 12 +
> > .../target_attribute_v_with_intrinsic-49.c | 12 +
> > .../target_attribute_v_with_intrinsic-50.c | 12 +
> > .../target_attribute_v_with_intrinsic-51.c | 12 +
> > .../target_attribute_v_with_intrinsic-52.c | 12 +
> > .../target_attribute_v_with_intrinsic-53.c | 12 +
> > .../target_attribute_v_with_intrinsic-9.c | 12 +
> > .../gcc.target/riscv/rvv/base/user-10.c | 39 ++-
> > .../gcc.target/riscv/rvv/base/user-12.c | 275 ++++++++++++------
> > .../gcc.target/riscv/rvv/base/user-13.c | 156 ++++++----
> > .../gcc.target/riscv/rvv/base/user-14.c | 257 ++++++++++------
> > .../gcc.target/riscv/rvv/base/user-15.c | 106 ++++---
> > .../gcc.target/riscv/rvv/base/user-2.c | 33 ++-
> > .../gcc.target/riscv/rvv/base/user-3.c | 18 +-
> > .../gcc.target/riscv/rvv/base/user-5.c | 78 +++--
> > .../gcc.target/riscv/rvv/base/user-6.c | 66 +++--
> > .../gcc.target/riscv/rvv/base/user-9.c | 93 ++++--
> > 65 files changed, 1886 insertions(+), 442 deletions(-)
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
> >
> > diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc
> > index 01314037461..43c8eecbb6f 100644
> > --- a/gcc/config/riscv/riscv-c.cc
> > +++ b/gcc/config/riscv/riscv-c.cc
> > @@ -34,6 +34,72 @@ along with GCC; see the file COPYING3. If not see
> >
> > #define builtin_define(TXT) cpp_define (pfile, TXT)
> >
> > +struct pragma_intrinsic_flags
> > +{
> > + int intrinsic_target_flags;
> > +
> > + int intrinsic_riscv_vector_elen_flags;
> > + int intrinsic_riscv_zvl_flags;
> > + int intrinsic_riscv_zvb_subext;
> > + int intrinsic_riscv_zvk_subext;
> > +};
> > +
> > +static void
> > +riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags)
> > +{
> > + flags->intrinsic_target_flags = target_flags;
> > + flags->intrinsic_riscv_vector_elen_flags = riscv_vector_elen_flags;
> > + flags->intrinsic_riscv_zvl_flags = riscv_zvl_flags;
> > + flags->intrinsic_riscv_zvb_subext = riscv_zvb_subext;
> > + flags->intrinsic_riscv_zvk_subext = riscv_zvk_subext;
> > +
> > + target_flags = target_flags
> > + | MASK_VECTOR;
> > +
> > + riscv_zvl_flags = riscv_zvl_flags
> > + | MASK_ZVL32B
> > + | MASK_ZVL64B
> > + | MASK_ZVL128B;
> > +
> > + riscv_vector_elen_flags = riscv_vector_elen_flags
> > + | MASK_VECTOR_ELEN_32
> > + | MASK_VECTOR_ELEN_64
> > + | MASK_VECTOR_ELEN_FP_16
> > + | MASK_VECTOR_ELEN_FP_32
> > + | MASK_VECTOR_ELEN_FP_64;
> > +
> > + riscv_zvb_subext = riscv_zvb_subext
> > + | MASK_ZVBB
> > + | MASK_ZVBC
> > + | MASK_ZVKB;
> > +
> > + riscv_zvk_subext = riscv_zvk_subext
> > + | MASK_ZVKG
> > + | MASK_ZVKNED
> > + | MASK_ZVKNHA
> > + | MASK_ZVKNHB
> > + | MASK_ZVKSED
> > + | MASK_ZVKSH
> > + | MASK_ZVKN
> > + | MASK_ZVKNC
> > + | MASK_ZVKNG
> > + | MASK_ZVKS
> > + | MASK_ZVKSC
> > + | MASK_ZVKSG
> > + | MASK_ZVKT;
> > +}
> > +
> > +static void
> > +riscv_pragma_intrinsic_flags_restore (struct pragma_intrinsic_flags *flags)
> > +{
> > + target_flags = flags->intrinsic_target_flags;
> > +
> > + riscv_vector_elen_flags = flags->intrinsic_riscv_vector_elen_flags;
> > + riscv_zvl_flags = flags->intrinsic_riscv_zvl_flags;
> > + riscv_zvb_subext = flags->intrinsic_riscv_zvb_subext;
> > + riscv_zvk_subext = flags->intrinsic_riscv_zvk_subext;
> > +}
> > +
> > static int
> > riscv_ext_version_value (unsigned major, unsigned minor)
> > {
> > @@ -201,20 +267,20 @@ riscv_pragma_intrinsic (cpp_reader *)
> > if (strcmp (name, "vector") == 0
> > || strcmp (name, "xtheadvector") == 0)
> > {
> > - if (TARGET_VECTOR)
> > - riscv_vector::handle_pragma_vector ();
> > - else /* Indicates riscv_vector.h is included but v is missing in arch */
> > - {
> > - /* To make the the rvv types and intrinsic API available for the
> > - target("arch=+v") attribute, we need to temporally enable the
> > - TARGET_VECTOR, and disable it after all initialized. */
> > - target_flags |= MASK_VECTOR;
> > -
> > - riscv_vector::init_builtins ();
> > - riscv_vector::handle_pragma_vector ();
> > -
> > - target_flags &= ~MASK_VECTOR;
> > - }
> > + struct pragma_intrinsic_flags backup_flags;
> > +
> > + riscv_pragma_intrinsic_flags_pollute (&backup_flags);
> > +
> > + riscv_option_override ();
> > + init_adjust_machine_modes ();
> > + riscv_vector::reinit_builtins ();
> > + riscv_vector::handle_pragma_vector ();
> > +
> > + riscv_pragma_intrinsic_flags_restore (&backup_flags);
> > +
> > + /* Re-initialize after the flags are restored. */
> > + riscv_option_override ();
> > + init_adjust_machine_modes ();
> > }
> > else
> > error ("unknown %<#pragma riscv intrinsic%> option %qs", name);
> > diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h
> > index b8735593805..4677d9c46cd 100644
> > --- a/gcc/config/riscv/riscv-protos.h
> > +++ b/gcc/config/riscv/riscv-protos.h
> > @@ -546,6 +546,7 @@ enum avl_type
> > };
> > /* Routines implemented in riscv-vector-builtins.cc. */
> > void init_builtins (void);
> > +void reinit_builtins (void);
> > const char *mangle_builtin_type (const_tree);
> > tree lookup_vector_type_attribute (const_tree);
> > bool builtin_type_p (const_tree);
> > @@ -762,6 +763,7 @@ extern bool
> > riscv_option_valid_attribute_p (tree, tree, tree, int);
> > extern void
> > riscv_override_options_internal (struct gcc_options *);
> > +extern void riscv_option_override (void);
> >
> > struct riscv_tune_param;
> > /* Information about one micro-arch we know about. */
> > diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc
> > index db9246eed2d..53ccea7889e 100644
> > --- a/gcc/config/riscv/riscv-vector-builtins.cc
> > +++ b/gcc/config/riscv/riscv-vector-builtins.cc
> > @@ -3123,6 +3123,36 @@ register_builtin_types ()
> > #include "riscv-vector-builtins.def"
> > }
> >
> > +/* Similar as register_builtin_types but perform the registration if and
> > + only if the element of abi_vector_type is NULL_TREE. */
> > +static void
> > +register_builtin_types_on_null ()
> > +{
> > + /* Get type node from get_typenode_from_name to prevent we have different type
> > + node define in different target libraries, e.g. int32_t defined as
> > + `long` in RV32/newlib-stdint, but `int` for RV32/glibc-stdint.h.
> > + NOTE: uint[16|32|64]_type_node already defined in tree.h. */
> > + tree int8_type_node = get_typenode_from_name (INT8_TYPE);
> > + tree uint8_type_node = get_typenode_from_name (UINT8_TYPE);
> > + tree int16_type_node = get_typenode_from_name (INT16_TYPE);
> > + tree int32_type_node = get_typenode_from_name (INT32_TYPE);
> > + tree int64_type_node = get_typenode_from_name (INT64_TYPE);
> > +
> > + machine_mode mode;
> > +#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
> > + ARGS...) \
> > + mode = VECTOR_MODE##mode; \
> > + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
> > + register_builtin_type (VECTOR_TYPE_##NAME, SCALAR_TYPE##_type_node, mode);
> > +
> > +#define DEF_RVV_TUPLE_TYPE(NAME, NCHARS, ABI_NAME, SUBPART_TYPE, SCALAR_TYPE, \
> > + NF, VECTOR_SUFFIX) \
> > + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
> > + register_tuple_type (VECTOR_TYPE_##NAME, VECTOR_TYPE_##SUBPART_TYPE, \
> > + SCALAR_TYPE##_type_node, NF);
> > +#include "riscv-vector-builtins.def"
> > +}
> > +
> > /* Register vector type TYPE under its risv_vector.h name. */
> > static void
> > register_vector_type (vector_type_index type)
> > @@ -4419,6 +4449,22 @@ init_builtins ()
> > handle_pragma_vector ();
> > }
> >
> > +/* Reinitialize builtins similar to init_builtins, but only the null
> > + builtin types will be registered. */
> > +void
> > +reinit_builtins ()
> > +{
> > + rvv_switcher rvv;
> > +
> > + if (!TARGET_VECTOR)
> > + return;
> > +
> > + register_builtin_types_on_null ();
> > +
> > + if (in_lto_p)
> > + handle_pragma_vector ();
> > +}
> > +
> > /* Implement TARGET_VERIFY_TYPE_CONTEXT for RVV types. */
> > bool
> > verify_type_context (location_t loc, type_context_kind context, const_tree type,
> > @@ -4588,8 +4634,11 @@ expand_builtin (unsigned int code, tree exp, rtx target)
> > registered_function &rfn = *(*registered_functions)[code];
> >
> > if (!TARGET_VECTOR)
> > - error_at (EXPR_LOCATION (exp),
> > - "built-in function %qE requires the V ISA extension", exp);
> > + {
> > + error_at (EXPR_LOCATION (exp),
> > + "built-in function %qE requires the V ISA extension", exp);
> > + return target;
> > + }
> >
> > return function_expander (rfn.instance, rfn.decl, exp, target).expand ();
> > }
> > diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
> > index fe9976bfffe..2a71badfdc9 100644
> > --- a/gcc/config/riscv/riscv.cc
> > +++ b/gcc/config/riscv/riscv.cc
> > @@ -5459,6 +5459,152 @@ riscv_v_abi ()
> > return v_abi;
> > }
> >
> > +static bool
> > +riscv_vector_int_type_p (const_tree type)
> > +{
> > + machine_mode mode = TYPE_MODE (type);
> > +
> > + if (VECTOR_MODE_P (mode))
> > + return INTEGRAL_MODE_P (GET_MODE_INNER (mode));
> > +
> > + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> > + return strstr (name, "int") != NULL || strstr (name, "uint") != NULL;
> > +}
> > +
> > +static bool
> > +riscv_vector_float_type_p (const_tree type)
> > +{
> > + machine_mode mode = TYPE_MODE (type);
> > +
> > + if (VECTOR_MODE_P (mode))
> > + return FLOAT_MODE_P (GET_MODE_INNER (mode));
> > +
> > + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> > + return strstr (name, "vfloat") != NULL;
> > +}
> > +
> > +static unsigned
> > +riscv_vector_element_bitsize (const_tree type)
> > +{
> > + machine_mode mode = TYPE_MODE (type);
> > +
> > + if (VECTOR_MODE_P (mode))
> > + return GET_MODE_BITSIZE (GET_MODE_INNER (mode));
> > +
> > + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> > +
> > + if (strstr (name, "bool") != NULL)
> > + return 1;
> > + else if (strstr (name, "int8") != NULL)
> > + return 8;
> > + else if (strstr (name, "int16") != NULL || strstr (name, "float16") != NULL)
> > + return 16;
> > + else if (strstr (name, "int32") != NULL || strstr (name, "float32") != NULL)
> > + return 32;
> > + else if (strstr (name, "int64") != NULL || strstr (name, "float64") != NULL)
> > + return 64;
> > +
> > + gcc_unreachable ();
> > +}
> > +
> > +static unsigned
> > +riscv_vector_required_min_vlen (const_tree type)
> > +{
> > + machine_mode mode = TYPE_MODE (type);
> > +
> > + if (riscv_v_ext_mode_p (mode))
> > + return TARGET_MIN_VLEN;
> > +
> > + unsigned element_bitsize = riscv_vector_element_bitsize (type);
> > + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> > +
> > + if (strstr (name, "bool64") != NULL)
> > + return element_bitsize * 64;
> > + else if (strstr (name, "bool32") != NULL)
> > + return element_bitsize * 32;
> > + else if (strstr (name, "bool16") != NULL)
> > + return element_bitsize * 16;
> > + else if (strstr (name, "bool8") != NULL)
> > + return element_bitsize * 8;
> > + else if (strstr (name, "bool4") != NULL)
> > + return element_bitsize * 4;
> > + else if (strstr (name, "bool2") != NULL)
> > + return element_bitsize * 2;
> > +
> > + if (strstr (name, "mf8") != NULL)
> > + return element_bitsize * 8;
> > + else if (strstr (name, "mf4") != NULL)
> > + return element_bitsize * 4;
> > + else if (strstr (name, "mf2") != NULL)
> > + return element_bitsize * 2;
> > +
> > + return element_bitsize;
> > +}
> > +
> > +static void
> > +riscv_validate_vector_type (const_tree type, const char *hint)
> > +{
> > + gcc_assert (riscv_vector_type_p (type));
> > +
> > + if (!TARGET_VECTOR)
> > + {
> > + error_at (input_location, "%s %qT requires the V ISA extension",
> > + hint, type);
> > + return;
> > + }
> > +
> > + unsigned element_bitsize = riscv_vector_element_bitsize (type);
> > + bool int_type_p = riscv_vector_int_type_p (type);
> > +
> > + if (int_type_p && element_bitsize == 64
> > + && !TARGET_VECTOR_ELEN_64_P (riscv_vector_elen_flags))
> > + {
> > + error_at (input_location,
> > + "%s %qT requires the zve64x, zve64f, zve64d or v ISA extension",
> > + hint, type);
> > + return;
> > + }
> > +
> > + bool float_type_p = riscv_vector_float_type_p (type);
> > +
> > + if (float_type_p && element_bitsize == 16
> > + && !TARGET_VECTOR_ELEN_FP_16_P (riscv_vector_elen_flags))
> > + {
> > + error_at (input_location,
> > + "%s %qT requires the zvfhmin or zvfh ISA extension",
> > + hint, type);
> > + return;
> > + }
> > +
> > + if (float_type_p && element_bitsize == 32
> > + && !TARGET_VECTOR_ELEN_FP_32_P (riscv_vector_elen_flags))
> > + {
> > + error_at (input_location,
> > + "%s %qT requires the zve32f, zve64f, zve64d or v ISA extension",
> > + hint, type);
> > + return;
> > + }
> > +
> > + if (float_type_p && element_bitsize == 64
> > + && !TARGET_VECTOR_ELEN_FP_64_P (riscv_vector_elen_flags))
> > + {
> > + error_at (input_location,
> > + "%s %qT requires the zve64d or v ISA extension", hint, type);
> > + return;
> > + }
> > +
> > + unsigned required_min_vlen = riscv_vector_required_min_vlen (type);
> > +
> > + if (TARGET_MIN_VLEN < required_min_vlen)
> > + {
> > + error_at (
> > + input_location,
> > + "%s %qT requires the minimal vector length %qd but %qd is given",
> > + hint, type, required_min_vlen, TARGET_MIN_VLEN);
> > + return;
> > + }
> > +}
> > +
> > /* Return true if a function with type FNTYPE returns its value in
> > RISC-V V registers. */
> >
> > @@ -5469,9 +5615,7 @@ riscv_return_value_is_vector_type_p (const_tree fntype)
> >
> > if (riscv_vector_type_p (return_type))
> > {
> > - if (!TARGET_VECTOR)
> > - error_at (input_location,
> > - "return type %qT requires the V ISA extension", return_type);
> > + riscv_validate_vector_type (return_type, "return type");
> > return true;
> > }
> > else
> > @@ -5490,10 +5634,7 @@ riscv_arguments_is_vector_type_p (const_tree fntype)
> > tree arg_type = TREE_VALUE (chain);
> > if (riscv_vector_type_p (arg_type))
> > {
> > - if (!TARGET_VECTOR)
> > - error_at (input_location,
> > - "argument type %qT requires the V ISA extension",
> > - arg_type);
> > + riscv_validate_vector_type (arg_type, "argument type");
> > return true;
> > }
> > }
> > @@ -9107,7 +9248,7 @@ riscv_override_options_internal (struct gcc_options *opts)
> >
> > /* Implement TARGET_OPTION_OVERRIDE. */
> >
> > -static void
> > +void
> > riscv_option_override (void)
> > {
> > #ifdef SUBTARGET_OVERRIDE_OPTIONS
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> > index a13cc12c543..1bd7efe61f2 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> > @@ -3,11 +3,24 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> > -void foo1 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> > -void foo2 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> > -void foo3 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> > -void foo4 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> > -void foo5 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> > -void foo6 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> > -void foo7 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo0 () {__rvv_int64m1_t t;}
> > +void foo1 () {__rvv_uint64m1_t t;}
> > +void foo2 () {__rvv_int64m2_t t;}
> > +void foo3 () {__rvv_uint64m2_t t;}
> > +void foo4 () {__rvv_int64m4_t t;}
> > +void foo5 () {__rvv_uint64m4_t t;}
> > +void foo6 () {__rvv_int64m8_t t;}
> > +void foo7 () {__rvv_uint64m8_t t;}
> > +
> > +void new_foo0 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo1 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo2 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo3 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo4 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo5 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo6 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo7 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> > index dd6bcb0f548..ce6a62d1405 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> > @@ -3,11 +3,24 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> > -void foo1 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> > -void foo2 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> > -void foo3 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> > -void foo4 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> > -void foo5 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> > -void foo6 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> > -void foo7 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo0 () {vint64m1_t t;}
> > +void foo1 () {vuint64m1_t t;}
> > +void foo2 () {vint64m2_t t;}
> > +void foo3 () {vuint64m2_t t;}
> > +void foo4 () {vint64m4_t t;}
> > +void foo5 () {vuint64m4_t t;}
> > +void foo6 () {vint64m8_t t;}
> > +void foo7 () {vuint64m8_t t;}
> > +
> > +void new_foo0 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo1 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo2 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo3 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo4 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo5 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo6 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo7 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> > index 01e86223da9..5c0cd1b1f7f 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> > @@ -3,18 +3,38 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {__rvv_bool64_t t;} /* { dg-error {unknown type name '__rvv_bool64_t'} } */
> > -void foo1 () {__rvv_int8mf8_t t;} /* { dg-error {unknown type name '__rvv_int8mf8_t'} } */
> > -void foo2 () {__rvv_uint8mf8_t t;} /* { dg-error {unknown type name '__rvv_uint8mf8_t'} } */
> > -void foo3 () {__rvv_int16mf4_t t;} /* { dg-error {unknown type name '__rvv_int16mf4_t'} } */
> > -void foo4 () {__rvv_uint16mf4_t t;} /* { dg-error {unknown type name '__rvv_uint16mf4_t'} } */
> > -void foo5 () {__rvv_int32mf2_t t;} /* { dg-error {unknown type name '__rvv_int32mf2_t'} } */
> > -void foo6 () {__rvv_uint32mf2_t t;} /* { dg-error {unknown type name '__rvv_uint32mf2_t'} } */
> > -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> > -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> > -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> > -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> > -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> > -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> > -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> > -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo0 () {__rvv_bool64_t t;}
> > +void foo1 () {__rvv_int8mf8_t t;}
> > +void foo2 () {__rvv_uint8mf8_t t;}
> > +void foo3 () {__rvv_int16mf4_t t;}
> > +void foo4 () {__rvv_uint16mf4_t t;}
> > +void foo5 () {__rvv_int32mf2_t t;}
> > +void foo6 () {__rvv_uint32mf2_t t;}
> > +void foo7 () {__rvv_int64m1_t t;}
> > +void foo8 () {__rvv_uint64m1_t t;}
> > +void foo9 () {__rvv_int64m2_t t;}
> > +void foo10 () {__rvv_uint64m2_t t;}
> > +void foo11 () {__rvv_int64m4_t t;}
> > +void foo12 () {__rvv_uint64m4_t t;}
> > +void foo13 () {__rvv_int64m8_t t;}
> > +void foo14 () {__rvv_uint64m8_t t;}
> > +
> > +void new_foo0 (__rvv_bool64_t t) { } /* { dg-error {argument type '__rvv_bool64_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo1 (__rvv_int8mf8_t t) { } /* { dg-error {argument type '__rvv_int8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo2 (__rvv_uint8mf8_t t) { } /* { dg-error {argument type '__rvv_uint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo3 (__rvv_int16mf4_t t) { } /* { dg-error {argument type '__rvv_int16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo4 (__rvv_uint16mf4_t t) { } /* { dg-error {argument type '__rvv_uint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo5 (__rvv_int32mf2_t t) { } /* { dg-error {argument type '__rvv_int32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo6 (__rvv_uint32mf2_t t) { } /* { dg-error {argument type '__rvv_uint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> > index 62385b8dcd1..48e1f278e70 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> > @@ -3,18 +3,39 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> > -void foo1 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> > -void foo2 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> > -void foo3 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> > -void foo4 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> > -void foo5 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> > -void foo6 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> > -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> > -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> > -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> > -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> > -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> > -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> > -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> > -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo0 () {vbool64_t t;}
> > +void foo1 () {vint8mf8_t t;}
> > +void foo2 () {vuint8mf8_t t;}
> > +void foo3 () {vint16mf4_t t;}
> > +void foo4 () {vuint16mf4_t t;}
> > +void foo5 () {vint32mf2_t t;}
> > +void foo6 () {vuint32mf2_t t;}
> > +void foo7 () {vint64m1_t t;}
> > +void foo8 () {vuint64m1_t t;}
> > +void foo9 () {vint64m2_t t;}
> > +void foo10 () {vuint64m2_t t;}
> > +void foo11 () {vint64m4_t t;}
> > +void foo12 () {vuint64m4_t t;}
> > +void foo13 () {vint64m8_t t;}
> > +void foo14 () {vuint64m8_t t;}
> > +
> > +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo1 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo2 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo3 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo4 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo5 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo6 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +
> > +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> > index 26a0a742965..af237f5d759 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> > @@ -3,6 +3,10 @@
> >
> > #include "riscv_vector.h"
> >
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > void foo0 () {__rvv_bool64_t t;}
> > void foo1 () {__rvv_int8mf8_t t;}
> > void foo2 () {__rvv_uint8mf8_t t;}
> > @@ -10,11 +14,28 @@ void foo3 () {__rvv_int16mf4_t t;}
> > void foo4 () {__rvv_uint16mf4_t t;}
> > void foo5 () {__rvv_int32mf2_t t;}
> > void foo6 () {__rvv_uint32mf2_t t;}
> > -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> > -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> > -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> > -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> > -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> > -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> > -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> > -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> > +void foo7 () {__rvv_int64m1_t t;}
> > +void foo8 () {__rvv_uint64m1_t t;}
> > +void foo9 () {__rvv_int64m2_t t;}
> > +void foo10 () {__rvv_uint64m2_t t;}
> > +void foo11 () {__rvv_int64m4_t t;}
> > +void foo12 () {__rvv_uint64m4_t t;}
> > +void foo13 () {__rvv_int64m8_t t;}
> > +void foo14 () {__rvv_uint64m8_t t;}
> > +
> > +void new_foo0 (__rvv_bool64_t t) { }
> > +void new_foo1 (__rvv_int8mf8_t t) { }
> > +void new_foo2 (__rvv_uint8mf8_t t) { }
> > +void new_foo3 (__rvv_int16mf4_t t) { }
> > +void new_foo4 (__rvv_uint16mf4_t t) { }
> > +void new_foo5 (__rvv_int32mf2_t t) { }
> > +void new_foo6 (__rvv_uint32mf2_t t) { }
> > +
> > +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> > index eb66f3ea2bd..2779fbda053 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> > @@ -10,11 +10,28 @@ void foo3 () {vint16mf4_t t;}
> > void foo4 () {vuint16mf4_t t;}
> > void foo5 () {vint32mf2_t t;}
> > void foo6 () {vuint32mf2_t t;}
> > -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> > -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> > -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> > -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> > -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> > -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> > -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> > -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> > +void foo7 () {vint64m1_t t;}
> > +void foo8 () {vuint64m1_t t;}
> > +void foo9 () {vint64m2_t t;}
> > +void foo10 () {vuint64m2_t t;}
> > +void foo11 () {vint64m4_t t;}
> > +void foo12 () {vuint64m4_t t;}
> > +void foo13 () {vint64m8_t t;}
> > +void foo14 () {vuint64m8_t t;}
> > +
> > +void new_foo0 (vbool64_t t) { }
> > +void new_foo1 (vint8mf8_t t) { }
> > +void new_foo2 (vuint8mf8_t t) { }
> > +void new_foo3 (vint16mf4_t t) { }
> > +void new_foo4 (vuint16mf4_t t) { }
> > +void new_foo5 (vint32mf2_t t) { }
> > +void new_foo6 (vuint32mf2_t t) { }
> > +
> > +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> > new file mode 100644
> > index 00000000000..3e6844475d5
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+v,+zvfh")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> > new file mode 100644
> > index 00000000000..df053073bc8
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> > @@ -0,0 +1,26 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint8m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i8m1 (a, b, vl);
> > +}
> > +
> > +vint16m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i16m1 (a, b, vl);
> > +}
> > +
> > +vint32m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> > new file mode 100644
> > index 00000000000..51a91886f52
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> > @@ -0,0 +1,33 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint8m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i8m1 (a, b, vl);
> > +}
> > +
> > +vint16m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i16m1 (a, b, vl);
> > +}
> > +
> > +vint32m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i32m1 (a, b, vl);
> > +}
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_4 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> > new file mode 100644
> > index 00000000000..994b1c0a5db
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> > @@ -0,0 +1,33 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint8m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i8m1 (a, b, vl);
> > +}
> > +
> > +vint16m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i16m1 (a, b, vl);
> > +}
> > +
> > +vint32m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i32m1 (a, b, vl);
> > +}
> > +
> > +vint64m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> > new file mode 100644
> > index 00000000000..caa2a10e943
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> > @@ -0,0 +1,40 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint8m1_t
> > +__attribute__((target("arch=+zve64f")))
> > +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i8m1 (a, b, vl);
> > +}
> > +
> > +vint16m1_t
> > +__attribute__((target("arch=+zve64f")))
> > +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i16m1 (a, b, vl);
> > +}
> > +
> > +vint32m1_t
> > +__attribute__((target("arch=+zve64f")))
> > +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i32m1 (a, b, vl);
> > +}
> > +
> > +vint64m1_t
> > +__attribute__((target("arch=+zve64f")))
> > +test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i64m1 (a, b, vl);
> > +}
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+zve64f")))
> > +test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> > new file mode 100644
> > index 00000000000..72a2be6e560
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> > @@ -0,0 +1,47 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint8m1_t
> > +__attribute__((target("arch=+zve64d")))
> > +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i8m1 (a, b, vl);
> > +}
> > +
> > +vint16m1_t
> > +__attribute__((target("arch=+zve64d")))
> > +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i16m1 (a, b, vl);
> > +}
> > +
> > +vint32m1_t
> > +__attribute__((target("arch=+zve64d")))
> > +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i32m1 (a, b, vl);
> > +}
> > +
> > +vint64m1_t
> > +__attribute__((target("arch=+zve64d")))
> > +test_4 (vint64m1_t a, vint64m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i64m1 (a, b, vl);
> > +}
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+zve64d")))
> > +test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+zve64d")))
> > +test_6 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> > new file mode 100644
> > index 00000000000..dabdcf8ff21
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+v,+zvfhmin")))
> > +test_1 (vfloat16mf2_t a, size_t vl)
> > +{
> > + return __riscv_vfwcvt_f_f_v_f32m1 (a, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> > new file mode 100644
> > index 00000000000..a064417169d
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint64m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i64m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> > new file mode 100644
> > index 00000000000..61d3fb25dc2
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> > new file mode 100644
> > index 00000000000..bfc26f8210a
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> > new file mode 100644
> > index 00000000000..35a2924234f
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> > new file mode 100644
> > index 00000000000..e3aef339d68
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint64m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i64m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> > new file mode 100644
> > index 00000000000..b5a894ecad4
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> > new file mode 100644
> > index 00000000000..7267fa3304b
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> > new file mode 100644
> > index 00000000000..5a7c4481a5a
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> > new file mode 100644
> > index 00000000000..f1241cb1771
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> > new file mode 100644
> > index 00000000000..2738a29d673
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> > new file mode 100644
> > index 00000000000..8610000b474
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+zve64f")))
> > +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> > new file mode 100644
> > index 00000000000..7eaa6adab82
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+zve64f")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> > new file mode 100644
> > index 00000000000..eb74e33299f
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> > @@ -0,0 +1,13 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+zve64d")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > +
> > +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> > new file mode 100644
> > index 00000000000..f68b4622ee7
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+v")))
> > +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> > new file mode 100644
> > index 00000000000..2f146cda2dd
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint64m1_t
> > +__attribute__((target("arch=+v")))
> > +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> > new file mode 100644
> > index 00000000000..737b5b00d73
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+v")))
> > +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> > new file mode 100644
> > index 00000000000..559e90e87f4
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+zvfh")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> > new file mode 100644
> > index 00000000000..91ee510c77b
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint64m1_t
> > +__attribute__((target("arch=+v")))
> > +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> > new file mode 100644
> > index 00000000000..ec184cff5dc
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint64m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_1 (vint64m1_t a, vint64m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> > new file mode 100644
> > index 00000000000..a37f67c5320
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+zve64d")))
> > +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> > new file mode 100644
> > index 00000000000..3d62027848e
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+zvfh")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> > new file mode 100644
> > index 00000000000..9b8a9cbafcb
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+v")))
> > +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> > new file mode 100644
> > index 00000000000..67469a18cd9
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+zve64f")))
> > +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> > new file mode 100644
> > index 00000000000..ce89391e4e7
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+v")))
> > +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> > new file mode 100644
> > index 00000000000..8836cb14703
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+zvfh")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> > new file mode 100644
> > index 00000000000..57e542da1b8
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> > new file mode 100644
> > index 00000000000..7fb6b20a32e
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> > new file mode 100644
> > index 00000000000..ce6f97d8584
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> > new file mode 100644
> > index 00000000000..dbf92a3df24
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat64m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f64m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> > new file mode 100644
> > index 00000000000..6d2e4e27bf4
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+zve64x")))
> > +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> > new file mode 100644
> > index 00000000000..94bbcb05e4d
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vuint32m1_t
> > +__attribute__((target("arch=+zvbb")))
> > +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vandn_vv_u32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> > new file mode 100644
> > index 00000000000..054b7630fa9
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vuint32m1_t
> > +__attribute__((target("arch=+zvknha")))
> > +test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl)
> > +{
> > + return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> > new file mode 100644
> > index 00000000000..b2e6658f4d3
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vuint32m2_t
> > +__attribute__((target("arch=+zvksh")))
> > +test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl)
> > +{
> > + return __riscv_vsm3me_vv_u32m2 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> > new file mode 100644
> > index 00000000000..8574cd049cf
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vuint32m1_t
> > +__attribute__((target("arch=+zvkned")))
> > +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vaesdm_vv_u32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> > new file mode 100644
> > index 00000000000..e27b4d5fbb3
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vuint32m1_t
> > +__attribute__((target("arch=+zvkg")))
> > +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vgmul_vv_u32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> > new file mode 100644
> > index 00000000000..2213c6fe35d
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vuint32m2_t
> > +__attribute__((target("arch=+zvksed")))
> > +test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl)
> > +{
> > + return __riscv_vsm4r_vv_u32m2 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> > new file mode 100644
> > index 00000000000..66901cc72ad
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vuint32m1_t
> > +__attribute__((target("arch=+zvknhb")))
> > +test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl)
> > +{
> > + return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
> > new file mode 100644
> > index 00000000000..0764f403b89
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+v")))
> > +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
> > index fdc28c77426..6bb9460d6d2 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c
> > @@ -193,14 +193,31 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> > void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> > void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> > void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> > -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> > -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> > -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> > -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> > -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> > -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> > -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> > -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> > -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> > -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> > -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> > +
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> > +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> > +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> > +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> > +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> > +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> > +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> > +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> > +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> > +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> > +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> > +
> > +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
> > index 332ff7627b6..2f2c150eeb0 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c
> > @@ -3,20 +3,20 @@
> >
> > #include "riscv_vector.h"
> >
> > -void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */
> > -void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */
> > -void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */
> > -void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */
> > -void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */
> > -void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */
> > -void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */
> > -void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */
> > -void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */
> > -void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */
> > -void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */
> > -void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */
> > -void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */
> > -void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */
> > +void f_vint8mf8x2_t () {vint8mf8x2_t t;}
> > +void f_vuint8mf8x2_t () {vuint8mf8x2_t t;}
> > +void f_vint8mf8x3_t () {vint8mf8x3_t t;}
> > +void f_vuint8mf8x3_t () {vuint8mf8x3_t t;}
> > +void f_vint8mf8x4_t () {vint8mf8x4_t t;}
> > +void f_vuint8mf8x4_t () {vuint8mf8x4_t t;}
> > +void f_vint8mf8x5_t () {vint8mf8x5_t t;}
> > +void f_vuint8mf8x5_t () {vuint8mf8x5_t t;}
> > +void f_vint8mf8x6_t () {vint8mf8x6_t t;}
> > +void f_vuint8mf8x6_t () {vuint8mf8x6_t t;}
> > +void f_vint8mf8x7_t () {vint8mf8x7_t t;}
> > +void f_vuint8mf8x7_t () {vuint8mf8x7_t t;}
> > +void f_vint8mf8x8_t () {vint8mf8x8_t t;}
> > +void f_vuint8mf8x8_t () {vuint8mf8x8_t t;}
> > void f_vint8mf4x2_t () {vint8mf4x2_t t;}
> > void f_vuint8mf4x2_t () {vuint8mf4x2_t t;}
> > void f_vint8mf4x3_t () {vint8mf4x3_t t;}
> > @@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;}
> > void f_vuint8m2x4_t () {vuint8m2x4_t t;}
> > void f_vint8m4x2_t () {vint8m4x2_t t;}
> > void f_vuint8m4x2_t () {vuint8m4x2_t t;}
> > -void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */
> > -void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */
> > -void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */
> > -void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */
> > -void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */
> > -void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */
> > -void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */
> > -void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */
> > -void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */
> > -void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */
> > -void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */
> > -void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */
> > -void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */
> > -void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */
> > +void f_vint16mf4x2_t () {vint16mf4x2_t t;}
> > +void f_vuint16mf4x2_t () {vuint16mf4x2_t t;}
> > +void f_vint16mf4x3_t () {vint16mf4x3_t t;}
> > +void f_vuint16mf4x3_t () {vuint16mf4x3_t t;}
> > +void f_vint16mf4x4_t () {vint16mf4x4_t t;}
> > +void f_vuint16mf4x4_t () {vuint16mf4x4_t t;}
> > +void f_vint16mf4x5_t () {vint16mf4x5_t t;}
> > +void f_vuint16mf4x5_t () {vuint16mf4x5_t t;}
> > +void f_vint16mf4x6_t () {vint16mf4x6_t t;}
> > +void f_vuint16mf4x6_t () {vuint16mf4x6_t t;}
> > +void f_vint16mf4x7_t () {vint16mf4x7_t t;}
> > +void f_vuint16mf4x7_t () {vuint16mf4x7_t t;}
> > +void f_vint16mf4x8_t () {vint16mf4x8_t t;}
> > +void f_vuint16mf4x8_t () {vuint16mf4x8_t t;}
> > void f_vint16mf2x2_t () {vint16mf2x2_t t;}
> > void f_vuint16mf2x2_t () {vuint16mf2x2_t t;}
> > void f_vint16mf2x3_t () {vint16mf2x3_t t;}
> > @@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;}
> > void f_vuint16m2x4_t () {vuint16m2x4_t t;}
> > void f_vint16m4x2_t () {vint16m4x2_t t;}
> > void f_vuint16m4x2_t () {vuint16m4x2_t t;}
> > -void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */
> > -void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */
> > -void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */
> > -void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */
> > -void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */
> > -void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */
> > -void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */
> > -void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */
> > -void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */
> > -void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */
> > -void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */
> > -void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */
> > -void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */
> > -void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */
> > +void f_vint32mf2x2_t () {vint32mf2x2_t t;}
> > +void f_vuint32mf2x2_t () {vuint32mf2x2_t t;}
> > +void f_vint32mf2x3_t () {vint32mf2x3_t t;}
> > +void f_vuint32mf2x3_t () {vuint32mf2x3_t t;}
> > +void f_vint32mf2x4_t () {vint32mf2x4_t t;}
> > +void f_vuint32mf2x4_t () {vuint32mf2x4_t t;}
> > +void f_vint32mf2x5_t () {vint32mf2x5_t t;}
> > +void f_vuint32mf2x5_t () {vuint32mf2x5_t t;}
> > +void f_vint32mf2x6_t () {vint32mf2x6_t t;}
> > +void f_vuint32mf2x6_t () {vuint32mf2x6_t t;}
> > +void f_vint32mf2x7_t () {vint32mf2x7_t t;}
> > +void f_vuint32mf2x7_t () {vuint32mf2x7_t t;}
> > +void f_vint32mf2x8_t () {vint32mf2x8_t t;}
> > +void f_vuint32mf2x8_t () {vuint32mf2x8_t t;}
> > void f_vint32m1x2_t () {vint32m1x2_t t;}
> > void f_vuint32m1x2_t () {vuint32m1x2_t t;}
> > void f_vint32m1x3_t () {vint32m1x3_t t;}
> > @@ -153,54 +153,143 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> > void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> > void f_vint32m4x2_t () {vint32m4x2_t t;}
> > void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> > -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> > -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> > -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> > -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> > -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> > -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> > -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> > -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> > -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> > -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> > -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> > -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> > -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> > -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> > -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> > -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> > -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> > -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> > -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> > -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> > -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> > -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> > -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> > -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> > -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> > -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> > -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> > -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> > -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> > -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
> > -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
> > -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
> > -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
> > -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
> > -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
> > -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
> > -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
> > -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
> > -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
> > -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
> > -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> > -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> > -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> > -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> > -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> > -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> > -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> > -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> > -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> > -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> > -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> > +
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void f_vint64m1x2_t () {vint64m1x2_t t;}
> > +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> > +void f_vint64m1x3_t () {vint64m1x3_t t;}
> > +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> > +void f_vint64m1x4_t () {vint64m1x4_t t;}
> > +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> > +void f_vint64m1x5_t () {vint64m1x5_t t;}
> > +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> > +void f_vint64m1x6_t () {vint64m1x6_t t;}
> > +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> > +void f_vint64m1x7_t () {vint64m1x7_t t;}
> > +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> > +void f_vint64m1x8_t () {vint64m1x8_t t;}
> > +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> > +void f_vint64m2x2_t () {vint64m2x2_t t;}
> > +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> > +void f_vint64m2x3_t () {vint64m2x3_t t;}
> > +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> > +void f_vint64m2x4_t () {vint64m2x4_t t;}
> > +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> > +void f_vint64m4x2_t () {vint64m4x2_t t;}
> > +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> > +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> > +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> > +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> > +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> > +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> > +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> > +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> > +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> > +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> > +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> > +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
> > +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
> > +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
> > +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
> > +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> > +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> > +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> > +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> > +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> > +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> > +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> > +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> > +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> > +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> > +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> > +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> > +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> > +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> > +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> > +
> > +void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +
> > +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +
> > +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +
> > +void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +
> > +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
> > index ed180749cb6..967eeece274 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c
> > @@ -153,54 +153,108 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> > void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> > void f_vint32m4x2_t () {vint32m4x2_t t;}
> > void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> > -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> > -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> > -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> > -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> > -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> > -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> > -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> > -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> > -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> > -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> > -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> > -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> > -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> > -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> > -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> > -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> > -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> > -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> > -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> > -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> > -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> > -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> > -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> > -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> > -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> > -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> > -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> > -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> > -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> > -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
> > -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
> > -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
> > -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
> > -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
> > -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
> > -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
> > -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
> > -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
> > -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
> > -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
> > -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> > -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> > -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> > -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> > -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> > -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> > -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> > -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> > -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> > -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> > -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> > +void f_vint64m1x2_t () {vint64m1x2_t t;}
> > +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> > +void f_vint64m1x3_t () {vint64m1x3_t t;}
> > +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> > +void f_vint64m1x4_t () {vint64m1x4_t t;}
> > +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> > +void f_vint64m1x5_t () {vint64m1x5_t t;}
> > +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> > +void f_vint64m1x6_t () {vint64m1x6_t t;}
> > +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> > +void f_vint64m1x7_t () {vint64m1x7_t t;}
> > +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> > +void f_vint64m1x8_t () {vint64m1x8_t t;}
> > +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> > +void f_vint64m2x2_t () {vint64m2x2_t t;}
> > +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> > +void f_vint64m2x3_t () {vint64m2x3_t t;}
> > +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> > +void f_vint64m2x4_t () {vint64m2x4_t t;}
> > +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> > +void f_vint64m4x2_t () {vint64m4x2_t t;}
> > +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> > +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> > +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> > +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> > +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> > +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> > +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> > +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> > +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> > +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> > +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> > +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
> > +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
> > +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
> > +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
> > +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> > +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> > +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> > +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> > +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> > +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> > +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> > +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> > +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> > +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> > +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> > +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> > +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> > +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> > +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> > +
> > +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +
> > +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +
> > +void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
> > index 70e0989b6e1..b868f314163 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c
> > @@ -3,20 +3,20 @@
> >
> > #include "riscv_vector.h"
> >
> > -void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */
> > -void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */
> > -void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */
> > -void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */
> > -void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */
> > -void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */
> > -void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */
> > -void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */
> > -void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */
> > -void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */
> > -void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */
> > -void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */
> > -void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */
> > -void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */
> > +void f_vint8mf8x2_t () {vint8mf8x2_t t;}
> > +void f_vuint8mf8x2_t () {vuint8mf8x2_t t;}
> > +void f_vint8mf8x3_t () {vint8mf8x3_t t;}
> > +void f_vuint8mf8x3_t () {vuint8mf8x3_t t;}
> > +void f_vint8mf8x4_t () {vint8mf8x4_t t;}
> > +void f_vuint8mf8x4_t () {vuint8mf8x4_t t;}
> > +void f_vint8mf8x5_t () {vint8mf8x5_t t;}
> > +void f_vuint8mf8x5_t () {vuint8mf8x5_t t;}
> > +void f_vint8mf8x6_t () {vint8mf8x6_t t;}
> > +void f_vuint8mf8x6_t () {vuint8mf8x6_t t;}
> > +void f_vint8mf8x7_t () {vint8mf8x7_t t;}
> > +void f_vuint8mf8x7_t () {vuint8mf8x7_t t;}
> > +void f_vint8mf8x8_t () {vint8mf8x8_t t;}
> > +void f_vuint8mf8x8_t () {vuint8mf8x8_t t;}
> > void f_vint8mf4x2_t () {vint8mf4x2_t t;}
> > void f_vuint8mf4x2_t () {vuint8mf4x2_t t;}
> > void f_vint8mf4x3_t () {vint8mf4x3_t t;}
> > @@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;}
> > void f_vuint8m2x4_t () {vuint8m2x4_t t;}
> > void f_vint8m4x2_t () {vint8m4x2_t t;}
> > void f_vuint8m4x2_t () {vuint8m4x2_t t;}
> > -void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */
> > -void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */
> > -void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */
> > -void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */
> > -void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */
> > -void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */
> > -void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */
> > -void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */
> > -void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */
> > -void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */
> > -void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */
> > -void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */
> > -void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */
> > -void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */
> > +void f_vint16mf4x2_t () {vint16mf4x2_t t;}
> > +void f_vuint16mf4x2_t () {vuint16mf4x2_t t;}
> > +void f_vint16mf4x3_t () {vint16mf4x3_t t;}
> > +void f_vuint16mf4x3_t () {vuint16mf4x3_t t;}
> > +void f_vint16mf4x4_t () {vint16mf4x4_t t;}
> > +void f_vuint16mf4x4_t () {vuint16mf4x4_t t;}
> > +void f_vint16mf4x5_t () {vint16mf4x5_t t;}
> > +void f_vuint16mf4x5_t () {vuint16mf4x5_t t;}
> > +void f_vint16mf4x6_t () {vint16mf4x6_t t;}
> > +void f_vuint16mf4x6_t () {vuint16mf4x6_t t;}
> > +void f_vint16mf4x7_t () {vint16mf4x7_t t;}
> > +void f_vuint16mf4x7_t () {vuint16mf4x7_t t;}
> > +void f_vint16mf4x8_t () {vint16mf4x8_t t;}
> > +void f_vuint16mf4x8_t () {vuint16mf4x8_t t;}
> > void f_vint16mf2x2_t () {vint16mf2x2_t t;}
> > void f_vuint16mf2x2_t () {vuint16mf2x2_t t;}
> > void f_vint16mf2x3_t () {vint16mf2x3_t t;}
> > @@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;}
> > void f_vuint16m2x4_t () {vuint16m2x4_t t;}
> > void f_vint16m4x2_t () {vint16m4x2_t t;}
> > void f_vuint16m4x2_t () {vuint16m4x2_t t;}
> > -void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */
> > -void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */
> > -void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */
> > -void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */
> > -void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */
> > -void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */
> > -void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */
> > -void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */
> > -void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */
> > -void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */
> > -void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */
> > -void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */
> > -void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */
> > -void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */
> > +void f_vint32mf2x2_t () {vint32mf2x2_t t;}
> > +void f_vuint32mf2x2_t () {vuint32mf2x2_t t;}
> > +void f_vint32mf2x3_t () {vint32mf2x3_t t;}
> > +void f_vuint32mf2x3_t () {vuint32mf2x3_t t;}
> > +void f_vint32mf2x4_t () {vint32mf2x4_t t;}
> > +void f_vuint32mf2x4_t () {vuint32mf2x4_t t;}
> > +void f_vint32mf2x5_t () {vint32mf2x5_t t;}
> > +void f_vuint32mf2x5_t () {vuint32mf2x5_t t;}
> > +void f_vint32mf2x6_t () {vint32mf2x6_t t;}
> > +void f_vuint32mf2x6_t () {vuint32mf2x6_t t;}
> > +void f_vint32mf2x7_t () {vint32mf2x7_t t;}
> > +void f_vuint32mf2x7_t () {vuint32mf2x7_t t;}
> > +void f_vint32mf2x8_t () {vint32mf2x8_t t;}
> > +void f_vuint32mf2x8_t () {vuint32mf2x8_t t;}
> > void f_vint32m1x2_t () {vint32m1x2_t t;}
> > void f_vuint32m1x2_t () {vuint32m1x2_t t;}
> > void f_vint32m1x3_t () {vint32m1x3_t t;}
> > @@ -153,35 +153,35 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> > void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> > void f_vint32m4x2_t () {vint32m4x2_t t;}
> > void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> > -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> > -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> > -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> > -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> > -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> > -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> > -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> > -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> > -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> > -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> > -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> > -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> > -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> > -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> > -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> > -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> > -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> > -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> > -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> > -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> > -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> > -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> > -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> > -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> > -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> > -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> > -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> > -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> > -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> > +void f_vint64m1x2_t () {vint64m1x2_t t;}
> > +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> > +void f_vint64m1x3_t () {vint64m1x3_t t;}
> > +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> > +void f_vint64m1x4_t () {vint64m1x4_t t;}
> > +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> > +void f_vint64m1x5_t () {vint64m1x5_t t;}
> > +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> > +void f_vint64m1x6_t () {vint64m1x6_t t;}
> > +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> > +void f_vint64m1x7_t () {vint64m1x7_t t;}
> > +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> > +void f_vint64m1x8_t () {vint64m1x8_t t;}
> > +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> > +void f_vint64m2x2_t () {vint64m2x2_t t;}
> > +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> > +void f_vint64m2x3_t () {vint64m2x3_t t;}
> > +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> > +void f_vint64m2x4_t () {vint64m2x4_t t;}
> > +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> > +void f_vint64m4x2_t () {vint64m4x2_t t;}
> > +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> > +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> > +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> > +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> > +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> > +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> > +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> > +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> > void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> > void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> > void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> > @@ -193,14 +193,107 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> > void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> > void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> > void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> > -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> > -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> > -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> > -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> > -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> > -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> > -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> > -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> > -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> > -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> > -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> > +
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> > +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> > +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> > +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> > +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> > +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> > +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> > +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> > +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> > +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> > +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> > +
> > +void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +
> > +void new_f_vint16mf4x2_t (vint16mf4x2_t t) { } /* { dg-error {argument type 'vint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint16mf4x2_t (vuint16mf4x2_t t) { } /* { dg-error {argument type 'vuint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint16mf4x3_t (vint16mf4x3_t t) { } /* { dg-error {argument type 'vint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint16mf4x3_t (vuint16mf4x3_t t) { } /* { dg-error {argument type 'vuint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint16mf4x4_t (vint16mf4x4_t t) { } /* { dg-error {argument type 'vint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint16mf4x4_t (vuint16mf4x4_t t) { } /* { dg-error {argument type 'vuint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint16mf4x5_t (vint16mf4x5_t t) { } /* { dg-error {argument type 'vint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint16mf4x5_t (vuint16mf4x5_t t) { } /* { dg-error {argument type 'vuint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint16mf4x6_t (vint16mf4x6_t t) { } /* { dg-error {argument type 'vint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint16mf4x6_t (vuint16mf4x6_t t) { } /* { dg-error {argument type 'vuint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint16mf4x7_t (vint16mf4x7_t t) { } /* { dg-error {argument type 'vint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint16mf4x7_t (vuint16mf4x7_t t) { } /* { dg-error {argument type 'vuint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint16mf4x8_t (vint16mf4x8_t t) { } /* { dg-error {argument type 'vint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint16mf4x8_t (vuint16mf4x8_t t) { } /* { dg-error {argument type 'vuint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +
> > +void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +
> > +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +
> > +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */
> > +
> > +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
> > index 2a615f80816..094b7efdef4 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c
> > @@ -153,28 +153,28 @@ void f_vint32m2x4_t () {vint32m2x4_t t;}
> > void f_vuint32m2x4_t () {vuint32m2x4_t t;}
> > void f_vint32m4x2_t () {vint32m4x2_t t;}
> > void f_vuint32m4x2_t () {vuint32m4x2_t t;}
> > -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */
> > -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */
> > -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */
> > -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */
> > -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */
> > -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */
> > -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */
> > -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */
> > -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */
> > -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */
> > -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */
> > -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */
> > -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */
> > -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */
> > -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */
> > -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */
> > -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */
> > -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */
> > -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */
> > -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */
> > -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */
> > -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */
> > +void f_vint64m1x2_t () {vint64m1x2_t t;}
> > +void f_vuint64m1x2_t () {vuint64m1x2_t t;}
> > +void f_vint64m1x3_t () {vint64m1x3_t t;}
> > +void f_vuint64m1x3_t () {vuint64m1x3_t t;}
> > +void f_vint64m1x4_t () {vint64m1x4_t t;}
> > +void f_vuint64m1x4_t () {vuint64m1x4_t t;}
> > +void f_vint64m1x5_t () {vint64m1x5_t t;}
> > +void f_vuint64m1x5_t () {vuint64m1x5_t t;}
> > +void f_vint64m1x6_t () {vint64m1x6_t t;}
> > +void f_vuint64m1x6_t () {vuint64m1x6_t t;}
> > +void f_vint64m1x7_t () {vint64m1x7_t t;}
> > +void f_vuint64m1x7_t () {vuint64m1x7_t t;}
> > +void f_vint64m1x8_t () {vint64m1x8_t t;}
> > +void f_vuint64m1x8_t () {vuint64m1x8_t t;}
> > +void f_vint64m2x2_t () {vint64m2x2_t t;}
> > +void f_vuint64m2x2_t () {vuint64m2x2_t t;}
> > +void f_vint64m2x3_t () {vint64m2x3_t t;}
> > +void f_vuint64m2x3_t () {vuint64m2x3_t t;}
> > +void f_vint64m2x4_t () {vint64m2x4_t t;}
> > +void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> > +void f_vint64m4x2_t () {vint64m4x2_t t;}
> > +void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> > void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> > void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> > void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> > @@ -193,14 +193,54 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> > void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> > void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> > void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> > -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> > -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> > -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> > -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> > -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> > -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> > -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> > -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> > -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> > -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> > -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> > +
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> > +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> > +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> > +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> > +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> > +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> > +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> > +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> > +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> > +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> > +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> > +
> > +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +
> > +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> > +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
> > index 92f4ee02d20..6e08f522d9f 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c
> > @@ -54,12 +54,27 @@ void foo47 () {vint64m4_t t;}
> > void foo48 () {vuint64m4_t t;}
> > void foo49 () {vint64m8_t t;}
> > void foo50 () {vuint64m8_t t;}
> > -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
> > -void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */
> > -void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */
> > -void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */
> > -void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */
> > -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> > -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> > -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> > -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> > +
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo57 () {vfloat32mf2_t t;}
> > +void foo58 () {vfloat32m1_t t;}
> > +void foo59 () {vfloat32m2_t t;}
> > +void foo60 () {vfloat32m4_t t;}
> > +void foo61 () {vfloat32m8_t t;}
> > +void foo62 () {vfloat64m1_t t;}
> > +void foo63 () {vfloat64m2_t t;}
> > +void foo64 () {vfloat64m4_t t;}
> > +void foo65 () {vfloat64m8_t t;}
> > +
> > +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> > +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> > +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> > +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
> > index 3a425721863..4fb40233509 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c
> > @@ -59,7 +59,17 @@ void foo58 () {vfloat32m1_t t;}
> > void foo59 () {vfloat32m2_t t;}
> > void foo60 () {vfloat32m4_t t;}
> > void foo61 () {vfloat32m8_t t;}
> > -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> > -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> > -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> > -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> > +
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo62 () {vfloat64m1_t t;}
> > +void foo63 () {vfloat64m2_t t;}
> > +void foo64 () {vfloat64m4_t t;}
> > +void foo65 () {vfloat64m8_t t;}
> > +
> > +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> > +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> > +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> > +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
> > index de850e5e10d..28b3ae708f5 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c
> > @@ -3,15 +3,15 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> > +void foo0 () {vbool64_t t;}
> > void foo1 () {vbool32_t t;}
> > void foo2 () {vbool16_t t;}
> > void foo3 () {vbool8_t t;}
> > void foo4 () {vbool4_t t;}
> > void foo5 () {vbool2_t t;}
> > void foo6 () {vbool1_t t;}
> > -void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> > -void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> > +void foo7 () {vint8mf8_t t;}
> > +void foo8 () {vuint8mf8_t t;}
> > void foo9 () {vint8mf4_t t;}
> > void foo10 () {vuint8mf4_t t;}
> > void foo11 () {vint8mf2_t t;}
> > @@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;}
> > void foo18 () {vuint8m4_t t;}
> > void foo19 () {vint8m8_t t;}
> > void foo20 () {vuint8m8_t t;}
> > -void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> > -void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> > +void foo21 () {vint16mf4_t t;}
> > +void foo22 () {vuint16mf4_t t;}
> > void foo23 () {vint16mf2_t t;}
> > void foo24 () {vuint16mf2_t t;}
> > void foo25 () {vint16m1_t t;}
> > @@ -36,8 +36,8 @@ void foo29 () {vint16m4_t t;}
> > void foo30 () {vuint16m4_t t;}
> > void foo31 () {vint16m8_t t;}
> > void foo32 () {vuint16m8_t t;}
> > -void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> > -void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> > +void foo33 () {vint32mf2_t t;}
> > +void foo34 () {vuint32mf2_t t;}
> > void foo35 () {vint32m1_t t;}
> > void foo36 () {vuint32m1_t t;}
> > void foo37 () {vint32m2_t t;}
> > @@ -46,20 +46,50 @@ void foo39 () {vint32m4_t t;}
> > void foo40 () {vuint32m4_t t;}
> > void foo41 () {vint32m8_t t;}
> > void foo42 () {vuint32m8_t t;}
> > -void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> > -void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> > -void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> > -void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> > -void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> > -void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> > -void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> > -void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> > -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
> > -void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */
> > -void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */
> > -void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */
> > -void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */
> > -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> > -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> > -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> > -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> > +void foo43 () {vint64m1_t t;}
> > +void foo44 () {vuint64m1_t t;}
> > +void foo45 () {vint64m2_t t;}
> > +void foo46 () {vuint64m2_t t;}
> > +void foo47 () {vint64m4_t t;}
> > +void foo48 () {vuint64m4_t t;}
> > +void foo49 () {vint64m8_t t;}
> > +void foo50 () {vuint64m8_t t;}
> > +
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo57 () {vfloat32mf2_t t;}
> > +void foo58 () {vfloat32m1_t t;}
> > +void foo59 () {vfloat32m2_t t;}
> > +void foo60 () {vfloat32m4_t t;}
> > +void foo61 () {vfloat32m8_t t;}
> > +void foo62 () {vfloat64m1_t t;}
> > +void foo63 () {vfloat64m2_t t;}
> > +void foo64 () {vfloat64m4_t t;}
> > +void foo65 () {vfloat64m8_t t;}
> > +
> > +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo33 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> > +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> > +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> > +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
> > index 1d79b6b8eac..e48ee391992 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c
> > @@ -3,15 +3,15 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> > +void foo0 () {vbool64_t t;}
> > void foo1 () {vbool32_t t;}
> > void foo2 () {vbool16_t t;}
> > void foo3 () {vbool8_t t;}
> > void foo4 () {vbool4_t t;}
> > void foo5 () {vbool2_t t;}
> > void foo6 () {vbool1_t t;}
> > -void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> > -void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> > +void foo7 () {vint8mf8_t t;}
> > +void foo8 () {vuint8mf8_t t;}
> > void foo9 () {vint8mf4_t t;}
> > void foo10 () {vuint8mf4_t t;}
> > void foo11 () {vint8mf2_t t;}
> > @@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;}
> > void foo18 () {vuint8m4_t t;}
> > void foo19 () {vint8m8_t t;}
> > void foo20 () {vuint8m8_t t;}
> > -void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> > -void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> > +void foo21 () {vint16mf4_t t;}
> > +void foo22 () {vuint16mf4_t t;}
> > void foo23 () {vint16mf2_t t;}
> > void foo24 () {vuint16mf2_t t;}
> > void foo25 () {vint16m1_t t;}
> > @@ -36,8 +36,13 @@ void foo29 () {vint16m4_t t;}
> > void foo30 () {vuint16m4_t t;}
> > void foo31 () {vint16m8_t t;}
> > void foo32 () {vuint16m8_t t;}
> > -void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> > -void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> > +
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo33 () {vint32mf2_t t;}
> > +void foo34 () {vuint32mf2_t t;}
> > void foo35 () {vint32m1_t t;}
> > void foo36 () {vuint32m1_t t;}
> > void foo37 () {vint32m2_t t;}
> > @@ -46,20 +51,41 @@ void foo39 () {vint32m4_t t;}
> > void foo40 () {vuint32m4_t t;}
> > void foo41 () {vint32m8_t t;}
> > void foo42 () {vuint32m8_t t;}
> > -void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> > -void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> > -void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> > -void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> > -void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> > -void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> > -void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> > -void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> > -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */
> > +void foo43 () {vint64m1_t t;}
> > +void foo44 () {vuint64m1_t t;}
> > +void foo45 () {vint64m2_t t;}
> > +void foo46 () {vuint64m2_t t;}
> > +void foo47 () {vint64m4_t t;}
> > +void foo48 () {vuint64m4_t t;}
> > +void foo49 () {vint64m8_t t;}
> > +void foo50 () {vuint64m8_t t;}
> > +void foo57 () {vfloat32mf2_t t;}
> > void foo58 () {vfloat32m1_t t;}
> > void foo59 () {vfloat32m2_t t;}
> > void foo60 () {vfloat32m4_t t;}
> > void foo61 () {vfloat32m8_t t;}
> > -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */
> > -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */
> > -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */
> > -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */
> > +void foo62 () {vfloat64m1_t t;}
> > +void foo63 () {vfloat64m2_t t;}
> > +void foo64 () {vfloat64m4_t t;}
> > +void foo65 () {vfloat64m8_t t;}
> > +
> > +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32'} } */
> > +void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo33 (vint32mf2_t t) {} /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */
> > +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */
> > +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */
> > +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
> > index 98a7d391d4e..57ede32a400 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c
> > @@ -175,32 +175,67 @@ void f_vint64m2x4_t () {vint64m2x4_t t;}
> > void f_vuint64m2x4_t () {vuint64m2x4_t t;}
> > void f_vint64m4x2_t () {vint64m4x2_t t;}
> > void f_vuint64m4x2_t () {vuint64m4x2_t t;}
> > -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */
> > -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */
> > -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */
> > -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */
> > -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */
> > -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */
> > -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */
> > -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */
> > -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */
> > -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */
> > -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */
> > -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */
> > -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */
> > -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */
> > -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */
> > -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */
> > -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */
> > -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */
> > -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */
> > -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */
> > -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */
> > -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */
> > -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */
> > -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */
> > -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */
> > -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */
> > -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */
> > -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */
> > -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */
> > +
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;}
> > +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;}
> > +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;}
> > +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;}
> > +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;}
> > +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;}
> > +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;}
> > +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;}
> > +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;}
> > +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;}
> > +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;}
> > +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;}
> > +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;}
> > +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;}
> > +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;}
> > +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;}
> > +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;}
> > +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;}
> > +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;}
> > +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;}
> > +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;}
> > +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;}
> > +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;}
> > +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;}
> > +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;}
> > +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;}
> > +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;}
> > +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;}
> > +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;}
> > +
> > +void f_arg_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */
> > +void f_arg_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */
> > --
> > 2.34.1
> >
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH v2] RISC-V: Allow RVV intrinsic for more function target
2024-04-12 4:51 ` Christoph Müllner
@ 2024-04-12 6:12 ` Li, Pan2
2024-04-12 7:39 ` Kito Cheng
0 siblings, 1 reply; 13+ messages in thread
From: Li, Pan2 @ 2024-04-12 6:12 UTC (permalink / raw)
To: Christoph Müllner
Cc: Kito Cheng, gcc-patches, juzhe.zhong, Wang, Yanzhang
Thanks Christoph, will take care of it ASAP.
Pan
-----Original Message-----
From: Christoph Müllner <christoph.muellner@vrull.eu>
Sent: Friday, April 12, 2024 12:51 PM
To: Li, Pan2 <pan2.li@intel.com>
Cc: Kito Cheng <kito.cheng@gmail.com>; gcc-patches@gcc.gnu.org; juzhe.zhong@rivai.ai; Wang, Yanzhang <yanzhang.wang@intel.com>
Subject: Re: [PATCH v2] RISC-V: Allow RVV intrinsic for more function target
Hi Pan,
This patch triggers the following error with --enable-werror-always:
gcc/config/riscv/riscv.cc: In function ‘void
riscv_validate_vector_type(const_tree, const char*)’:
gcc/config/riscv/riscv.cc:5614:23: error: comparison of integer
expressions of different signedness: ‘int’ and ‘unsigned int’
[-Werror=sign-compare]
5614 | if (TARGET_MIN_VLEN < required_min_vlen)
BR
Christoph
On Mon, Apr 8, 2024 at 3:31 AM Li, Pan2 <pan2.li@intel.com> wrote:
>
> Committed, thanks Kito.
>
> Pan
>
> -----Original Message-----
> From: Kito Cheng <kito.cheng@gmail.com>
> Sent: Monday, April 8, 2024 9:24 AM
> To: Li, Pan2 <pan2.li@intel.com>
> Cc: gcc-patches@gcc.gnu.org; juzhe.zhong@rivai.ai; Wang, Yanzhang <yanzhang.wang@intel.com>
> Subject: Re: [PATCH v2] RISC-V: Allow RVV intrinsic for more function target
>
> LGTM :)
>
> On Tue, Apr 2, 2024 at 10:28 PM <pan2.li@intel.com> wrote:
> >
> > From: Pan Li <pan2.li@intel.com>
> >
> > In previous, we allowed the target(("arch=+v")) for a function with
> > rv64gc build. This patch would like to support more arch options as
> > below:
> > * zve32x
> > * zve32f
> > * zve64x
> > * zve64f
> > * zve64d
> > * zvfhmin
> > * zvfh
> > * zvk*
> > * zvbb
> >
> > For example, we have sample code as below.
> > vfloat32m1_t
> > __attribute__((target("arch=+zve64f")))
> > test_9 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > {
> > return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > }
> >
> > It will generate the asm code when build with -O3 -march=rv64gc
> > test_9:
> > vsetvli zero,a0,e32,m1,ta,ma
> > vfadd.vv v8,v8,v9
> > ret
> >
> > Meanwhile, this patch introduces more error handling for the target
> > attribute. Take arch=+zve32x with vfloat32m1_t will have error message
> > "'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension".
> > And take arch=+zve32f with vfloat16m1_t will have error message
> > "'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension".
> >
> > By default, all the RVV types includes the cmdline march will be
> > registered when include the riscv_vector.h. And we have sorts of check
> > during args and return types.
> >
> > Below test are passed for this patch:
> > * The riscv fully regression test.
> >
> > gcc/ChangeLog:
> >
> > * config/riscv/riscv-c.cc (struct pragma_intrinsic_flags): New
> > struct to hold all intrinisc related flags.
> > (riscv_pragma_intrinsic_flags_pollute): New func to pollute
> > the intrinsic flags and backup original flags.
> > (riscv_pragma_intrinsic_flags_restore): New func to restore
> > the flags from the backup intrinsic flags.
> > (riscv_pragma_intrinsic): Pollute the flags and register all
> > possible builtin types and functions, then restore and reinit.
> > * config/riscv/riscv-protos.h (reinit_builtins): New func
> > decl to reinit after flags pollution.
> > (riscv_option_override): New extern func decl.
> > * config/riscv/riscv-vector-builtins.cc (register_builtin_types_on_null):
> > New func to register builtin types if null.
> > (DEF_RVV_TYPE): Ditto.
> > (DEF_RVV_TUPLE_TYPE): Ditto.
> > (reinit_builtins): New func impl to reinit after flags pollution.
> > * config/riscv/riscv-vector-builtins.cc (expand_builtin): Return
> > target rtx after error_at.
> > * config/riscv/riscv.cc (riscv_vector_int_type_p): New predicate
> > func to tell one tree type is integer or not.
> > (riscv_vector_float_type_p): New predicate func to tell one tree
> > type is float or not.
> > (riscv_vector_element_bitsize): New func to get the element bitsize
> > of a vector tree type.
> > (riscv_vector_required_min_vlen): New func to get the required min vlen
> > of a vector tree type.
> > (riscv_validate_vector_type): New func to validate the tree type
> > is valid on flags.
> > (riscv_return_value_is_vector_type_p): Leverage the func
> > riscv_validate_vector_type to do the tree type validation.
> > (riscv_arguments_is_vector_type_p): Ditto.
> > (riscv_override_options_internal): Ditto.
> >
> > gcc/testsuite/ChangeLog:
> >
> > * gcc.target/riscv/rvv/base/pr109479-1.c: Adjust the existing test
> > scenarios and add new error check tests.
> > * gcc.target/riscv/rvv/base/pr109479-2.c: Ditto.
> > * gcc.target/riscv/rvv/base/pr109479-3.c: Ditto.
> > * gcc.target/riscv/rvv/base/pr109479-4.c: Diito.
> > * gcc.target/riscv/rvv/base/pr109479-5.c: Diito.
> > * gcc.target/riscv/rvv/base/pr109479-6.c: Diito.
> > * gcc.target/riscv/rvv/base/user-10.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-12.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-13.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-14.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-15.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-2.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-3.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-5.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-6.c: Ditto.
> > * gcc.target/riscv/rvv/base/user-9.c: Ditto.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: New test.
> > * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c: New test.
> >
> > Signed-off-by: Pan Li <pan2.li@intel.com>
> > ---
> > gcc/config/riscv/riscv-c.cc | 94 +++++-
> > gcc/config/riscv/riscv-protos.h | 2 +
> > gcc/config/riscv/riscv-vector-builtins.cc | 53 +++-
> > gcc/config/riscv/riscv.cc | 157 +++++++++-
> > .../gcc.target/riscv/rvv/base/pr109479-1.c | 29 +-
> > .../gcc.target/riscv/rvv/base/pr109479-2.c | 29 +-
> > .../gcc.target/riscv/rvv/base/pr109479-3.c | 50 +++-
> > .../gcc.target/riscv/rvv/base/pr109479-4.c | 51 +++-
> > .../gcc.target/riscv/rvv/base/pr109479-5.c | 37 ++-
> > .../gcc.target/riscv/rvv/base/pr109479-6.c | 33 ++-
> > .../target_attribute_v_with_intrinsic-10.c | 12 +
> > .../target_attribute_v_with_intrinsic-11.c | 26 ++
> > .../target_attribute_v_with_intrinsic-12.c | 33 +++
> > .../target_attribute_v_with_intrinsic-13.c | 33 +++
> > .../target_attribute_v_with_intrinsic-14.c | 40 +++
> > .../target_attribute_v_with_intrinsic-15.c | 47 +++
> > .../target_attribute_v_with_intrinsic-16.c | 12 +
> > .../target_attribute_v_with_intrinsic-17.c | 13 +
> > .../target_attribute_v_with_intrinsic-18.c | 13 +
> > .../target_attribute_v_with_intrinsic-19.c | 13 +
> > .../target_attribute_v_with_intrinsic-20.c | 13 +
> > .../target_attribute_v_with_intrinsic-21.c | 13 +
> > .../target_attribute_v_with_intrinsic-22.c | 13 +
> > .../target_attribute_v_with_intrinsic-23.c | 13 +
> > .../target_attribute_v_with_intrinsic-24.c | 13 +
> > .../target_attribute_v_with_intrinsic-25.c | 13 +
> > .../target_attribute_v_with_intrinsic-26.c | 13 +
> > .../target_attribute_v_with_intrinsic-27.c | 13 +
> > .../target_attribute_v_with_intrinsic-28.c | 13 +
> > .../target_attribute_v_with_intrinsic-29.c | 13 +
> > .../target_attribute_v_with_intrinsic-30.c | 12 +
> > .../target_attribute_v_with_intrinsic-31.c | 12 +
> > .../target_attribute_v_with_intrinsic-32.c | 12 +
> > .../target_attribute_v_with_intrinsic-33.c | 12 +
> > .../target_attribute_v_with_intrinsic-34.c | 12 +
> > .../target_attribute_v_with_intrinsic-35.c | 12 +
> > .../target_attribute_v_with_intrinsic-36.c | 12 +
> > .../target_attribute_v_with_intrinsic-37.c | 12 +
> > .../target_attribute_v_with_intrinsic-38.c | 12 +
> > .../target_attribute_v_with_intrinsic-39.c | 12 +
> > .../target_attribute_v_with_intrinsic-40.c | 12 +
> > .../target_attribute_v_with_intrinsic-41.c | 12 +
> > .../target_attribute_v_with_intrinsic-42.c | 12 +
> > .../target_attribute_v_with_intrinsic-43.c | 12 +
> > .../target_attribute_v_with_intrinsic-44.c | 12 +
> > .../target_attribute_v_with_intrinsic-45.c | 12 +
> > .../target_attribute_v_with_intrinsic-46.c | 12 +
> > .../target_attribute_v_with_intrinsic-47.c | 12 +
> > .../target_attribute_v_with_intrinsic-48.c | 12 +
> > .../target_attribute_v_with_intrinsic-49.c | 12 +
> > .../target_attribute_v_with_intrinsic-50.c | 12 +
> > .../target_attribute_v_with_intrinsic-51.c | 12 +
> > .../target_attribute_v_with_intrinsic-52.c | 12 +
> > .../target_attribute_v_with_intrinsic-53.c | 12 +
> > .../target_attribute_v_with_intrinsic-9.c | 12 +
> > .../gcc.target/riscv/rvv/base/user-10.c | 39 ++-
> > .../gcc.target/riscv/rvv/base/user-12.c | 275 ++++++++++++------
> > .../gcc.target/riscv/rvv/base/user-13.c | 156 ++++++----
> > .../gcc.target/riscv/rvv/base/user-14.c | 257 ++++++++++------
> > .../gcc.target/riscv/rvv/base/user-15.c | 106 ++++---
> > .../gcc.target/riscv/rvv/base/user-2.c | 33 ++-
> > .../gcc.target/riscv/rvv/base/user-3.c | 18 +-
> > .../gcc.target/riscv/rvv/base/user-5.c | 78 +++--
> > .../gcc.target/riscv/rvv/base/user-6.c | 66 +++--
> > .../gcc.target/riscv/rvv/base/user-9.c | 93 ++++--
> > 65 files changed, 1886 insertions(+), 442 deletions(-)
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
> > create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c
> >
> > diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc
> > index 01314037461..43c8eecbb6f 100644
> > --- a/gcc/config/riscv/riscv-c.cc
> > +++ b/gcc/config/riscv/riscv-c.cc
> > @@ -34,6 +34,72 @@ along with GCC; see the file COPYING3. If not see
> >
> > #define builtin_define(TXT) cpp_define (pfile, TXT)
> >
> > +struct pragma_intrinsic_flags
> > +{
> > + int intrinsic_target_flags;
> > +
> > + int intrinsic_riscv_vector_elen_flags;
> > + int intrinsic_riscv_zvl_flags;
> > + int intrinsic_riscv_zvb_subext;
> > + int intrinsic_riscv_zvk_subext;
> > +};
> > +
> > +static void
> > +riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags)
> > +{
> > + flags->intrinsic_target_flags = target_flags;
> > + flags->intrinsic_riscv_vector_elen_flags = riscv_vector_elen_flags;
> > + flags->intrinsic_riscv_zvl_flags = riscv_zvl_flags;
> > + flags->intrinsic_riscv_zvb_subext = riscv_zvb_subext;
> > + flags->intrinsic_riscv_zvk_subext = riscv_zvk_subext;
> > +
> > + target_flags = target_flags
> > + | MASK_VECTOR;
> > +
> > + riscv_zvl_flags = riscv_zvl_flags
> > + | MASK_ZVL32B
> > + | MASK_ZVL64B
> > + | MASK_ZVL128B;
> > +
> > + riscv_vector_elen_flags = riscv_vector_elen_flags
> > + | MASK_VECTOR_ELEN_32
> > + | MASK_VECTOR_ELEN_64
> > + | MASK_VECTOR_ELEN_FP_16
> > + | MASK_VECTOR_ELEN_FP_32
> > + | MASK_VECTOR_ELEN_FP_64;
> > +
> > + riscv_zvb_subext = riscv_zvb_subext
> > + | MASK_ZVBB
> > + | MASK_ZVBC
> > + | MASK_ZVKB;
> > +
> > + riscv_zvk_subext = riscv_zvk_subext
> > + | MASK_ZVKG
> > + | MASK_ZVKNED
> > + | MASK_ZVKNHA
> > + | MASK_ZVKNHB
> > + | MASK_ZVKSED
> > + | MASK_ZVKSH
> > + | MASK_ZVKN
> > + | MASK_ZVKNC
> > + | MASK_ZVKNG
> > + | MASK_ZVKS
> > + | MASK_ZVKSC
> > + | MASK_ZVKSG
> > + | MASK_ZVKT;
> > +}
> > +
> > +static void
> > +riscv_pragma_intrinsic_flags_restore (struct pragma_intrinsic_flags *flags)
> > +{
> > + target_flags = flags->intrinsic_target_flags;
> > +
> > + riscv_vector_elen_flags = flags->intrinsic_riscv_vector_elen_flags;
> > + riscv_zvl_flags = flags->intrinsic_riscv_zvl_flags;
> > + riscv_zvb_subext = flags->intrinsic_riscv_zvb_subext;
> > + riscv_zvk_subext = flags->intrinsic_riscv_zvk_subext;
> > +}
> > +
> > static int
> > riscv_ext_version_value (unsigned major, unsigned minor)
> > {
> > @@ -201,20 +267,20 @@ riscv_pragma_intrinsic (cpp_reader *)
> > if (strcmp (name, "vector") == 0
> > || strcmp (name, "xtheadvector") == 0)
> > {
> > - if (TARGET_VECTOR)
> > - riscv_vector::handle_pragma_vector ();
> > - else /* Indicates riscv_vector.h is included but v is missing in arch */
> > - {
> > - /* To make the the rvv types and intrinsic API available for the
> > - target("arch=+v") attribute, we need to temporally enable the
> > - TARGET_VECTOR, and disable it after all initialized. */
> > - target_flags |= MASK_VECTOR;
> > -
> > - riscv_vector::init_builtins ();
> > - riscv_vector::handle_pragma_vector ();
> > -
> > - target_flags &= ~MASK_VECTOR;
> > - }
> > + struct pragma_intrinsic_flags backup_flags;
> > +
> > + riscv_pragma_intrinsic_flags_pollute (&backup_flags);
> > +
> > + riscv_option_override ();
> > + init_adjust_machine_modes ();
> > + riscv_vector::reinit_builtins ();
> > + riscv_vector::handle_pragma_vector ();
> > +
> > + riscv_pragma_intrinsic_flags_restore (&backup_flags);
> > +
> > + /* Re-initialize after the flags are restored. */
> > + riscv_option_override ();
> > + init_adjust_machine_modes ();
> > }
> > else
> > error ("unknown %<#pragma riscv intrinsic%> option %qs", name);
> > diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h
> > index b8735593805..4677d9c46cd 100644
> > --- a/gcc/config/riscv/riscv-protos.h
> > +++ b/gcc/config/riscv/riscv-protos.h
> > @@ -546,6 +546,7 @@ enum avl_type
> > };
> > /* Routines implemented in riscv-vector-builtins.cc. */
> > void init_builtins (void);
> > +void reinit_builtins (void);
> > const char *mangle_builtin_type (const_tree);
> > tree lookup_vector_type_attribute (const_tree);
> > bool builtin_type_p (const_tree);
> > @@ -762,6 +763,7 @@ extern bool
> > riscv_option_valid_attribute_p (tree, tree, tree, int);
> > extern void
> > riscv_override_options_internal (struct gcc_options *);
> > +extern void riscv_option_override (void);
> >
> > struct riscv_tune_param;
> > /* Information about one micro-arch we know about. */
> > diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc
> > index db9246eed2d..53ccea7889e 100644
> > --- a/gcc/config/riscv/riscv-vector-builtins.cc
> > +++ b/gcc/config/riscv/riscv-vector-builtins.cc
> > @@ -3123,6 +3123,36 @@ register_builtin_types ()
> > #include "riscv-vector-builtins.def"
> > }
> >
> > +/* Similar as register_builtin_types but perform the registration if and
> > + only if the element of abi_vector_type is NULL_TREE. */
> > +static void
> > +register_builtin_types_on_null ()
> > +{
> > + /* Get type node from get_typenode_from_name to prevent we have different type
> > + node define in different target libraries, e.g. int32_t defined as
> > + `long` in RV32/newlib-stdint, but `int` for RV32/glibc-stdint.h.
> > + NOTE: uint[16|32|64]_type_node already defined in tree.h. */
> > + tree int8_type_node = get_typenode_from_name (INT8_TYPE);
> > + tree uint8_type_node = get_typenode_from_name (UINT8_TYPE);
> > + tree int16_type_node = get_typenode_from_name (INT16_TYPE);
> > + tree int32_type_node = get_typenode_from_name (INT32_TYPE);
> > + tree int64_type_node = get_typenode_from_name (INT64_TYPE);
> > +
> > + machine_mode mode;
> > +#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
> > + ARGS...) \
> > + mode = VECTOR_MODE##mode; \
> > + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
> > + register_builtin_type (VECTOR_TYPE_##NAME, SCALAR_TYPE##_type_node, mode);
> > +
> > +#define DEF_RVV_TUPLE_TYPE(NAME, NCHARS, ABI_NAME, SUBPART_TYPE, SCALAR_TYPE, \
> > + NF, VECTOR_SUFFIX) \
> > + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \
> > + register_tuple_type (VECTOR_TYPE_##NAME, VECTOR_TYPE_##SUBPART_TYPE, \
> > + SCALAR_TYPE##_type_node, NF);
> > +#include "riscv-vector-builtins.def"
> > +}
> > +
> > /* Register vector type TYPE under its risv_vector.h name. */
> > static void
> > register_vector_type (vector_type_index type)
> > @@ -4419,6 +4449,22 @@ init_builtins ()
> > handle_pragma_vector ();
> > }
> >
> > +/* Reinitialize builtins similar to init_builtins, but only the null
> > + builtin types will be registered. */
> > +void
> > +reinit_builtins ()
> > +{
> > + rvv_switcher rvv;
> > +
> > + if (!TARGET_VECTOR)
> > + return;
> > +
> > + register_builtin_types_on_null ();
> > +
> > + if (in_lto_p)
> > + handle_pragma_vector ();
> > +}
> > +
> > /* Implement TARGET_VERIFY_TYPE_CONTEXT for RVV types. */
> > bool
> > verify_type_context (location_t loc, type_context_kind context, const_tree type,
> > @@ -4588,8 +4634,11 @@ expand_builtin (unsigned int code, tree exp, rtx target)
> > registered_function &rfn = *(*registered_functions)[code];
> >
> > if (!TARGET_VECTOR)
> > - error_at (EXPR_LOCATION (exp),
> > - "built-in function %qE requires the V ISA extension", exp);
> > + {
> > + error_at (EXPR_LOCATION (exp),
> > + "built-in function %qE requires the V ISA extension", exp);
> > + return target;
> > + }
> >
> > return function_expander (rfn.instance, rfn.decl, exp, target).expand ();
> > }
> > diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
> > index fe9976bfffe..2a71badfdc9 100644
> > --- a/gcc/config/riscv/riscv.cc
> > +++ b/gcc/config/riscv/riscv.cc
> > @@ -5459,6 +5459,152 @@ riscv_v_abi ()
> > return v_abi;
> > }
> >
> > +static bool
> > +riscv_vector_int_type_p (const_tree type)
> > +{
> > + machine_mode mode = TYPE_MODE (type);
> > +
> > + if (VECTOR_MODE_P (mode))
> > + return INTEGRAL_MODE_P (GET_MODE_INNER (mode));
> > +
> > + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> > + return strstr (name, "int") != NULL || strstr (name, "uint") != NULL;
> > +}
> > +
> > +static bool
> > +riscv_vector_float_type_p (const_tree type)
> > +{
> > + machine_mode mode = TYPE_MODE (type);
> > +
> > + if (VECTOR_MODE_P (mode))
> > + return FLOAT_MODE_P (GET_MODE_INNER (mode));
> > +
> > + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> > + return strstr (name, "vfloat") != NULL;
> > +}
> > +
> > +static unsigned
> > +riscv_vector_element_bitsize (const_tree type)
> > +{
> > + machine_mode mode = TYPE_MODE (type);
> > +
> > + if (VECTOR_MODE_P (mode))
> > + return GET_MODE_BITSIZE (GET_MODE_INNER (mode));
> > +
> > + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> > +
> > + if (strstr (name, "bool") != NULL)
> > + return 1;
> > + else if (strstr (name, "int8") != NULL)
> > + return 8;
> > + else if (strstr (name, "int16") != NULL || strstr (name, "float16") != NULL)
> > + return 16;
> > + else if (strstr (name, "int32") != NULL || strstr (name, "float32") != NULL)
> > + return 32;
> > + else if (strstr (name, "int64") != NULL || strstr (name, "float64") != NULL)
> > + return 64;
> > +
> > + gcc_unreachable ();
> > +}
> > +
> > +static unsigned
> > +riscv_vector_required_min_vlen (const_tree type)
> > +{
> > + machine_mode mode = TYPE_MODE (type);
> > +
> > + if (riscv_v_ext_mode_p (mode))
> > + return TARGET_MIN_VLEN;
> > +
> > + unsigned element_bitsize = riscv_vector_element_bitsize (type);
> > + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
> > +
> > + if (strstr (name, "bool64") != NULL)
> > + return element_bitsize * 64;
> > + else if (strstr (name, "bool32") != NULL)
> > + return element_bitsize * 32;
> > + else if (strstr (name, "bool16") != NULL)
> > + return element_bitsize * 16;
> > + else if (strstr (name, "bool8") != NULL)
> > + return element_bitsize * 8;
> > + else if (strstr (name, "bool4") != NULL)
> > + return element_bitsize * 4;
> > + else if (strstr (name, "bool2") != NULL)
> > + return element_bitsize * 2;
> > +
> > + if (strstr (name, "mf8") != NULL)
> > + return element_bitsize * 8;
> > + else if (strstr (name, "mf4") != NULL)
> > + return element_bitsize * 4;
> > + else if (strstr (name, "mf2") != NULL)
> > + return element_bitsize * 2;
> > +
> > + return element_bitsize;
> > +}
> > +
> > +static void
> > +riscv_validate_vector_type (const_tree type, const char *hint)
> > +{
> > + gcc_assert (riscv_vector_type_p (type));
> > +
> > + if (!TARGET_VECTOR)
> > + {
> > + error_at (input_location, "%s %qT requires the V ISA extension",
> > + hint, type);
> > + return;
> > + }
> > +
> > + unsigned element_bitsize = riscv_vector_element_bitsize (type);
> > + bool int_type_p = riscv_vector_int_type_p (type);
> > +
> > + if (int_type_p && element_bitsize == 64
> > + && !TARGET_VECTOR_ELEN_64_P (riscv_vector_elen_flags))
> > + {
> > + error_at (input_location,
> > + "%s %qT requires the zve64x, zve64f, zve64d or v ISA extension",
> > + hint, type);
> > + return;
> > + }
> > +
> > + bool float_type_p = riscv_vector_float_type_p (type);
> > +
> > + if (float_type_p && element_bitsize == 16
> > + && !TARGET_VECTOR_ELEN_FP_16_P (riscv_vector_elen_flags))
> > + {
> > + error_at (input_location,
> > + "%s %qT requires the zvfhmin or zvfh ISA extension",
> > + hint, type);
> > + return;
> > + }
> > +
> > + if (float_type_p && element_bitsize == 32
> > + && !TARGET_VECTOR_ELEN_FP_32_P (riscv_vector_elen_flags))
> > + {
> > + error_at (input_location,
> > + "%s %qT requires the zve32f, zve64f, zve64d or v ISA extension",
> > + hint, type);
> > + return;
> > + }
> > +
> > + if (float_type_p && element_bitsize == 64
> > + && !TARGET_VECTOR_ELEN_FP_64_P (riscv_vector_elen_flags))
> > + {
> > + error_at (input_location,
> > + "%s %qT requires the zve64d or v ISA extension", hint, type);
> > + return;
> > + }
> > +
> > + unsigned required_min_vlen = riscv_vector_required_min_vlen (type);
> > +
> > + if (TARGET_MIN_VLEN < required_min_vlen)
> > + {
> > + error_at (
> > + input_location,
> > + "%s %qT requires the minimal vector length %qd but %qd is given",
> > + hint, type, required_min_vlen, TARGET_MIN_VLEN);
> > + return;
> > + }
> > +}
> > +
> > /* Return true if a function with type FNTYPE returns its value in
> > RISC-V V registers. */
> >
> > @@ -5469,9 +5615,7 @@ riscv_return_value_is_vector_type_p (const_tree fntype)
> >
> > if (riscv_vector_type_p (return_type))
> > {
> > - if (!TARGET_VECTOR)
> > - error_at (input_location,
> > - "return type %qT requires the V ISA extension", return_type);
> > + riscv_validate_vector_type (return_type, "return type");
> > return true;
> > }
> > else
> > @@ -5490,10 +5634,7 @@ riscv_arguments_is_vector_type_p (const_tree fntype)
> > tree arg_type = TREE_VALUE (chain);
> > if (riscv_vector_type_p (arg_type))
> > {
> > - if (!TARGET_VECTOR)
> > - error_at (input_location,
> > - "argument type %qT requires the V ISA extension",
> > - arg_type);
> > + riscv_validate_vector_type (arg_type, "argument type");
> > return true;
> > }
> > }
> > @@ -9107,7 +9248,7 @@ riscv_override_options_internal (struct gcc_options *opts)
> >
> > /* Implement TARGET_OPTION_OVERRIDE. */
> >
> > -static void
> > +void
> > riscv_option_override (void)
> > {
> > #ifdef SUBTARGET_OVERRIDE_OPTIONS
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> > index a13cc12c543..1bd7efe61f2 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c
> > @@ -3,11 +3,24 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> > -void foo1 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> > -void foo2 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> > -void foo3 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> > -void foo4 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> > -void foo5 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> > -void foo6 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> > -void foo7 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo0 () {__rvv_int64m1_t t;}
> > +void foo1 () {__rvv_uint64m1_t t;}
> > +void foo2 () {__rvv_int64m2_t t;}
> > +void foo3 () {__rvv_uint64m2_t t;}
> > +void foo4 () {__rvv_int64m4_t t;}
> > +void foo5 () {__rvv_uint64m4_t t;}
> > +void foo6 () {__rvv_int64m8_t t;}
> > +void foo7 () {__rvv_uint64m8_t t;}
> > +
> > +void new_foo0 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo1 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo2 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo3 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo4 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo5 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo6 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo7 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> > index dd6bcb0f548..ce6a62d1405 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c
> > @@ -3,11 +3,24 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> > -void foo1 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> > -void foo2 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> > -void foo3 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> > -void foo4 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> > -void foo5 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> > -void foo6 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> > -void foo7 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo0 () {vint64m1_t t;}
> > +void foo1 () {vuint64m1_t t;}
> > +void foo2 () {vint64m2_t t;}
> > +void foo3 () {vuint64m2_t t;}
> > +void foo4 () {vint64m4_t t;}
> > +void foo5 () {vuint64m4_t t;}
> > +void foo6 () {vint64m8_t t;}
> > +void foo7 () {vuint64m8_t t;}
> > +
> > +void new_foo0 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo1 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo2 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo3 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo4 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo5 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo6 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo7 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> > index 01e86223da9..5c0cd1b1f7f 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c
> > @@ -3,18 +3,38 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {__rvv_bool64_t t;} /* { dg-error {unknown type name '__rvv_bool64_t'} } */
> > -void foo1 () {__rvv_int8mf8_t t;} /* { dg-error {unknown type name '__rvv_int8mf8_t'} } */
> > -void foo2 () {__rvv_uint8mf8_t t;} /* { dg-error {unknown type name '__rvv_uint8mf8_t'} } */
> > -void foo3 () {__rvv_int16mf4_t t;} /* { dg-error {unknown type name '__rvv_int16mf4_t'} } */
> > -void foo4 () {__rvv_uint16mf4_t t;} /* { dg-error {unknown type name '__rvv_uint16mf4_t'} } */
> > -void foo5 () {__rvv_int32mf2_t t;} /* { dg-error {unknown type name '__rvv_int32mf2_t'} } */
> > -void foo6 () {__rvv_uint32mf2_t t;} /* { dg-error {unknown type name '__rvv_uint32mf2_t'} } */
> > -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> > -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> > -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> > -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> > -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> > -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> > -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> > -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo0 () {__rvv_bool64_t t;}
> > +void foo1 () {__rvv_int8mf8_t t;}
> > +void foo2 () {__rvv_uint8mf8_t t;}
> > +void foo3 () {__rvv_int16mf4_t t;}
> > +void foo4 () {__rvv_uint16mf4_t t;}
> > +void foo5 () {__rvv_int32mf2_t t;}
> > +void foo6 () {__rvv_uint32mf2_t t;}
> > +void foo7 () {__rvv_int64m1_t t;}
> > +void foo8 () {__rvv_uint64m1_t t;}
> > +void foo9 () {__rvv_int64m2_t t;}
> > +void foo10 () {__rvv_uint64m2_t t;}
> > +void foo11 () {__rvv_int64m4_t t;}
> > +void foo12 () {__rvv_uint64m4_t t;}
> > +void foo13 () {__rvv_int64m8_t t;}
> > +void foo14 () {__rvv_uint64m8_t t;}
> > +
> > +void new_foo0 (__rvv_bool64_t t) { } /* { dg-error {argument type '__rvv_bool64_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo1 (__rvv_int8mf8_t t) { } /* { dg-error {argument type '__rvv_int8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo2 (__rvv_uint8mf8_t t) { } /* { dg-error {argument type '__rvv_uint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo3 (__rvv_int16mf4_t t) { } /* { dg-error {argument type '__rvv_int16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo4 (__rvv_uint16mf4_t t) { } /* { dg-error {argument type '__rvv_uint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo5 (__rvv_int32mf2_t t) { } /* { dg-error {argument type '__rvv_int32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo6 (__rvv_uint32mf2_t t) { } /* { dg-error {argument type '__rvv_uint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> > index 62385b8dcd1..48e1f278e70 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c
> > @@ -3,18 +3,39 @@
> >
> > #include "riscv_vector.h"
> >
> > -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */
> > -void foo1 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */
> > -void foo2 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */
> > -void foo3 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */
> > -void foo4 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */
> > -void foo5 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */
> > -void foo6 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */
> > -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> > -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> > -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> > -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> > -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> > -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> > -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> > -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > +void foo0 () {vbool64_t t;}
> > +void foo1 () {vint8mf8_t t;}
> > +void foo2 () {vuint8mf8_t t;}
> > +void foo3 () {vint16mf4_t t;}
> > +void foo4 () {vuint16mf4_t t;}
> > +void foo5 () {vint32mf2_t t;}
> > +void foo6 () {vuint32mf2_t t;}
> > +void foo7 () {vint64m1_t t;}
> > +void foo8 () {vuint64m1_t t;}
> > +void foo9 () {vint64m2_t t;}
> > +void foo10 () {vuint64m2_t t;}
> > +void foo11 () {vint64m4_t t;}
> > +void foo12 () {vuint64m4_t t;}
> > +void foo13 () {vint64m8_t t;}
> > +void foo14 () {vuint64m8_t t;}
> > +
> > +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo1 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo2 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo3 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo4 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo5 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +void new_foo6 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */
> > +
> > +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> > index 26a0a742965..af237f5d759 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c
> > @@ -3,6 +3,10 @@
> >
> > #include "riscv_vector.h"
> >
> > +/* To support target attribute, the vfloat*m*x*_t need to be registered
> > + in advance. We add type and args/return value check during the
> > + set current function but cannot cover below cases. It is the same
> > + behavior compared to aarch64 sve. */
> > void foo0 () {__rvv_bool64_t t;}
> > void foo1 () {__rvv_int8mf8_t t;}
> > void foo2 () {__rvv_uint8mf8_t t;}
> > @@ -10,11 +14,28 @@ void foo3 () {__rvv_int16mf4_t t;}
> > void foo4 () {__rvv_uint16mf4_t t;}
> > void foo5 () {__rvv_int32mf2_t t;}
> > void foo6 () {__rvv_uint32mf2_t t;}
> > -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */
> > -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */
> > -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */
> > -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */
> > -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */
> > -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */
> > -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */
> > -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */
> > +void foo7 () {__rvv_int64m1_t t;}
> > +void foo8 () {__rvv_uint64m1_t t;}
> > +void foo9 () {__rvv_int64m2_t t;}
> > +void foo10 () {__rvv_uint64m2_t t;}
> > +void foo11 () {__rvv_int64m4_t t;}
> > +void foo12 () {__rvv_uint64m4_t t;}
> > +void foo13 () {__rvv_int64m8_t t;}
> > +void foo14 () {__rvv_uint64m8_t t;}
> > +
> > +void new_foo0 (__rvv_bool64_t t) { }
> > +void new_foo1 (__rvv_int8mf8_t t) { }
> > +void new_foo2 (__rvv_uint8mf8_t t) { }
> > +void new_foo3 (__rvv_int16mf4_t t) { }
> > +void new_foo4 (__rvv_uint16mf4_t t) { }
> > +void new_foo5 (__rvv_int32mf2_t t) { }
> > +void new_foo6 (__rvv_uint32mf2_t t) { }
> > +
> > +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> > index eb66f3ea2bd..2779fbda053 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c
> > @@ -10,11 +10,28 @@ void foo3 () {vint16mf4_t t;}
> > void foo4 () {vuint16mf4_t t;}
> > void foo5 () {vint32mf2_t t;}
> > void foo6 () {vuint32mf2_t t;}
> > -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */
> > -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */
> > -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */
> > -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */
> > -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */
> > -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */
> > -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */
> > -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */
> > +void foo7 () {vint64m1_t t;}
> > +void foo8 () {vuint64m1_t t;}
> > +void foo9 () {vint64m2_t t;}
> > +void foo10 () {vuint64m2_t t;}
> > +void foo11 () {vint64m4_t t;}
> > +void foo12 () {vuint64m4_t t;}
> > +void foo13 () {vint64m8_t t;}
> > +void foo14 () {vuint64m8_t t;}
> > +
> > +void new_foo0 (vbool64_t t) { }
> > +void new_foo1 (vint8mf8_t t) { }
> > +void new_foo2 (vuint8mf8_t t) { }
> > +void new_foo3 (vint16mf4_t t) { }
> > +void new_foo4 (vuint16mf4_t t) { }
> > +void new_foo5 (vint32mf2_t t) { }
> > +void new_foo6 (vuint32mf2_t t) { }
> > +
> > +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> > new file mode 100644
> > index 00000000000..3e6844475d5
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c
> > @@ -0,0 +1,12 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vfloat16m1_t
> > +__attribute__((target("arch=+v,+zvfh")))
> > +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f16m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> > new file mode 100644
> > index 00000000000..df053073bc8
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c
> > @@ -0,0 +1,26 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint8m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i8m1 (a, b, vl);
> > +}
> > +
> > +vint16m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i16m1 (a, b, vl);
> > +}
> > +
> > +vint32m1_t
> > +__attribute__((target("arch=+zve32x")))
> > +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> > new file mode 100644
> > index 00000000000..51a91886f52
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c
> > @@ -0,0 +1,33 @@
> > +/* Test that we do not have error when compile */
> > +/* { dg-do compile } */
> > +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
> > +
> > +#include "riscv_vector.h"
> > +
> > +vint8m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_1 (vint8m1_t a, vint8m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i8m1 (a, b, vl);
> > +}
> > +
> > +vint16m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_2 (vint16m1_t a, vint16m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i16m1 (a, b, vl);
> > +}
> > +
> > +vint32m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_3 (vint32m1_t a, vint32m1_t b, size_t vl)
> > +{
> > + return __riscv_vadd_vv_i32m1 (a, b, vl);
> > +}
> > +
> > +vfloat32m1_t
> > +__attribute__((target("arch=+zve32f")))
> > +test_4 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
> > +{
> > + return __riscv_vfadd_vv_f32m1 (a, b, vl);
> > +}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c
> > new file mode 100644
> > index 00000000000..994b1c0a5db
> > --- /dev/null
> > +++ b/gcc