mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-18 03:10:26 +08:00
re PR tree-optimization/51074 (No constant folding performed for VEC_PERM_EXPR, VEC_INTERLEAVE*EXPR, VEC_EXTRACT*EXPR)
PR tree-optimization/51074 * fold-const.c (fold_binary_loc): Fix up VEC_INTERLEAVE_*_EXPR handling for BYTES_BIG_ENDIAN. * optabs.c (can_vec_perm_for_code_p): Likewise. * gcc.dg/vect/pr51074.c: New test. From-SVN: r181627
This commit is contained in:
parent
3945f48ca7
commit
32ef15bd33
@ -1,3 +1,10 @@
|
||||
2011-11-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/51074
|
||||
* fold-const.c (fold_binary_loc): Fix up VEC_INTERLEAVE_*_EXPR
|
||||
handling for BYTES_BIG_ENDIAN.
|
||||
* optabs.c (can_vec_perm_for_code_p): Likewise.
|
||||
|
||||
2011-11-22 Michael Matz <matz@suse.de>
|
||||
|
||||
PR other/51125
|
||||
|
@ -13483,10 +13483,12 @@ fold_binary_loc (location_t loc,
|
||||
sel[i] = i * 2 + 1;
|
||||
break;
|
||||
case VEC_INTERLEAVE_HIGH_EXPR:
|
||||
sel[i] = (i + nelts) / 2 + ((i & 1) ? nelts : 0);
|
||||
sel[i] = (i + (BYTES_BIG_ENDIAN ? 0 : nelts)) / 2
|
||||
+ ((i & 1) ? nelts : 0);
|
||||
break;
|
||||
case VEC_INTERLEAVE_LOW_EXPR:
|
||||
sel[i] = i / 2 + ((i & 1) ? nelts : 0);
|
||||
sel[i] = (i + (BYTES_BIG_ENDIAN ? nelts : 0)) / 2
|
||||
+ ((i & 1) ? nelts : 0);
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
|
@ -6932,9 +6932,9 @@ can_vec_perm_for_code_p (enum tree_code code, enum machine_mode mode,
|
||||
break;
|
||||
|
||||
case VEC_INTERLEAVE_HIGH_EXPR:
|
||||
alt = nelt / 2;
|
||||
/* FALLTHRU */
|
||||
case VEC_INTERLEAVE_LOW_EXPR:
|
||||
if ((BYTES_BIG_ENDIAN != 0) ^ (code == VEC_INTERLEAVE_HIGH_EXPR))
|
||||
alt = nelt / 2;
|
||||
for (i = 0; i < nelt / 2; ++i)
|
||||
{
|
||||
data[i * 2] = i + alt;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2011-11-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/51074
|
||||
* gcc.dg/vect/pr51074.c: New test.
|
||||
|
||||
2011-11-22 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/51143
|
||||
|
24
gcc/testsuite/gcc.dg/vect/pr51074.c
Normal file
24
gcc/testsuite/gcc.dg/vect/pr51074.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* PR tree-optimization/51074 */
|
||||
|
||||
#include "tree-vect.h"
|
||||
|
||||
struct S { int a, b; } s[8];
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int i;
|
||||
check_vect ();
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
s[i].b = 0;
|
||||
s[i].a = i;
|
||||
}
|
||||
asm volatile ("" : : : "memory");
|
||||
for (i = 0; i < 8; i++)
|
||||
if (s[i].b != 0 || s[i].a != i)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
Loading…
x
Reference in New Issue
Block a user