Make dwarf2out punt for MODE_VECTOR_BOOL
The dwarf2 handling of vector constants currently divides the vector into a length (number of elements) and byte element size. This doesn't work well for MODE_VECTOR_BOOL, where several elements are packed into the same byte. We should probably add a way of encoding this in future, but for now the safest thing is to punt, like we already do for variable-length vectors. 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * dwarf2out.c (loc_descriptor): Punt for MODE_VECTOR_BOOL. (add_const_value_attribute): Likewise. gcc/testsuite/ * gcc.target/aarch64/sve/acle/general/debug_4.c: New test. From-SVN: r279165
This commit is contained in:
parent
b78500ecb8
commit
b78d005e8f
4 changed files with 37 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
|
||||||
|
|
||||||
|
* dwarf2out.c (loc_descriptor): Punt for MODE_VECTOR_BOOL.
|
||||||
|
(add_const_value_attribute): Likewise.
|
||||||
|
|
||||||
2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
|
2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
|
||||||
|
|
||||||
* tree-vect-loop.c (vect_create_epilog_for_reduction): When
|
* tree-vect-loop.c (vect_create_epilog_for_reduction): When
|
||||||
|
|
|
@ -16763,7 +16763,12 @@ loc_descriptor (rtx rtl, machine_mode mode,
|
||||||
if (mode == VOIDmode)
|
if (mode == VOIDmode)
|
||||||
mode = GET_MODE (rtl);
|
mode = GET_MODE (rtl);
|
||||||
|
|
||||||
if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
|
if (mode != VOIDmode
|
||||||
|
/* The combination of a length and byte elt_size doesn't extend
|
||||||
|
naturally to boolean vectors, where several elements are packed
|
||||||
|
into the same byte. */
|
||||||
|
&& GET_MODE_CLASS (mode) != MODE_VECTOR_BOOL
|
||||||
|
&& (dwarf_version >= 4 || !dwarf_strict))
|
||||||
{
|
{
|
||||||
unsigned int length;
|
unsigned int length;
|
||||||
if (!CONST_VECTOR_NUNITS (rtl).is_constant (&length))
|
if (!CONST_VECTOR_NUNITS (rtl).is_constant (&length))
|
||||||
|
@ -19622,6 +19627,12 @@ add_const_value_attribute (dw_die_ref die, rtx rtl)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
machine_mode mode = GET_MODE (rtl);
|
machine_mode mode = GET_MODE (rtl);
|
||||||
|
/* The combination of a length and byte elt_size doesn't extend
|
||||||
|
naturally to boolean vectors, where several elements are packed
|
||||||
|
into the same byte. */
|
||||||
|
if (GET_MODE_CLASS (mode) == MODE_VECTOR_BOOL)
|
||||||
|
return false;
|
||||||
|
|
||||||
unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
|
unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
|
||||||
unsigned char *array
|
unsigned char *array
|
||||||
= ggc_vec_alloc<unsigned char> (length * elt_size);
|
= ggc_vec_alloc<unsigned char> (length * elt_size);
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
|
||||||
|
|
||||||
|
* gcc.target/aarch64/sve/acle/general/debug_4.c: New test.
|
||||||
|
|
||||||
2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
|
2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
|
||||||
|
|
||||||
* gcc.target/aarch64/sve/clastb_9.c: New test.
|
* gcc.target/aarch64/sve/clastb_9.c: New test.
|
||||||
|
|
16
gcc/testsuite/gcc.target/aarch64/sve/acle/general/debug_4.c
Normal file
16
gcc/testsuite/gcc.target/aarch64/sve/acle/general/debug_4.c
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/* { dg-options "-O -g -msve-vector-bits=512" } */
|
||||||
|
|
||||||
|
#include <arm_sve.h>
|
||||||
|
|
||||||
|
void __attribute__((noipa))
|
||||||
|
g (volatile int *x, svbool_t pg)
|
||||||
|
{
|
||||||
|
*x = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
f (volatile int *x)
|
||||||
|
{
|
||||||
|
svbool_t pg = svorr_z (svpfalse (), svpfalse (), svpfalse ());
|
||||||
|
g (x, pg);
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue