diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2007-11-26 16:52:57 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2007-11-26 16:52:57 +0100 |
commit | be0c460344d0077ede335b6121785f8cda2c7224 (patch) | |
tree | 920c01ad6d44f8a773ffc3d7897cf537facb9b81 /gcc/config | |
parent | 916a659b3714a18e1b757476c790039baff2da6f (diff) | |
download | gcc-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.md | 32 |
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; } }) |