* [Bug target/35083] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
@ 2008-02-05 5:12 ` corsepiu at gcc dot gnu dot org
2008-02-05 7:34 ` [Bug target/35083] [4.3 regression] " ubizjak at gmail dot com
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: corsepiu at gcc dot gnu dot org @ 2008-02-05 5:12 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from corsepiu at gcc dot gnu dot org 2008-02-05 05:11 -------
Created an attachment (id=15097)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=15097&action=view)
preprocessed source of file producing ICE
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
2008-02-05 5:12 ` [Bug target/35083] " corsepiu at gcc dot gnu dot org
@ 2008-02-05 7:34 ` ubizjak at gmail dot com
2008-02-05 8:27 ` ubizjak at gmail dot com
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ubizjak at gmail dot com @ 2008-02-05 7:34 UTC (permalink / raw)
To: gcc-bugs
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1205 bytes --]
------- Comment #2 from ubizjak at gmail dot com 2008-02-05 07:33 -------
Confirmed.
The testcase:
float test(unsigned int x)
{
return (float)x;
}
gcc -O2 -mno-80387
t.c: In function âtestâ:
t.c:4: error: unrecognizable insn:
(insn 20 19 21 5 t.c:2 (set (reg:SF 60)
(plus:SF (reg:SF 61)
(reg:SF 61))) -1 (nil))
t.c:4: internal compiler error: in extract_insn, at recog.c:1990
Please submit a full bug report,
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
GCC target triplet|i386-rtems* |i386-*-*
Last reconfirmed|0000-00-00 00:00:00 |2008-02-05 07:33:45
date| |
Summary|ICE: in extract_insn, at |[4.3 regression] ICE: in
|recog.c:1990 |extract_insn, at
| |recog.c:1990
Target Milestone|--- |4.3.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
2008-02-05 5:12 ` [Bug target/35083] " corsepiu at gcc dot gnu dot org
2008-02-05 7:34 ` [Bug target/35083] [4.3 regression] " ubizjak at gmail dot com
@ 2008-02-05 8:27 ` ubizjak at gmail dot com
2008-02-05 9:36 ` ubizjak at gmail dot com
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ubizjak at gmail dot com @ 2008-02-05 8:27 UTC (permalink / raw)
To: gcc-bugs
------- Comment #3 from ubizjak at gmail dot com 2008-02-05 08:26 -------
Mine.
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |ubizjak at gmail dot com
|dot org |
Status|NEW |ASSIGNED
Last reconfirmed|2008-02-05 07:33:45 |2008-02-05 08:26:16
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
` (2 preceding siblings ...)
2008-02-05 8:27 ` ubizjak at gmail dot com
@ 2008-02-05 9:36 ` ubizjak at gmail dot com
2008-02-05 9:46 ` ubizjak at gmail dot com
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ubizjak at gmail dot com @ 2008-02-05 9:36 UTC (permalink / raw)
To: gcc-bugs
------- Comment #4 from ubizjak at gmail dot com 2008-02-05 09:36 -------
Following patch fixes ICE (and avoids nasty runtime/code-size regression for
x87 math where we don't use fildll):
--cut here--
Index: config/i386/i386.md
===================================================================
--- config/i386/i386.md (revision 132088)
+++ config/i386/i386.md (working copy)
@@ -5306,9 +5306,9 @@
(define_expand "floatunssisf2"
[(use (match_operand:SF 0 "register_operand" ""))
(use (match_operand:SI 1 "nonimmediate_operand" ""))]
- "!TARGET_64BIT"
+ "!TARGET_64BIT && TARGET_SSE_MATH"
{
- if (TARGET_SSE_MATH && TARGET_SSE2)
+ if (TARGET_SSE2)
ix86_expand_convert_uns_sisf_sse (operands[0], operands[1]);
else
x86_emit_floatuns (operands);
--cut here--
but there is another problem for soft-float, where neither signed or unsigned
float pattern is provided. Instead of calling __floatunssfsi() directly for
soft-float targets, we expand as:
test:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl 8(%ebp), %edx
testl %edx, %edx
js .L3
movl %edx, (%esp)
call __floatsisf
leave
ret
.L3:
movl %edx, %eax
andl $1, %eax
shrl %edx
orl %edx, %eax
movl %eax, (%esp)
call __floatsisf
movl %eax, 4(%esp)
movl %eax, (%esp)
call __addsf3
leave
ret
This is a huge code-size (and performance?) regression from 4.2 where we
generated:
test:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl 8(%ebp), %eax
movl %eax, (%esp)
call __floatunsisf
leave
ret
This is probably due to:
2007-09-05 Janis Johnson <janis187@us.ibm.com>
* optabs.c (expand_float): Convert unsigned integer as signed only
if it provides sufficient accuracy; add mode argument to real_2expN.
...
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |janis at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
` (3 preceding siblings ...)
2008-02-05 9:36 ` ubizjak at gmail dot com
@ 2008-02-05 9:46 ` ubizjak at gmail dot com
2008-02-05 10:13 ` rguenth at gcc dot gnu dot org
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ubizjak at gmail dot com @ 2008-02-05 9:46 UTC (permalink / raw)
To: gcc-bugs
------- Comment #5 from ubizjak at gmail dot com 2008-02-05 09:45 -------
optabs.c, line 5150:
--cut here--
/* Unsigned integer, and no way to convert directly. Convert as signed,
then unconditionally adjust the result. For decimal float values we
do this only if we have already determined that a signed conversion
provides sufficient accuracy. */
if (unsignedp && (can_do_signed || !DECIMAL_FLOAT_MODE_P (GET_MODE (to))))
--cht here--
Hm? We shortcut with !DECIMAL_FLOAT_MODE_P (...) here. Janis?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
` (4 preceding siblings ...)
2008-02-05 9:46 ` ubizjak at gmail dot com
@ 2008-02-05 10:13 ` rguenth at gcc dot gnu dot org
2008-02-05 11:28 ` uros at gcc dot gnu dot org
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-02-05 10:13 UTC (permalink / raw)
To: gcc-bugs
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |ice-on-valid-code
Priority|P3 |P2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
` (5 preceding siblings ...)
2008-02-05 10:13 ` rguenth at gcc dot gnu dot org
@ 2008-02-05 11:28 ` uros at gcc dot gnu dot org
2008-02-05 13:58 ` ubizjak at gmail dot com
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: uros at gcc dot gnu dot org @ 2008-02-05 11:28 UTC (permalink / raw)
To: gcc-bugs
------- Comment #6 from uros at gcc dot gnu dot org 2008-02-05 11:28 -------
Subject: Bug 35083
Author: uros
Date: Tue Feb 5 11:27:41 2008
New Revision: 132114
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=132114
Log:
PR target/35083
* config/i386/i386.md (floatunsisf2): Enable for TARGET_SSE_MATH only.
Call ix86_expand_convert_uns_sisf_sse for TARGET_SSE2.
testsuite/ChangeLog:
PR target/35083
* gcc.target/i386/pr35083.c: New test.
Added:
trunk/gcc/testsuite/gcc.target/i386/pr35083.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/i386/i386.md
trunk/gcc/testsuite/ChangeLog
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
` (6 preceding siblings ...)
2008-02-05 11:28 ` uros at gcc dot gnu dot org
@ 2008-02-05 13:58 ` ubizjak at gmail dot com
2008-02-06 10:46 ` uros at gcc dot gnu dot org
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ubizjak at gmail dot com @ 2008-02-05 13:58 UTC (permalink / raw)
To: gcc-bugs
------- Comment #7 from ubizjak at gmail dot com 2008-02-05 13:58 -------
This is the diff of expand_float() between gcc-4.2 and gcc-4.3. The relevant
part is logic at the top of the diff that has changed substantially:
--- 222 2008-02-05 14:52:52.000000000 +0100
+++ 111 2008-02-05 14:52:32.000000000 +0100
@@ -52,11 +52,10 @@
}
}
- /* Unsigned integer, and no way to convert directly. Convert as signed,
- then unconditionally adjust the result. For decimal float values we
- do this only if we have already determined that a signed conversion
- provides sufficient accuracy. */
- if (unsignedp && (can_do_signed || !DECIMAL_FLOAT_MODE_P (GET_MODE (to))))
+ /* Unsigned integer, and no way to convert directly. For binary
+ floating point modes, convert as signed, then conditionally adjust
+ the result. */
+ if (unsignedp && can_do_signed && !DECIMAL_FLOAT_MODE_P (GET_MODE (to)))
{
rtx label = gen_label_rtx ();
rtx temp;
@@ -147,7 +146,7 @@
0, label);
- real_2expN (&offset, GET_MODE_BITSIZE (GET_MODE (from)), fmode);
+ real_2expN (&offset, GET_MODE_BITSIZE (GET_MODE (from)));
temp = expand_binop (fmode, add_optab, target,
CONST_DOUBLE_FROM_REAL_VALUE (offset, fmode),
target, 0, OPTAB_LIB_WIDEN);
@@ -169,7 +168,7 @@
if (GET_MODE_SIZE (GET_MODE (from)) < GET_MODE_SIZE (SImode))
from = convert_to_mode (SImode, from, unsignedp);
- libfunc = convert_optab_libfunc (tab, GET_MODE (to), GET_MODE (from));
+ libfunc = tab->handlers[GET_MODE (to)][GET_MODE (from)].libfunc;
gcc_assert (libfunc);
start_sequence ();
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|ubizjak at gmail dot com |unassigned at gcc dot gnu
| |dot org
Status|ASSIGNED |NEW
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
` (7 preceding siblings ...)
2008-02-05 13:58 ` ubizjak at gmail dot com
@ 2008-02-06 10:46 ` uros at gcc dot gnu dot org
2008-02-06 11:11 ` ubizjak at gmail dot com
2008-02-06 12:03 ` corsepiu at gcc dot gnu dot org
10 siblings, 0 replies; 12+ messages in thread
From: uros at gcc dot gnu dot org @ 2008-02-06 10:46 UTC (permalink / raw)
To: gcc-bugs
------- Comment #8 from uros at gcc dot gnu dot org 2008-02-06 10:46 -------
Subject: Bug 35083
Author: uros
Date: Wed Feb 6 10:45:29 2008
New Revision: 132144
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=132144
Log:
PR target/35083
* optabs.c (expand_float): Do not check for decimal modes when
expanding unsigned integer through signed conversion.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/optabs.c
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
` (8 preceding siblings ...)
2008-02-06 10:46 ` uros at gcc dot gnu dot org
@ 2008-02-06 11:11 ` ubizjak at gmail dot com
2008-02-06 12:03 ` corsepiu at gcc dot gnu dot org
10 siblings, 0 replies; 12+ messages in thread
From: ubizjak at gmail dot com @ 2008-02-06 11:11 UTC (permalink / raw)
To: gcc-bugs
------- Comment #9 from ubizjak at gmail dot com 2008-02-06 11:11 -------
Fixed.
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/35083] [4.3 regression] ICE: in extract_insn, at recog.c:1990
2008-02-05 4:35 [Bug target/35083] New: ICE: in extract_insn, at recog.c:1990 corsepiu at gcc dot gnu dot org
` (9 preceding siblings ...)
2008-02-06 11:11 ` ubizjak at gmail dot com
@ 2008-02-06 12:03 ` corsepiu at gcc dot gnu dot org
10 siblings, 0 replies; 12+ messages in thread
From: corsepiu at gcc dot gnu dot org @ 2008-02-06 12:03 UTC (permalink / raw)
To: gcc-bugs
------- Comment #10 from corsepiu at gcc dot gnu dot org 2008-02-06 12:03 -------
Thanks Uros, i386-rtems*-gcc now bootstraps again.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35083
^ permalink raw reply [flat|nested] 12+ messages in thread