[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:
parent
aed6756692
commit
c50c91a9a3
@ -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
|
||||
|
36
gcc/testsuite/gcc.dg/vect/vect-reduc-mul_1.c
Normal file
36
gcc/testsuite/gcc.dg/vect/vect-reduc-mul_1.c
Normal 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" } } */
|
||||
|
32
gcc/testsuite/gcc.dg/vect/vect-reduc-mul_2.c
Normal file
32
gcc/testsuite/gcc.dg/vect/vect-reduc-mul_2.c
Normal 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" } } */
|
||||
|
@ -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 { } {
|
||||
|
Loading…
Reference in New Issue
Block a user