aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386-features.c5
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3be2b55..9010eae 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-09-19 Richard Biener <rguenther@suse.de>
+
+ PR target/91814
+ * config/i386/i386-features.c (gen_gpr_to_xmm_move_src):
+ Force operand to a register if it isn't nonimmediate_operand.
+
2019-09-19 Wilco Dijkstra <wdijkstr@arm.com>
* config/arm/arm.md (<logical_op>di3): Use <optab> and <CODE>.
diff --git a/gcc/config/i386/i386-features.c b/gcc/config/i386/i386-features.c
index 454eeae..f57a555 100644
--- a/gcc/config/i386/i386-features.c
+++ b/gcc/config/i386/i386-features.c
@@ -668,10 +668,13 @@ scalar_chain::emit_conversion_insns (rtx insns, rtx_insn *after)
static rtx
gen_gpr_to_xmm_move_src (enum machine_mode vmode, rtx gpr)
{
+ if (!nonimmediate_operand (gpr, GET_MODE_INNER (vmode)))
+ gpr = force_reg (GET_MODE_INNER (vmode), gpr);
switch (GET_MODE_NUNITS (vmode))
{
case 1:
- return gen_rtx_SUBREG (vmode, gpr, 0);
+ /* We are not using this case currently. */
+ gcc_unreachable ();
case 2:
return gen_rtx_VEC_CONCAT (vmode, gpr,
CONST0_RTX (GET_MODE_INNER (vmode)));