aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-08-21 08:44:59 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-08-21 08:44:59 +0000
commit8ef64ab95417d6787b9bd2777ac282932b09a530 (patch)
tree3f72b607b2a5ec9eb765bab0ddaeb06ca7815553 /gcc
parent5eb349352b984be67d56a0e54cbd3ceace04083b (diff)
downloadgcc-8ef64ab95417d6787b9bd2777ac282932b09a530.zip
gcc-8ef64ab95417d6787b9bd2777ac282932b09a530.tar.gz
gcc-8ef64ab95417d6787b9bd2777ac282932b09a530.tar.bz2
re PR target/91498 (STV change in r274481 causes 300.twolf regression on Haswell)
2019-08-21 Richard Biener <rguenther@suse.de> PR target/91498 PR target/91503 * config/i386/i386-features.c (general_scalar_chain::make_vector_copies): Copy stack temporary rtx when using it multiple times. (general_scalar_chain::convert_reg): Likewise. From-SVN: r274792
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386-features.c4
2 files changed, 11 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7f0686b..c17d0e1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2019-08-21 Richard Biener <rguenther@suse.de>
+
+ PR target/91498
+ PR target/91503
+ * config/i386/i386-features.c
+ (general_scalar_chain::make_vector_copies): Copy stack temporary
+ rtx when using it multiple times.
+ (general_scalar_chain::convert_reg): Likewise.
+
2019-08-20 Bernd Edlinger <bernd.edlinger@hotmail.de>
* function.c (assign_parm_find_stack_rtl): Use known_eq instead of ==.
diff --git a/gcc/config/i386/i386-features.c b/gcc/config/i386/i386-features.c
index c27ea16..fb7ac1b 100644
--- a/gcc/config/i386/i386-features.c
+++ b/gcc/config/i386/i386-features.c
@@ -706,7 +706,7 @@ general_scalar_chain::make_vector_copies (unsigned regno)
gen_rtx_SUBREG (SImode, reg, 4));
}
else
- emit_move_insn (tmp, reg);
+ emit_move_insn (copy_rtx (tmp), reg);
emit_insn (gen_rtx_SET (gen_rtx_SUBREG (vmode, vreg, 0),
gen_gpr_to_xmm_move_src (vmode, tmp)));
}
@@ -810,7 +810,7 @@ general_scalar_chain::convert_reg (unsigned regno)
adjust_address (tmp, SImode, 4));
}
else
- emit_move_insn (scopy, tmp);
+ emit_move_insn (scopy, copy_rtx (tmp));
}
else if (!TARGET_64BIT && smode == DImode)
{