re PR middle-end/54219 (__builtin_shuffle mask reversed)

2012-08-10  Richard Guenther  <rguenther@suse.de>

	PR middle-end/54219
	* fold-const.c (fold_ternary_loc): Do not reverse the mask
	when canonicalizing it when folding VEC_PERM_EXPR.

	* gcc.dg/torture/vector-shuffle1.c: New testcase.

From-SVN: r190297
This commit is contained in:
Richard Guenther 2012-08-10 13:35:34 +00:00 committed by Richard Biener
parent 99cababb4b
commit 09e4850d7e
4 changed files with 32 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2012-08-10 Richard Guenther <rguenther@suse.de>
PR middle-end/54219
* fold-const.c (fold_ternary_loc): Do not reverse the mask
when canonicalizing it when folding VEC_PERM_EXPR.
2012-08-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR middle-end/54211

View File

@ -14189,7 +14189,7 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
tree *tsel = XALLOCAVEC (tree, nelts);
tree eltype = TREE_TYPE (TREE_TYPE (arg2));
for (i = 0; i < nelts; i++)
tsel[i] = build_int_cst (eltype, sel[nelts - i - 1]);
tsel[i] = build_int_cst (eltype, sel[i]);
t = build_vector (TREE_TYPE (arg2), tsel);
return build3_loc (loc, VEC_PERM_EXPR, type, op0, op1, t);
}

View File

@ -1,3 +1,8 @@
2012-08-10 Richard Guenther <rguenther@suse.de>
PR middle-end/54219
* gcc.dg/torture/vector-shuffle1.c: New testcase.
2012-08-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR middle-end/54211

View File

@ -0,0 +1,20 @@
/* PR54219 */
/* { dg-do run } */
extern void abort (void);
typedef int v2si __attribute__((vector_size(2*sizeof(int))));
v2si f(v2si x)
{
/* This requires canonicalization of the mask to { 1, 0 }. */
return __builtin_shuffle(x,x, (v2si) { 5, 0 });
}
int main()
{
v2si y = f((v2si) { 1, 2 });
if (y[0] != 2 || y[1] != 1)
abort ();
return 0;
}