diff options
author | Richard Henderson <rth@redhat.com> | 2016-03-16 16:53:18 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2016-03-16 16:53:18 -0700 |
commit | 820c5eaa60b348e9510e35aa5b16596727b6bb6e (patch) | |
tree | f3fc2eb2030a0f32ca40ce5e9c4d1c386aec884b | |
parent | 8f66e7dc9e7521eac72412652725b5a54c5286d4 (diff) | |
download | gcc-820c5eaa60b348e9510e35aa5b16596727b6bb6e.zip gcc-820c5eaa60b348e9510e35aa5b16596727b6bb6e.tar.gz gcc-820c5eaa60b348e9510e35aa5b16596727b6bb6e.tar.bz2 |
re PR middle-end/70240 (ICE: in gimplify_modify_expr, at gimplify.c:4854 with -ftree-vectorize)
PR middle-end/70240
* gcc.c-torture/compile/pr70240.c: New.
From-SVN: r234273
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr70240.c | 26 |
2 files changed, 31 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0859ec2..f59e1c8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-03-16 Richard Henderson <rth@redhat.com> + + PR middle-end/70240 + * gcc.c-torture/compile/pr70240.c: New. + 2016-03-16 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> * gcc.c-torture/compile/20151204.c: Skip for avr. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70240.c b/gcc/testsuite/gcc.c-torture/compile/pr70240.c new file mode 100644 index 0000000..830d4dd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr70240.c @@ -0,0 +1,26 @@ +typedef short v16hi __attribute__ ((vector_size (32))); +typedef int v8si __attribute__ ((vector_size (32))); +typedef long long v4di __attribute__ ((vector_size (32))); + +int +foo(int u16_0, int u32_0, int u64_0, int u16_1, int u32_1, int u64_1, v16hi v32u16_0, v8si v32u32_0, v4di v32u64_0, v16hi v32u16_1, v8si v32u32_1, v4di v32u64_1) +{ + do { + v32u16_1 += (v16hi){ v32u32_1[7], ~v32u32_1[3], 0, v32u64_0[0]}; + u32_0 = (u32_0 << 31) | (u32_0 >> ~v32u32_0[1]); + u64_0 += 1; + v32u64_0[2] <<= v32u64_0[2] & 63; + u16_1 = (u16_1 >> (v32u16_0[11] & 15)) | (u16_1 << (-v32u16_0[11] & 15)); + v32u16_0 -= ~v32u16_1; + v32u32_1[5] += u32_1; + if (v32u32_1[3] >= 0) { + u64_1 -= ~v32u64_1[1]; + v32u16_1 += (v16hi){ -u64_1, ~u32_0, ~u16_1, v32u32_1[1], 0, ~v32u16_1[2], ~v32u64_1[2], ~v32u32_0[7]}; + } + v32u64_1 += (v4di){0, 0, ~v32u32_0[5]}; + v32u32_1 *= (v8si){0, ~v32u32_1[6]}; + v32u64_0[3] &= 0x1234; + v32u64_0 += (v4di){v32u32_1[6]}; + } while (u16_0 < 0x1234); + return u64_0 + u16_1; +} |