&& TYPE_REVERSE_STORAGE_ORDER (type),
context_die);
+ /* Add bit stride information to boolean vectors of single bits so that
+ elements can be correctly read and displayed by a debugger. */
+ if (VECTOR_BOOLEAN_TYPE_P (type))
+ {
+ enum machine_mode tmode = TYPE_MODE_RAW (type);
+ if (GET_MODE_CLASS (tmode) == MODE_VECTOR_BOOL)
+ {
+ /* Calculate bit-size of element based on mnode. */
+ poly_uint16 bit_size = exact_div (GET_MODE_BITSIZE (tmode),
+ GET_MODE_NUNITS (tmode));
+ /* Set bit stride in the array type DIE. */
+ add_AT_unsigned (array_die, DW_AT_bit_stride, bit_size.coeffs[0]);
+ /* Find DIE corresponding to the element type so that we could
+ add DW_AT_bit_size to it. */
+ dw_die_ref elem_die = get_AT_ref (array_die, DW_AT_type);
+ /* Avoid adding DW_AT_bit_size twice. */
+ if (get_AT (elem_die, DW_AT_bit_size) == NULL)
+ add_AT_unsigned (elem_die, DW_AT_bit_size,
+ TYPE_PRECISION (element_type));
+ }
+ }
+
add_gnat_descriptive_type_attribute (array_die, type, context_die);
if (TYPE_ARTIFICIAL (type))
add_AT_flag (array_die, DW_AT_artificial, 1);
--- /dev/null
+/* { dg-do compile } */
+// { dg-options "-g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_stride" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_size" 1 } }
+
+#include <arm_sve.h>
+
+[[gnu::target ("arch=armv9-a+sve")]]
+void fun ()
+{
+ volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+ volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+ volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+ volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+}
--- /dev/null
+/* { dg-do compile } */
+// { dg-options "-g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+// { dg-final { scan-assembler-times "DW_AT_name: \"svcount_t\"" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_stride" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_size" 1 } }
+
+#include <arm_sme.h>
+
+#pragma GCC target "+sve2p1+sme2"
+
+void fun ()
+{
+ volatile svbool_t pred;
+ volatile svcount_t count;
+}
--- /dev/null
+/* { dg-do compile } */
+// { dg-options "-g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_stride" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_size" 1 } }
+
+#include <arm_sve.h>
+
+#pragma GCC target "+sve"
+
+void fun ()
+{
+ volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+ volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+ volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+ volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+}
--- /dev/null
+/* { dg-do compile } */
+// { dg-options "-g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_stride" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_size" 1 } }
+
+#include <arm_sve.h>
+
+void fun ()
+{
+ volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+ volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+ volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+ volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+}
--- /dev/null
+/* { dg-do compile } */
+// { dg-options "-g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_stride" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_size" 1 } }
+
+#include <arm_sve.h>
+
+__attribute__((target("arch=armv9-a+sve")))
+void fun ()
+{
+ volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+ volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+ volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+ volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+}
--- /dev/null
+/* { dg-do compile } */
+// { dg-options "-g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 2 } }
+// { dg-final { scan-assembler-times "DW_AT_name: \"__SVCount_t\"" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_stride" 2 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_size" 1 } }
+
+#pragma GCC target "+sve2p1+sme2"
+
+void fun ()
+{
+ volatile __SVBool_t pred;
+ volatile __SVCount_t count;
+}
--- /dev/null
+/* { dg-do compile } */
+// { dg-options "-g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_stride" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_size" 1 } }
+
+#include <arm_sve.h>
+
+#pragma GCC target "+sve"
+
+void fun ()
+{
+ volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+ volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+ volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+ volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+}
--- /dev/null
+/* { dg-do compile } */
+// { dg-options "-g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_stride" 1 } }
+// { dg-final { scan-assembler-times ".byte 0x1 // DW_AT_bit_size" 1 } }
+
+#include <arm_sve.h>
+
+void fun ()
+{
+ volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+ volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+ volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+ volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+}