diff options
author | Richard Guenther <rguenther@suse.de> | 2012-03-12 10:43:17 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-03-12 10:43:17 +0000 |
commit | 3f5f659208192192b83af727ab2f0103c16c1c44 (patch) | |
tree | c4db522d46c717e3c63a6d84f7549bb941bf12d1 /gcc/tree-sra.c | |
parent | 01c1f20dc516ba119bb6162119533914165d6451 (diff) | |
download | gcc-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.c | 16 |
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; |