Viewing file: pr92618.c (1.16 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR tree-optimization/92618 */
typedef long long __m128i __attribute__((__vector_size__(2 * sizeof (long long)),__may_alias__));
double a[4]; unsigned long long b[4];
__attribute__((noipa)) __m128i bar (void) { static int cnt; cnt += 2; return (__m128i) { cnt, cnt + 1 }; }
#if __SIZEOF_LONG_LONG__ == __SIZEOF_DOUBLE__ typedef double __m128d __attribute__((__vector_size__(2 * sizeof (double)),__may_alias__));
__attribute__((noipa)) __m128i qux (void) { static double cnt; cnt += 2.0; return (__m128i) (__m128d) { cnt, cnt + 1.0 }; } #endif
void foo (unsigned long long *x) { __m128i c = bar (); __m128i d = bar (); *(__m128i *) &b[0] = c; *(__m128i *) &b[2] = d; *x = b[0] + b[1] + b[2] + b[3]; }
void baz (double *x) { #if __SIZEOF_LONG_LONG__ == __SIZEOF_DOUBLE__ __m128i c = qux (); __m128i d = qux (); *(__m128i *) &a[0] = c; *(__m128i *) &a[2] = d; *x = a[0] + a[1] + a[2] + a[3]; #endif }
int main () { unsigned long long c = 0; foo (&c); if (c != 2 + 3 + 4 + 5) __builtin_abort (); #if __SIZEOF_LONG_LONG__ == __SIZEOF_DOUBLE__ double d = 0.0; baz (&d); if (d != 2.0 + 3.0 + 4.0 + 5.0) __builtin_abort (); #endif }
|