i386: Punt on broadcasts from TImode integers [PR101286]
ix86_expand_vector_init_duplicate doesn't handle TImode -> V2TImode or TImode -> V4TImode broadcasts, so I think we should punt on TImode inner mode in ix86_broadcast_from_integer_constant, otherwise we ICE in ix86_expand_vector_move when ix86_broadcast_from_integer_constant returns non-NULL and ix86_expand_vector_init_duplicate returns false. In theory TImode element broadcasts could be handled by some permutations, but I'm not sure it is worth it. 2021-07-02 Jakub Jelinek <jakub@redhat.com> PR target/101286 * config/i386/i386-expand.c (ix86_broadcast_from_integer_constant): Return nullptr for TImode inner mode. * gcc.target/i386/avx2-pr101286.c: New test.
This commit is contained in:
parent
c4804ff244
commit
f7cad1a0ff
@ -478,6 +478,9 @@ ix86_broadcast_from_integer_constant (machine_mode mode, rtx op)
|
||||
if (GET_MODE_INNER (mode) == DImode && !TARGET_64BIT)
|
||||
return nullptr;
|
||||
|
||||
if (GET_MODE_INNER (mode) == TImode)
|
||||
return nullptr;
|
||||
|
||||
rtx constant = get_pool_constant (XEXP (op, 0));
|
||||
if (GET_CODE (constant) != CONST_VECTOR)
|
||||
return nullptr;
|
||||
|
11
gcc/testsuite/gcc.target/i386/avx2-pr101286.c
Normal file
11
gcc/testsuite/gcc.target/i386/avx2-pr101286.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* PR target/101286 */
|
||||
/* { dg-do compile { target int128 } } */
|
||||
/* { dg-options "-mavx2" } */
|
||||
|
||||
typedef __attribute__((__vector_size__ (2 * sizeof (__int128)))) __int128 V;
|
||||
|
||||
V
|
||||
foo (void)
|
||||
{
|
||||
return (V){(__int128) 1 << 64 | 1, (__int128) 1 << 64 | 1};
|
||||
}
|
Loading…
Reference in New Issue
Block a user