aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-05-02 17:49:32 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-05-02 17:49:32 +0000
commit4636b850f65b40e23bb6f6c7db00adfdab2602da (patch)
tree63b674cab8c718bf17708549a9c54440fbe71c18 /gcc/gimple.c
parent25195e82643714f6f73737cd51c217692acbe836 (diff)
downloadgcc-4636b850f65b40e23bb6f6c7db00adfdab2602da.zip
gcc-4636b850f65b40e23bb6f6c7db00adfdab2602da.tar.gz
gcc-4636b850f65b40e23bb6f6c7db00adfdab2602da.tar.bz2
re PR regression/40001 (r146817 broke libgloss build for SPU)
2009-05-02 Richard Guenther <rguenther@suse.de> PR middle-end/40001 * tree-ssa.c (execute_update_addresses_taken): Properly check if we can mark a variable DECL_GIMPLE_REG_P. * gimple.c (is_gimple_reg): Re-order check for DECL_GIMPLE_REG_P back to the end of the function. (is_gimple_reg_type): Remove complex type special casing. * gimplify.c (gimplify_bind_expr): Do not set DECL_GIMPLE_REG_P if not optimizing. * gcc.target/spu/pr40001.c: New testcase. From-SVN: r147064
Diffstat (limited to 'gcc/gimple.c')
-rw-r--r--gcc/gimple.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/gcc/gimple.c b/gcc/gimple.c
index db7f872..6ea1470 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -2805,13 +2805,7 @@ is_gimple_id (tree t)
bool
is_gimple_reg_type (tree type)
{
- /* In addition to aggregate types, we also exclude complex types if not
- optimizing because they can be subject to partial stores in GNU C by
- means of the __real__ and __imag__ operators and we cannot promote
- them to total stores (see gimplify_modify_expr_complex_part). */
- return !(AGGREGATE_TYPE_P (type)
- || (TREE_CODE (type) == COMPLEX_TYPE && !optimize));
-
+ return !AGGREGATE_TYPE_P (type);
}
/* Return true if T is a non-aggregate register variable. */
@@ -2825,12 +2819,6 @@ is_gimple_reg (tree t)
if (!is_gimple_variable (t))
return false;
- /* Complex and vector values must have been put into SSA-like form.
- That is, no assignments to the individual components. */
- if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE
- || TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
- return DECL_GIMPLE_REG_P (t);
-
if (!is_gimple_reg_type (TREE_TYPE (t)))
return false;
@@ -2857,6 +2845,12 @@ is_gimple_reg (tree t)
if (TREE_CODE (t) == VAR_DECL && DECL_HARD_REGISTER (t))
return false;
+ /* Complex and vector values must have been put into SSA-like form.
+ That is, no assignments to the individual components. */
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE
+ || TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
+ return DECL_GIMPLE_REG_P (t);
+
return true;
}