aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2007-11-26 16:52:57 +0100
committerUros Bizjak <uros@gcc.gnu.org>2007-11-26 16:52:57 +0100
commitbe0c460344d0077ede335b6121785f8cda2c7224 (patch)
tree920c01ad6d44f8a773ffc3d7897cf537facb9b81 /gcc/config
parent916a659b3714a18e1b757476c790039baff2da6f (diff)
downloadgcc-be0c460344d0077ede335b6121785f8cda2c7224.zip
gcc-be0c460344d0077ede335b6121785f8cda2c7224.tar.gz
gcc-be0c460344d0077ede335b6121785f8cda2c7224.tar.bz2
re PR target/34215 (ICE in assign_386_stack_local, at config/i386/i386.c:13481)
PR target/34215 * config/i386/i386.md (truncdfsf2): Select SLOT_TEMP stack slot if virtual registers are instantiated. (truncxf<mode>2): Ditto. (floatsi<mode>2): Ditto. (floatdisf2): Ditto. (floatdidf2): Ditto. testsuite/ChangeLog: PR target/34215 * gcc.target/i386/pr34215.c: New test. From-SVN: r130440
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/i386/i386.md32
1 files changed, 20 insertions, 12 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 4580afc..9b03b95 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -4074,7 +4074,8 @@
;
else
{
- rtx temp = assign_386_stack_local (SFmode, SLOT_VIRTUAL);
+ int slot = virtuals_instantiated ? SLOT_TEMP : SLOT_VIRTUAL;
+ rtx temp = assign_386_stack_local (SFmode, slot);
emit_insn (gen_truncdfsf2_with_temp (operands[0], operands[1], temp));
DONE;
}
@@ -4258,7 +4259,10 @@
DONE;
}
else
- operands[2] = assign_386_stack_local (<MODE>mode, SLOT_VIRTUAL);
+ {
+ int slot = virtuals_instantiated ? SLOT_TEMP : SLOT_VIRTUAL;
+ operands[2] = assign_386_stack_local (<MODE>mode, slot);
+ }
})
(define_insn "*truncxfsf2_mixed"
@@ -4833,7 +4837,8 @@
operands[1] = force_reg (SImode, operands[1]);
else if (!MEM_P (operands[1]))
{
- rtx tmp = assign_386_stack_local (SImode, SLOT_VIRTUAL);
+ int slot = virtuals_instantiated ? SLOT_TEMP : SLOT_VIRTUAL;
+ rtx tmp = assign_386_stack_local (SImode, slot);
emit_move_insn (tmp, operands[1]);
operands[1] = tmp;
}
@@ -4847,9 +4852,10 @@
&& !optimize_size
&& !MEM_P (operands[1]))
{
- rtx tmp = assign_386_stack_local (GET_MODE (operands[1]), SLOT_VIRTUAL);
- emit_move_insn (tmp, operands[1]);
- operands[1] = tmp;
+ int slot = virtuals_instantiated ? SLOT_TEMP : SLOT_VIRTUAL;
+ rtx tmp = assign_386_stack_local (GET_MODE (operands[1]), slot);
+ emit_move_insn (tmp, operands[1]);
+ operands[1] = tmp;
}
")
@@ -5116,9 +5122,10 @@
&& !optimize_size
&& !MEM_P (operands[1]))
{
- rtx tmp = assign_386_stack_local (GET_MODE (operands[1]), SLOT_VIRTUAL);
- emit_move_insn (tmp, operands[1]);
- operands[1] = tmp;
+ int slot = virtuals_instantiated ? SLOT_TEMP : SLOT_VIRTUAL;
+ rtx tmp = assign_386_stack_local (GET_MODE (operands[1]), slot);
+ emit_move_insn (tmp, operands[1]);
+ operands[1] = tmp;
}
})
@@ -5192,9 +5199,10 @@
&& !optimize_size
&& !MEM_P (operands[1]))
{
- rtx tmp = assign_386_stack_local (GET_MODE (operands[1]), SLOT_VIRTUAL);
- emit_move_insn (tmp, operands[1]);
- operands[1] = tmp;
+ int slot = virtuals_instantiated ? SLOT_TEMP : SLOT_VIRTUAL;
+ rtx tmp = assign_386_stack_local (GET_MODE (operands[1]), slot);
+ emit_move_insn (tmp, operands[1]);
+ operands[1] = tmp;
}
})