aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-sra.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-03-12 10:43:17 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-03-12 10:43:17 +0000
commit3f5f659208192192b83af727ab2f0103c16c1c44 (patch)
treec4db522d46c717e3c63a6d84f7549bb941bf12d1 /gcc/tree-sra.c
parent01c1f20dc516ba119bb6162119533914165d6451 (diff)
downloadgcc-3f5f659208192192b83af727ab2f0103c16c1c44.zip
gcc-3f5f659208192192b83af727ab2f0103c16c1c44.tar.gz
gcc-3f5f659208192192b83af727ab2f0103c16c1c44.tar.bz2
tree-sra.c (create_access_replacement): Only rename the replacement if we can rewrite it into SSA form.
2012-03-12 Richard Guenther <rguenther@suse.de> * tree-sra.c (create_access_replacement): Only rename the replacement if we can rewrite it into SSA form. Properly mark register typed replacements that we cannot rewrite with TREE_ADDRESSABLE. * tree-cfg.c (verify_expr): Fix BIT_FIELD_REF verification for aggregate or BLKmode results. From-SVN: r185221
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r--gcc/tree-sra.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 710f24e..65267a9 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1924,13 +1924,19 @@ create_access_replacement (struct access *access, bool rename)
repl = create_tmp_var (access->type, "SR");
add_referenced_var (repl);
- if (rename)
+ if (!access->grp_partial_lhs
+ && rename)
mark_sym_for_renaming (repl);
- if (!access->grp_partial_lhs
- && (TREE_CODE (access->type) == COMPLEX_TYPE
- || TREE_CODE (access->type) == VECTOR_TYPE))
- DECL_GIMPLE_REG_P (repl) = 1;
+ if (TREE_CODE (access->type) == COMPLEX_TYPE
+ || TREE_CODE (access->type) == VECTOR_TYPE)
+ {
+ if (!access->grp_partial_lhs)
+ DECL_GIMPLE_REG_P (repl) = 1;
+ }
+ else if (access->grp_partial_lhs
+ && is_gimple_reg_type (access->type))
+ TREE_ADDRESSABLE (repl) = 1;
DECL_SOURCE_LOCATION (repl) = DECL_SOURCE_LOCATION (access->base);
DECL_ARTIFICIAL (repl) = 1;