https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67278

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice-checking
             Target|                            |x86_64-*-*
             Status|NEW                         |ASSIGNED
          Component|middle-end                  |target
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Ok, looks like the ABI passes V1XF in 16bytes on the stack which means this is
a verifier issue (works "correctly" w/o checking).

On i?86 you'll get

t.c:1:1: error: vector size not an integral multiple of component size
 typedef long double a __attribute__((vector_size (16)));
 ^~~~~~~


Changing the testcase to

typedef long double a __attribute__((vector_size (32)));

a
sum (a first, a second)
{
    return first + second;
}

and thus trying to create V2XF yields

t.c: In function ?sum?:
t.c:5:1: internal compiler error: in type_natural_mode, at
config/i386/i386.c:7890
 {
 ^
0x1211845 type_natural_mode
        /space/rguenther/src/svn/trunk3/gcc/config/i386/i386.c:7890
0x1215c87 ix86_return_in_memory
        /space/rguenther/src/svn/trunk3/gcc/config/i386/i386.c:9765
0xaadcc7 aggregate_value_p(tree_node const*, tree_node const*)
        /space/rguenther/src/svn/trunk3/gcc/function.c:2081
0xab677c allocate_struct_function(tree_node*, bool)
        /space/rguenther/src/svn/trunk3/gcc/function.c:4914
0x76cc78 store_parm_decls()

I'm going to fix the verifier and leave the above to target maintainers.
Looks like we have no way of rejecting component types by the backend here btw.

Reply via email to