re PR target/51968 (gcc trunk (ARM) ICEs in final_scan_insn in final.c:2716, with "could not split insn" error msg)
PR target/51968 * config/arm/arm.c (neon_split_vcombine): Emit deleted note to effect no-op split. From-SVN: r183480
This commit is contained in:
parent
d4157849c9
commit
ed6cf3188b
3 changed files with 43 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2012-01-25 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR target/51968
|
||||
* config/arm/arm.c (neon_split_vcombine): Emit deleted note
|
||||
to effect no-op split.
|
||||
|
||||
2012-01-24 Aldy Hernandez <aldyh@redhat.com>
|
||||
Patrick Marlier <patrick.marlier@gmail.com>
|
||||
|
||||
|
|
|
@ -20928,7 +20928,11 @@ neon_split_vcombine (rtx operands[3])
|
|||
rtx destlo, desthi;
|
||||
|
||||
if (src1 == dest && src2 == dest + halfregs)
|
||||
return;
|
||||
{
|
||||
/* No-op move. Can't split to nothing; emit something. */
|
||||
emit_note (NOTE_INSN_DELETED);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Preserve register attributes for variable tracking. */
|
||||
destlo = gen_rtx_REG_offset (operands[0], halfmode, dest, 0);
|
||||
|
|
32
gcc/testsuite/gcc.target/arm/pr51968.c
Normal file
32
gcc/testsuite/gcc.target/arm/pr51968.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
/* PR target/51968 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -march=armv7-a -mfloat-abi=softfp -mfpu=neon" } */
|
||||
/* { dg-require-effective-target arm_neon_ok } */
|
||||
|
||||
typedef __builtin_neon_qi int8x8_t __attribute__ ((__vector_size__ (8)));
|
||||
typedef __builtin_neon_uqi uint8x8_t __attribute__ ((__vector_size__ (8)));
|
||||
typedef __builtin_neon_qi int8x16_t __attribute__ ((__vector_size__ (16)));
|
||||
typedef __builtin_neon_hi int16x8_t __attribute__ ((__vector_size__ (16)));
|
||||
typedef __builtin_neon_si int32x4_t __attribute__ ((__vector_size__ (16)));
|
||||
struct T { int8x8_t val[2]; };
|
||||
int y;
|
||||
|
||||
void
|
||||
foo (int8x8_t z, int8x8_t x, int16x8_t b, int8x8_t n)
|
||||
{
|
||||
if (y)
|
||||
{
|
||||
struct T m;
|
||||
__builtin_neon_vuzpv8qi (&m.val[0], z, x);
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
int8x16_t g;
|
||||
int8x8_t h, j, k;
|
||||
struct T m;
|
||||
j = __builtin_neon_vqmovunv8hi (b, 1);
|
||||
g = __builtin_neon_vcombinev8qi (j, h);
|
||||
k = __builtin_neon_vget_lowv16qi (g);
|
||||
__builtin_neon_vuzpv8qi (&m.val[0], k, n);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue