From e8332698dfb8e51e5fa800d37f50dd9386d90f47 Mon Sep 17 00:00:00 2001 From: irar Date: Wed, 30 Dec 2009 12:53:18 +0000 Subject: PR tree-optimization/41956 * tree-vect-slp.c (vect_supported_load_permutation_p): Add check that the load indices differ. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155523 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/tree-vect-slp.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'gcc/tree-vect-slp.c') diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 3222f8b450e..a3be6786d94 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -796,6 +796,7 @@ vect_supported_load_permutation_p (slp_instance slp_instn, int group_size, { int i = 0, j, prev = -1, next, k; bool supported; + sbitmap load_index; /* FORNOW: permutations are only supported in SLP. */ if (!slp_instn) @@ -816,6 +817,8 @@ vect_supported_load_permutation_p (slp_instance slp_instn, int group_size, return false; supported = true; + load_index = sbitmap_alloc (group_size); + sbitmap_zero (load_index); for (j = 0; j < group_size; j++) { for (i = j * group_size, k = 0; @@ -830,7 +833,17 @@ vect_supported_load_permutation_p (slp_instance slp_instn, int group_size, prev = next; } + + if (TEST_BIT (load_index, prev)) + { + supported = false; + break; + } + + SET_BIT (load_index, prev); } + + sbitmap_free (load_index); if (supported && i == group_size * group_size && vect_supported_slp_permutation_p (slp_instn)) -- cgit v1.2.1