From d35455249691b358fa92ecc17ea6ea9bed82164c Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Mon, 8 Feb 2010 14:24:12 +0100 Subject: [PATCH] re PR middle-end/42898 (volatile structures and compound literal initializers) 2010-02-08 Martin Jambor PR middle-end/42898 * tree-sra.c (build_accesses_from_assign): Do not mark in should_scalarize_away_bitmap if stmt has volatile ops. (sra_modify_assign): Do not process assigns piecemeal if if stmt has volatile ops. From-SVN: r156599 --- gcc/ChangeLog | 8 ++++++++ gcc/tree-sra.c | 7 +++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 889e326d324..593b82e387a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2010-02-08 Martin Jambor + + PR middle-end/42898 + * tree-sra.c (build_accesses_from_assign): Do not mark in + should_scalarize_away_bitmap if stmt has volatile ops. + (sra_modify_assign): Do not process assigns piecemeal if if stmt + has volatile ops. + 2010-02-08 Joern Rennecke * doc/tm.texi (TARGET_UNWIND_WORD_MODE): Document. diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index c0d3d3f8a5d..12b365fd0e0 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1023,7 +1023,8 @@ build_accesses_from_assign (gimple *stmt_ptr, racc = build_access_from_expr_1 (rhs_ptr, stmt, false); lacc = build_access_from_expr_1 (lhs_ptr, stmt, true); - if (should_scalarize_away_bitmap && racc && !is_gimple_reg_type (racc->type)) + if (should_scalarize_away_bitmap && !gimple_has_volatile_ops (stmt) + && racc && !is_gimple_reg_type (racc->type)) bitmap_set_bit (should_scalarize_away_bitmap, DECL_UID (racc->base)); if (lacc && racc @@ -2648,7 +2649,9 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi, there to do the copying and then load the scalar replacements of the LHS. This is what the first branch does. */ - if (contains_view_convert_expr_p (rhs) || contains_view_convert_expr_p (lhs) + if (gimple_has_volatile_ops (*stmt) + || contains_view_convert_expr_p (rhs) + || contains_view_convert_expr_p (lhs) || (access_has_children_p (racc) && !ref_expr_for_all_replacements_p (racc, lhs, racc->offset)) || (access_has_children_p (lacc)