aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-04-19 18:47:06 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2011-04-19 18:47:06 +0200
commitd708ce50e3a360ff34f855ce9089b040d1c87d74 (patch)
treeae49eaf183bfd32240b0075032f1c0521764b890 /gcc/config
parent49c471e3d8e5a505b20672f7029d07bb828cbe1b (diff)
downloadgcc-d708ce50e3a360ff34f855ce9089b040d1c87d74.zip
gcc-d708ce50e3a360ff34f855ce9089b040d1c87d74.tar.gz
gcc-d708ce50e3a360ff34f855ce9089b040d1c87d74.tar.bz2
re PR target/48678 (unable to find a register to spill in class ‘GENERAL_REGS’)
PR target/48678 * config/i386/i386.md (movstrict<mode>): FAIL if operands[0] is a SUBREG with non-MODE_INT mode inside of it. * gcc.target/i386/pr48678.c: New test. From-SVN: r172721
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/i386/i386.md3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 0e0ceed..38bdcd3 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -2425,6 +2425,9 @@
{
if (TARGET_PARTIAL_REG_STALL && optimize_function_for_speed_p (cfun))
FAIL;
+ if (GET_CODE (operands[0]) == SUBREG
+ && GET_MODE_CLASS (GET_MODE (SUBREG_REG (operands[0]))) != MODE_INT)
+ FAIL;
/* Don't generate memory->memory moves, go through a register */
if (MEM_P (operands[0]) && MEM_P (operands[1]))
operands[1] = force_reg (<MODE>mode, operands[1]);