reassoc: Test rank biasing
Add both positive and negative tests. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/reassoc-46.c: New test. * gcc.dg/tree-ssa/reassoc-46.h: Common code for new tests. * gcc.dg/tree-ssa/reassoc-47.c: New test. * gcc.dg/tree-ssa/reassoc-48.c: New test. * gcc.dg/tree-ssa/reassoc-49.c: New test. * gcc.dg/tree-ssa/reassoc-50.c: New test. * gcc.dg/tree-ssa/reassoc-51.c: New test.
This commit is contained in:
parent
c32f7df917
commit
92cdd338fd
7
gcc/testsuite/gcc.dg/tree-ssa/reassoc-46.c
Normal file
7
gcc/testsuite/gcc.dg/tree-ssa/reassoc-46.c
Normal file
@ -0,0 +1,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized -ftree-vectorize" } */
|
||||
|
||||
#include "reassoc-46.h"
|
||||
|
||||
/* Check that the loop accumulator is added last. */
|
||||
/* { dg-final { scan-tree-dump-times {(?:vect_)?sum_[\d._]+ = (?:(?:vect_)?_[\d._]+ \+ (?:vect_)?sum_[\d._]+|(?:vect_)?sum_[\d._]+ \+ (?:vect_)?_[\d._]+)} 1 "optimized" } } */
|
33
gcc/testsuite/gcc.dg/tree-ssa/reassoc-46.h
Normal file
33
gcc/testsuite/gcc.dg/tree-ssa/reassoc-46.h
Normal file
@ -0,0 +1,33 @@
|
||||
#define M 1024
|
||||
unsigned int arr1[M];
|
||||
unsigned int arr2[M];
|
||||
volatile unsigned int sink;
|
||||
|
||||
unsigned int
|
||||
test (void)
|
||||
{
|
||||
unsigned int sum = 0;
|
||||
for (int i = 0; i < M; i++)
|
||||
{
|
||||
#ifdef MODIFY
|
||||
/* Modify the loop accumulator using a chain of operations - this should
|
||||
not affect its rank biasing. */
|
||||
sum |= 1;
|
||||
sum ^= 2;
|
||||
#endif
|
||||
#ifdef STORE
|
||||
/* Save the loop accumulator into a global variable - this should not
|
||||
affect its rank biasing. */
|
||||
sink = sum;
|
||||
#endif
|
||||
#ifdef USE
|
||||
/* Add a tricky use of the loop accumulator - this should prevent its
|
||||
rank biasing. */
|
||||
i = (i + sum) % M;
|
||||
#endif
|
||||
/* Use addends with different ranks. */
|
||||
sum += arr1[i];
|
||||
sum += arr2[((i ^ 1) + 1) % M];
|
||||
}
|
||||
return sum;
|
||||
}
|
9
gcc/testsuite/gcc.dg/tree-ssa/reassoc-47.c
Normal file
9
gcc/testsuite/gcc.dg/tree-ssa/reassoc-47.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized -ftree-vectorize" } */
|
||||
|
||||
#define MODIFY
|
||||
#include "reassoc-46.h"
|
||||
|
||||
/* Check that if the loop accumulator is saved into a global variable, it's
|
||||
still added last. */
|
||||
/* { dg-final { scan-tree-dump-times {(?:vect_)?sum_[\d._]+ = (?:(?:vect_)?_[\d._]+ \+ (?:vect_)?sum_[\d._]+|(?:vect_)?sum_[\d._]+ \+ (?:vect_)?_[\d._]+)} 1 "optimized" } } */
|
9
gcc/testsuite/gcc.dg/tree-ssa/reassoc-48.c
Normal file
9
gcc/testsuite/gcc.dg/tree-ssa/reassoc-48.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized -ftree-vectorize" } */
|
||||
|
||||
#define STORE
|
||||
#include "reassoc-46.h"
|
||||
|
||||
/* Check that if the loop accumulator is modified using a chain of operations
|
||||
other than addition, its new value is still added last. */
|
||||
/* { dg-final { scan-tree-dump-times {(?:vect_)?sum_[\d._]+ = (?:(?:vect_)?_[\d._]+ \+ (?:vect_)?sum_[\d._]+|(?:vect_)?sum_[\d._]+ \+ (?:vect_)?_[\d._]+)} 1 "optimized" } } */
|
11
gcc/testsuite/gcc.dg/tree-ssa/reassoc-49.c
Normal file
11
gcc/testsuite/gcc.dg/tree-ssa/reassoc-49.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized -ftree-vectorize" } */
|
||||
|
||||
#define MODIFY
|
||||
#define STORE
|
||||
#include "reassoc-46.h"
|
||||
|
||||
/* Check that if the loop accumulator is both modified using a chain of
|
||||
operations other than addition and stored into a global variable, its new
|
||||
value is still added last. */
|
||||
/* { dg-final { scan-tree-dump-times {(?:vect_)?sum_[\d._]+ = (?:(?:vect_)?_[\d._]+ \+ (?:vect_)?sum_[\d._]+|(?:vect_)?sum_[\d._]+ \+ (?:vect_)?_[\d._]+)} 1 "optimized" } } */
|
10
gcc/testsuite/gcc.dg/tree-ssa/reassoc-50.c
Normal file
10
gcc/testsuite/gcc.dg/tree-ssa/reassoc-50.c
Normal file
@ -0,0 +1,10 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized -ftree-vectorize" } */
|
||||
|
||||
#define MODIFY
|
||||
#define USE
|
||||
#include "reassoc-46.h"
|
||||
|
||||
/* Check that if the loop accumulator has multiple uses inside the loop, it's
|
||||
not forced to the end of the reassociation chain. */
|
||||
/* { dg-final { scan-tree-dump-times {(?:vect_)?sum_[\d._]+ = (?:(?:vect_)?_[\d._]+ \+ (?:vect_)?sum_[\d._]+|(?:vect_)?sum_[\d._]+ \+ (?:vect_)?_[\d._]+)} 2 "optimized" } } */
|
11
gcc/testsuite/gcc.dg/tree-ssa/reassoc-51.c
Normal file
11
gcc/testsuite/gcc.dg/tree-ssa/reassoc-51.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized -ftree-vectorize" } */
|
||||
|
||||
#define MODIFY
|
||||
#define STORE
|
||||
#define USE
|
||||
#include "reassoc-46.h"
|
||||
|
||||
/* Check that if the loop accumulator has multiple uses inside the loop, it's
|
||||
not forced to the end of the reassociation chain. */
|
||||
/* { dg-final { scan-tree-dump-times {(?:vect_)?sum_[\d._]+ = (?:(?:vect_)?_[\d._]+ \+ (?:vect_)?sum_[\d._]+|(?:vect_)?sum_[\d._]+ \+ (?:vect_)?_[\d._]+)} 2 "optimized" } } */
|
Loading…
x
Reference in New Issue
Block a user