aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgexpand.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2015-12-07 16:45:45 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2015-12-07 16:45:45 +0000
commit058c6384fe443310b1788dcdc8880beba24d6b43 (patch)
tree2e641b887cd6d08eba392818062c5fa46e53f8ae /gcc/cfgexpand.c
parent5dd2902aa1bf772c53951ae9998645d4b89d50ae (diff)
downloadgcc-058c6384fe443310b1788dcdc8880beba24d6b43.zip
gcc-058c6384fe443310b1788dcdc8880beba24d6b43.tar.gz
gcc-058c6384fe443310b1788dcdc8880beba24d6b43.tar.bz2
re PR middle-end/68291 (ICE in emit_move_insn, at expr.c:3540)
PR middle-end/68291 PR middle-end/68292 * cfgexpand.c (set_rtl): Always accept PARALLELs with BLKmode for SSA names based on RESULT_DECLs. * function.c (expand_function_start): Do not create BLKmode REGs for GIMPLE registers when coalescing is enabled. From-SVN: r231372
Diffstat (limited to 'gcc/cfgexpand.c')
-rw-r--r--gcc/cfgexpand.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 0cf4172..5338c25 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -184,10 +184,15 @@ set_rtl (tree t, rtx x)
|| SUBREG_P (XEXP (x, 0)))
&& (REG_P (XEXP (x, 1))
|| SUBREG_P (XEXP (x, 1))))
+ /* We need to accept PARALLELs for RESUT_DECLs
+ because of vector types with BLKmode returned
+ in multiple registers, but they are supposed
+ to be uncoalesced. */
|| (GET_CODE (x) == PARALLEL
&& SSAVAR (t)
&& TREE_CODE (SSAVAR (t)) == RESULT_DECL
- && !flag_tree_coalesce_vars))
+ && (GET_MODE (x) == BLKmode
+ || !flag_tree_coalesce_vars)))
: (MEM_P (x) || x == pc_rtx
|| (GET_CODE (x) == CONCAT
&& MEM_P (XEXP (x, 0))