| /* PR target/101611 */ |
| /* { dg-do run } */ |
| /* { dg-options "-O2 -mavx2 -mno-avx512f" } */ |
| /* { dg-require-effective-target avx2 } */ |
| |
| #include "avx2-check.h" |
| |
| typedef long long V __attribute__((vector_size(32))); |
| typedef long long W __attribute__((vector_size(16))); |
| |
| __attribute__((noipa)) V |
| foo (V a, V b) |
| { |
| return a >> b; |
| } |
| |
| __attribute__((noipa)) W |
| bar (W a, W b) |
| { |
| return a >> b; |
| } |
| |
| static void |
| avx2_test (void) |
| { |
| V a = { 0x7f123456789abcdeLL, -0x30edcba987654322LL, |
| -0x30edcba987654322LL, 0x7f123456789abcdeLL }; |
| V b = { 17, 11, 23, 0 }; |
| V c = foo (a, b); |
| if (c[0] != 0x3f891a2b3c4dLL |
| || c[1] != -0x61db97530eca9LL |
| || c[2] != -0x61db97530fLL |
| || c[3] != 0x7f123456789abcdeLL) |
| abort (); |
| W d = { 0x7f123456789abcdeLL, -0x30edcba987654322LL }; |
| W e = { 45, 27 }; |
| W f = bar (d, e); |
| if (f[0] != 0x3f891LL |
| || f[1] != -0x61db97531LL) |
| abort (); |
| } |