From d3a8fba314129f4eb363a9b9852bad41094b4925 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 26 Nov 2007 15:22:59 +0100 Subject: [PATCH] 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. (truncxfsf2): Ditto. (truncxfdf2): Ditto. testsuite/ChangeLog: PR target/34215 * gcc.target/i386/pr34215.c: New test. From-SVN: r130439 --- gcc/ChangeLog | 8 ++++++++ gcc/config/i386/i386.md | 13 ++++++++++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/pr34215.c | 18 ++++++++++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr34215.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9541b91049b5..6f8ce0e54a4b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2007-11-26 Uros Bizjak + + PR target/34215 + * config/i386/i386.md (truncdfsf2): Select SLOT_TEMP stack slot if + virtual registers are instantiated. + (truncxfsf2): Ditto. + (truncxfdf2): Ditto. + 2007-11-22 Matthias Klose Backport from mainline: diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index c69c3df4c5c6..d889f2e3efce 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3715,7 +3715,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; } @@ -3867,7 +3868,10 @@ DONE; } else - operands[2] = assign_386_stack_local (SFmode, SLOT_VIRTUAL); + { + int slot = virtuals_instantiated ? SLOT_TEMP : SLOT_VIRTUAL; + operands[2] = assign_386_stack_local (SFmode, slot); + } }) (define_insn "*truncxfsf2_mixed" @@ -3965,7 +3969,10 @@ DONE; } else - operands[2] = assign_386_stack_local (DFmode, SLOT_VIRTUAL); + { + int slot = virtuals_instantiated ? SLOT_TEMP : SLOT_VIRTUAL; + operands[2] = assign_386_stack_local (DFmode, slot); + } }) (define_insn "*truncxfdf2_mixed" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 88df27b9d7d3..85789e97743e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-11-26 Uros Bizjak + + PR target/34215 + * gcc.target/i386/pr34215.c: New test. + 2007-11-22 Matthias Klose Backport from mainline: diff --git a/gcc/testsuite/gcc.target/i386/pr34215.c b/gcc/testsuite/gcc.target/i386/pr34215.c new file mode 100644 index 000000000000..a902e969cbae --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr34215.c @@ -0,0 +1,18 @@ +/* Testcase by Martin Michlmayr */ + +/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ +/* { dg-options "-O2" } */ + +double pow (double, double); + +void calc_score_dist (int mxdlen, long double d, long double **dist) +{ + unsigned long i, scr2; + for (i = 1; i <= mxdlen; i++) + { + for (scr2 = mxdlen; scr2 <= mxdlen + 10; scr2++) + { + } + dist[i][scr2] *= pow (1.0 / d, i); + } +} -- 2.47.2