[Testsuite] Add tests of reductions using whole-vector-shifts (multiplication)

* lib/target-supports.exp (check_effective_target_whole_vector_shift):
	New.

	* gcc.dg/vect/vect-reduc-mul_1.c: New test.
	* gcc.dg/vect/vect-reduc-mul_2.c: New test.

From-SVN: r215473
This commit is contained in:
Alan Lawrence 2014-09-22 16:33:05 +00:00 committed by Alan Lawrence
parent aed6756692
commit c50c91a9a3
4 changed files with 92 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2014-09-22 Alan Lawrence <alan.lawrence@arm.com>
* lib/target-supports.exp (check_effective_target_whole_vector_shift):
New.
* gcc.dg/vect/vect-reduc-mul_1.c: New test.
* gcc.dg/vect/vect-reduc-mul_2.c: New test.
2014-09-22 Jakub Jelinek <jakub@redhat.com>
PR debug/63328

View File

@ -0,0 +1,36 @@
/* { dg-require-effective-target vect_int_mult } */
/* { dg-require-effective-target whole_vector_shift } */
/* Write a reduction loop to be reduced using vector shifts. */
extern void abort(void);
unsigned char in[16];
int
main (unsigned char argc, char **argv)
{
unsigned char i = 0;
unsigned char sum = 1;
for (i = 0; i < 16; i++)
in[i] = i + i + 1;
/* Prevent constant propagation of the entire loop below. */
asm volatile ("" : : : "memory");
for (i = 0; i < 16; i++)
sum *= in[i];
if (sum != 33)
{
__builtin_printf("Failed %d\n", sum);
abort();
}
return 0;
}
/* { dg-final { scan-tree-dump "Reduce using vector shifts" "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */

View File

@ -0,0 +1,32 @@
/* { dg-require-effective-target vect_int_mult } */
/* { dg-require-effective-target whole_vector_shift } */
/* Write a reduction loop to be reduced using vector shifts and folded. */
extern void abort(void);
int
main (unsigned char argc, char **argv)
{
unsigned char in[16];
unsigned char i = 0;
unsigned char sum = 1;
for (i = 0; i < 16; i++)
in[i] = i + i + 1;
for (i = 0; i < 16; i++)
sum *= in[i];
if (sum != 33)
{
__builtin_printf("Failed %d\n", sum);
abort();
}
return 0;
}
/* { dg-final { scan-tree-dump "Reduce using vector shifts" "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */

View File

@ -3324,6 +3324,22 @@ proc check_effective_target_vect_shift { } {
return $et_vect_shift_saved
}
proc check_effective_target_whole_vector_shift { } {
if { [istarget x86_64-*-*]
|| [istarget ia64-*-*]
|| ([check_effective_target_arm32]
&& [check_effective_target_arm_little_endian])
|| ([istarget mips*-*-*]
&& [check_effective_target_mips_loongson]) } {
set answer 1
} else {
set answer 0
}
verbose "check_effective_target_vect_long: returning $answer" 2
return $answer
}
# Return 1 if the target supports vector bswap operations.
proc check_effective_target_vect_bswap { } {