diff options
| author | jamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-16 10:16:40 +0000 |
|---|---|---|
| committer | jamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-16 10:16:40 +0000 |
| commit | ea8ae162467e1169c16752dd0fb78f76b7d440cb (patch) | |
| tree | 1ca541eee9b0e36e38c0220a24d44f841ccf3b3e | |
| parent | 75c53eb072f7b811f003c8d1cca923713eab74ea (diff) | |
| download | ppe42-gcc-ea8ae162467e1169c16752dd0fb78f76b7d440cb.tar.gz ppe42-gcc-ea8ae162467e1169c16752dd0fb78f76b7d440cb.zip | |
2009-06-16 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/40432
* tree-sra.c (sra_modify_assign): When creating VIEW_CONVERT_EXPR,
check whether we need to force gimple register operand.
* testsuite/gcc.c-torture/compile/pr40432.c: New file.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148522 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr40432.c | 17 | ||||
| -rw-r--r-- | gcc/tree-sra.c | 6 |
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 36aa10bedeb..b0164814370 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2009-06-16 Martin Jambor <mjambor@suse.cz> + PR tree-optimization/40432 + * tree-sra.c (sra_modify_assign): When creating VIEW_CONVERT_EXPR, + check whether we need to force gimple register operand. + +2009-06-16 Martin Jambor <mjambor@suse.cz> + PR tree-optimization/40413 * tree-sra.c (load_assign_lhs_subreplacements): Pass offset to build_ref_for_offset. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d882c6cb160..02f87d058ed 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2009-06-16 Martin Jambor <mjambor@suse.cz> + * testsuite/gcc.c-torture/compile/pr40432.c: New file. + +2009-06-16 Martin Jambor <mjambor@suse.cz> + * testsuite/gfortran.fortran-torture/compile/pr40413.f90: New file. 2009-06-16 Janus Weil <janus@gcc.gnu.org> diff --git a/gcc/testsuite/gcc.c-torture/compile/pr40432.c b/gcc/testsuite/gcc.c-torture/compile/pr40432.c new file mode 100644 index 00000000000..767f5949887 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr40432.c @@ -0,0 +1,17 @@ +/* Test that SRA produces valid gimple when handling both type punning by means + of VCE and creating an access to a union. */ + +union U { + struct something *sth; + void *nothing; +}; + +void +foo (union U *target, void *p) +{ + union U u; + + u.nothing = p; + *target = u; + return; +} diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index ddb015c2397..a2f783afaed 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -2096,7 +2096,11 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi, rhs = expr; } if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (rhs))) - rhs = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (lhs), rhs); + { + rhs = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (lhs), rhs); + if (!is_gimple_reg (lhs)) + force_gimple_rhs = true; + } } if (force_gimple_rhs) |

