aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-gimple.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2007-12-13 22:49:09 +0100
committerEric Botcazou <ebotcazou@gcc.gnu.org>2007-12-13 21:49:09 +0000
commit7b7e6ecdb03f08b99c4738473482b4f749af1de0 (patch)
tree1a2db453ef003669b76c5fe7b06ef0c746c75775 /gcc/tree-gimple.c
parente49f4f07da9c797eb0efadb36161b36cdc7fef47 (diff)
downloadgcc-7b7e6ecdb03f08b99c4738473482b4f749af1de0.zip
gcc-7b7e6ecdb03f08b99c4738473482b4f749af1de0.tar.gz
gcc-7b7e6ecdb03f08b99c4738473482b4f749af1de0.tar.bz2
re PR middle-end/33088 (spurious exceptions with -ffloat-store)
PR middle-end/33088 * gimplify.c (gimplify_modify_expr_complex_part): Add note to comment. * tree-complex.c (init_dont_simulate_again): Return true if there are uninitialized loads generated by gimplify_modify_expr_complex_part. * tree-gimple.c (is_gimple_reg_type): Return false for complex types if not optimizing. * tree-ssa.c (ssa_undefined_value_p): New predicate extracted from... (warn_uninit): ...here. Use ssa_undefined_value_p. * tree-ssa-pre.c (is_undefined_value): Delete. (phi_translate_1): Use ssa_undefined_value_p. (add_to_exp_gen): Likewise. (make_values_for_stmt): Likewise. * tree-flow.h (ssa_undefined_value_p): Declare. From-SVN: r130917
Diffstat (limited to 'gcc/tree-gimple.c')
-rw-r--r--gcc/tree-gimple.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/tree-gimple.c b/gcc/tree-gimple.c
index abd35f7..d1e47f6 100644
--- a/gcc/tree-gimple.c
+++ b/gcc/tree-gimple.c
@@ -285,7 +285,13 @@ is_gimple_id (tree t)
bool
is_gimple_reg_type (tree type)
{
- return !AGGREGATE_TYPE_P (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 true if T is a non-aggregate register variable. */
@@ -328,8 +334,8 @@ is_gimple_reg (tree t)
if (TREE_CODE (t) == VAR_DECL && DECL_HARD_REGISTER (t))
return false;
- /* Complex values must have been put into ssa form. That is, no
- assignments to the individual components. */
+ /* 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);