diff options
author | Andre Vieira <andre.simoesdiasvieira@arm.com> | 2022-10-13 12:09:38 +0100 |
---|---|---|
committer | Andre Vieira <andre.simoesdiasvieira@arm.com> | 2022-10-13 12:11:12 +0100 |
commit | 9f0d4adabe2035886a1aa8d2ca990a90de000613 (patch) | |
tree | 2e28f8d11d71b2ca013a32d5fab62a7a3166dfc5 /gcc/testsuite | |
parent | 6f653a2c85a450714bac905ea4f153234bc6cd5f (diff) | |
download | gcc-9f0d4adabe2035886a1aa8d2ca990a90de000613.zip gcc-9f0d4adabe2035886a1aa8d2ca990a90de000613.tar.gz gcc-9f0d4adabe2035886a1aa8d2ca990a90de000613.tar.bz2 |
ifcvt: Fix bitpos calculation in bitfield lowering [PR107229]
The bitposition calculation for the bitfield lowering in loop if conversion was
not taking DECL_FIELD_OFFSET into account, which meant that it would result in
wrong bitpositions for bitfields that did not end up having representations
starting at the beginning of the struct.
gcc/ChangeLog:
PR tree-optimization/107229
* tree-if-conv.cc (get_bitfield_rep): Fix bitposition calculation.
gcc/testsuite/ChangeLog:
* gcc.dg/vect/pr107229-1.c: New test.
* gcc.dg/vect/pr107229-2.c: New test.
* gcc.dg/vect/pr107229-3.c: New test.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr107229-1.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr107229-2.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr107229-3.c | 19 |
3 files changed, 53 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/pr107229-1.c b/gcc/testsuite/gcc.dg/vect/pr107229-1.c new file mode 100644 index 0000000..67b4323 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr107229-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* PR tree-optimization/107229. */ + +int a, c; +struct { + long d; + int : 8; + int : 27; + int e : 21; +} f; +void g(int b) { a = a & 1; } +int main() { + while (c) + g(f.e); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/vect/pr107229-2.c b/gcc/testsuite/gcc.dg/vect/pr107229-2.c new file mode 100644 index 0000000..88bffb6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr107229-2.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* PR tree-optimization/107229. */ + +int a, c; +struct { + long f; + long g; + long d; + int : 8; + int : 27; + int e : 21; +} f; +void g(int b) { a = a & 1; } +int main() { + while (c) + g(f.e); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/vect/pr107229-3.c b/gcc/testsuite/gcc.dg/vect/pr107229-3.c new file mode 100644 index 0000000..4abd8c1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr107229-3.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* PR tree-optimization/107229. */ + +int a, c; +struct { + long f; + long g; + long d; + int : 8; + int : 32; + int : 2; + int e : 21; +} f; +void g(int b) { a = a & 1; } +int main() { + while (c) + g(f.e); + return 0; +} |