tree-optimization/111916 - SRA of BIT_FIELD_REF of constant pool entries
The following adjusts a leftover BIT_FIELD_REF special-casing to only cover the cases general code doesn't handle. PR tree-optimization/111916 * tree-sra.cc (sra_modify_assign): Do not lower all BIT_FIELD_REF reads that are sra_handled_bf_read_p. * gcc.dg/torture/pr111916.c: New testcase.
This commit is contained in:
parent
00eb0812e6
commit
458db9b614
2 changed files with 18 additions and 1 deletions
16
gcc/testsuite/gcc.dg/torture/pr111916.c
Normal file
16
gcc/testsuite/gcc.dg/torture/pr111916.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do run } */
|
||||
|
||||
#pragma pack(1)
|
||||
struct A {
|
||||
int b : 4;
|
||||
int c : 11;
|
||||
int d : 2;
|
||||
int e : 5;
|
||||
} f;
|
||||
int main()
|
||||
{
|
||||
struct A g = {1, 1, 1, 1};
|
||||
while (!g.b)
|
||||
f = g;
|
||||
return 0;
|
||||
}
|
|
@ -4275,7 +4275,8 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi)
|
|||
|
||||
if (TREE_CODE (rhs) == REALPART_EXPR || TREE_CODE (lhs) == REALPART_EXPR
|
||||
|| TREE_CODE (rhs) == IMAGPART_EXPR || TREE_CODE (lhs) == IMAGPART_EXPR
|
||||
|| TREE_CODE (rhs) == BIT_FIELD_REF || TREE_CODE (lhs) == BIT_FIELD_REF)
|
||||
|| (TREE_CODE (rhs) == BIT_FIELD_REF && !sra_handled_bf_read_p (rhs))
|
||||
|| TREE_CODE (lhs) == BIT_FIELD_REF)
|
||||
{
|
||||
modify_this_stmt = sra_modify_expr (gimple_assign_rhs1_ptr (stmt),
|
||||
gsi, false);
|
||||
|
|
Loading…
Add table
Reference in a new issue