| /* { dg-do run } */ |
| /* { dg-options "-O3" } */ |
| |
| #include <stdlib.h> |
| |
| #define N 64 |
| |
| #ifndef TYPE1 |
| #define TYPE1 int |
| #define TYPE2 long long |
| #endif |
| |
| signed TYPE1 a[N], b[N], g[N]; |
| unsigned TYPE1 c[N], h[N]; |
| signed TYPE2 d[N], e[N], j[N]; |
| unsigned TYPE2 f[N], k[N]; |
| |
| __attribute__((noinline)) void |
| f1 (void) |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| g[i] = a[i] << b[i]; |
| } |
| |
| __attribute__((noinline)) void |
| f2 (void) |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| g[i] = a[i] >> b[i]; |
| } |
| |
| __attribute__((noinline)) void |
| f3 (void) |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| h[i] = c[i] >> b[i]; |
| } |
| |
| __attribute__((noinline)) void |
| f4 (void) |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| j[i] = d[i] << e[i]; |
| } |
| |
| __attribute__((noinline)) void |
| f5 (void) |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| j[i] = d[i] >> e[i]; |
| } |
| |
| __attribute__((noinline)) void |
| f6 (void) |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| k[i] = f[i] >> e[i]; |
| } |
| |
| __attribute__((noinline)) void |
| f7 (void) |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| j[i] = d[i] << b[i]; |
| } |
| |
| __attribute__((noinline)) void |
| f8 (void) |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| j[i] = d[i] >> b[i]; |
| } |
| |
| __attribute__((noinline)) void |
| f9 (void) |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| k[i] = f[i] >> b[i]; |
| } |
| |
| int |
| main () |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| { |
| asm (""); |
| c[i] = (rand () << 1) | (rand () & 1); |
| b[i] = (i * 85) & (sizeof (TYPE1) * __CHAR_BIT__ - 1); |
| a[i] = c[i]; |
| d[i] = (rand () << 1) | (rand () & 1); |
| d[i] |= (unsigned long long) c[i] << 32; |
| e[i] = (i * 85) & (sizeof (TYPE2) * __CHAR_BIT__ - 1); |
| f[i] = d[i]; |
| } |
| f1 (); |
| f3 (); |
| f4 (); |
| f6 (); |
| for (i = 0; i < N; i++) |
| if (g[i] != (signed TYPE1) (a[i] << b[i]) |
| || h[i] != (unsigned TYPE1) (c[i] >> b[i]) |
| || j[i] != (signed TYPE2) (d[i] << e[i]) |
| || k[i] != (unsigned TYPE2) (f[i] >> e[i])) |
| abort (); |
| f2 (); |
| f5 (); |
| f9 (); |
| for (i = 0; i < N; i++) |
| if (g[i] != (signed TYPE1) (a[i] >> b[i]) |
| || j[i] != (signed TYPE2) (d[i] >> e[i]) |
| || k[i] != (unsigned TYPE2) (f[i] >> b[i])) |
| abort (); |
| f7 (); |
| for (i = 0; i < N; i++) |
| if (j[i] != (signed TYPE2) (d[i] << b[i])) |
| abort (); |
| f8 (); |
| for (i = 0; i < N; i++) |
| if (j[i] != (signed TYPE2) (d[i] >> b[i])) |
| abort (); |
| return 0; |
| } |