aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/execute/bitops-1.c
blob: cfaa6b9fd26e2cf264245203a6c86909093264cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/* PR tree-optimization/110726 */

#define DECLS(n,VOL)			\
__attribute__((noinline,noclone))	\
int h##n(VOL int A, VOL int B){		\
    return (A | B) & (A == B);		\
}					\
__attribute__((noinline,noclone))	\
int i##n(VOL int A, VOL int B){		\
    return A | (A == B);		\
}					\
__attribute__((noinline,noclone))	\
int k##n(VOL int A, VOL int B){		\
    return (A & B) | (A == B);		\
}					\

DECLS(0,)
DECLS(1,volatile)

int values[] = { 0, 1, 2, 3, -1, -2, -3, 0x10080 };
int numvalues = sizeof(values)/sizeof(values[0]);

int main(){
    for(int A = 0; A < numvalues; A++)
      for(int B = 0; B < numvalues; B++)
	{
	  int a = values[A];
	  int b = values[B];
	  if (h0 (a, b) != h1 (a, b)) __builtin_abort();
	  if (i0 (a, b) != i1 (a, b)) __builtin_abort();
	  if (k0 (a, b) != k1 (a, b)) __builtin_abort();
	}
}