I stumbled over the following code which is the reason we are not properly going into-ssa during gimplification in some cases. The code can't matter as we unconditionally set DECL_GIMPLE_REG_P.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard. 2012-05-14 Richard Guenther <rguent...@suse.de> * gimplify.c (gimplify_expr): Remove odd code. Index: gcc/gimplify.c =================================================================== --- gcc/gimplify.c (revision 187450) +++ gcc/gimplify.c (working copy) @@ -7947,19 +7947,7 @@ gimplify_expr (tree *expr_p, gimple_seq TMP. First, make sure that the expression has a type so that it can be assigned into a temporary. */ gcc_assert (!VOID_TYPE_P (TREE_TYPE (*expr_p))); - - if (!gimple_seq_empty_p (internal_post) || (fallback & fb_lvalue)) - /* The postqueue might change the value of the expression between - the initialization and use of the temporary, so we can't use a - formal temp. FIXME do we care? */ - { - *expr_p = get_initialized_tmp_var (*expr_p, pre_p, post_p); - if (TREE_CODE (TREE_TYPE (*expr_p)) == COMPLEX_TYPE - || TREE_CODE (TREE_TYPE (*expr_p)) == VECTOR_TYPE) - DECL_GIMPLE_REG_P (*expr_p) = 1; - } - else - *expr_p = get_formal_tmp_var (*expr_p, pre_p); + *expr_p = get_formal_tmp_var (*expr_p, pre_p); } else {