From: Richard Guenther Date: Sat, 1 Mar 2008 00:27:26 +0000 (+0000) Subject: re PR middle-end/35411 (internal compiler error: in set_ssa_val_to, at tree-ssa-sccvn... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2fb5f2af000e6e0ea5e7530e623ab33840a75668;p=gcc.git re PR middle-end/35411 (internal compiler error: in set_ssa_val_to, at tree-ssa-sccvn.c:1075) 2008-03-01 Richard Guenther PR tree-optimization/35411 * tree-sra.c (sra_build_assignment): Split conversion to final type to a separate statement if we are not assigning to a register. From-SVN: r132791 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e6f51daf612..2944d20b64d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-03-01 Richard Guenther + + PR tree-optimization/35411 + * tree-sra.c (sra_build_assignment): Split conversion to + final type to a separate statement if we are not assigning + to a register. + 2008-02-29 Francois-Xavier Coudert * fold-const.c (fold_convertible_p): Correct the logic to follow diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 26f1af4196a..1f2d6c25e62 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -2139,7 +2139,7 @@ sra_build_assignment (tree dst, tree src) if (scalar_bitfield_p (src)) { tree var, shift, width; - tree utype, stype, stmp, utmp; + tree utype, stype, stmp, utmp, dtmp; tree list, stmt; bool unsignedp = BIT_FIELD_REF_UNSIGNED (src); @@ -2256,6 +2256,16 @@ sra_build_assignment (tree dst, tree src) var = fold_convert (TREE_TYPE (dst), var); else var = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (dst), var); + + /* If the destination is not a register the conversion needs + to be a separate statement. */ + if (!is_gimple_reg (dst)) + { + dtmp = make_rename_temp (TREE_TYPE (dst), "SR"); + stmt = build_gimple_modify_stmt (dtmp, var); + append_to_statement_list (stmt, &list); + var = dtmp; + } } stmt = build_gimple_modify_stmt (dst, var); append_to_statement_list (stmt, &list);