public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027
@ 2008-09-08 20:02 tbm at cyrius dot com
2008-09-08 20:04 ` [Bug middle-end/37434] " tbm at cyrius dot com
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: tbm at cyrius dot com @ 2008-09-08 20:02 UTC (permalink / raw)
To: gcc-bugs
With current trunk (revision 140117):
(sid)1122:tbm@em64t: ..4.3-2008-09-08-r140117/gcc] ./cc1plus -quiet -m64 -msse3
~/framewave-Set.ii
....
domain/fwImage/include/Set.h: In function 'void SSE2::Set_AC4R_SETUP_I(long
long int __vector__&, XMM128&, const Fw16s*)':
domain/fwImage/include/Set.h:134: error: unrecognizable insn:
(insn 73 72 74 2
/usr/lib/gcc-snapshot/lib/gcc/x86_64-linux-gnu/4.4.0/include/emmintrin.h:596
(set (reg:V8HI 117)
(vec_merge:V8HI (vec_duplicate:V8HI (const_int 0 [0x0]))
(reg:V8HI 117)
(const_int 2 [0x2]))) -1 (nil))
domain/fwImage/include/Set.h:134: internal compiler error: in extract_insn, at
recog.c:2027
--
Summary: [4.4 Regression] ICE in extract_insn, at recog.c:2027
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tbm at cyrius dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug middle-end/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
@ 2008-09-08 20:04 ` tbm at cyrius dot com
2008-09-08 20:04 ` [Bug target/37434] " pinskia at gcc dot gnu dot org
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: tbm at cyrius dot com @ 2008-09-08 20:04 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from tbm at cyrius dot com 2008-09-08 20:02 -------
Created an attachment (id=16257)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=16257&action=view)
Preprocessed code
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
2008-09-08 20:04 ` [Bug middle-end/37434] " tbm at cyrius dot com
@ 2008-09-08 20:04 ` pinskia at gcc dot gnu dot org
2008-09-08 20:33 ` pinskia at gcc dot gnu dot org
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2008-09-08 20:04 UTC (permalink / raw)
To: gcc-bugs
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pinskia at gcc dot gnu dot
| |org
Component|middle-end |target
Keywords| |ice-on-valid-code
Summary|[4.4 Regression] ICE in |[4.4 Regression] ICE in
|extract_insn, at |extract_insn, at
|recog.c:2027 |recog.c:2027
Target Milestone|--- |4.4.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
2008-09-08 20:04 ` [Bug middle-end/37434] " tbm at cyrius dot com
2008-09-08 20:04 ` [Bug target/37434] " pinskia at gcc dot gnu dot org
@ 2008-09-08 20:33 ` pinskia at gcc dot gnu dot org
2008-09-08 21:36 ` pinskia at gcc dot gnu dot org
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2008-09-08 20:33 UTC (permalink / raw)
To: gcc-bugs
------- Comment #2 from pinskia at gcc dot gnu dot org 2008-09-08 20:31 -------
Reducing ...
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
` (2 preceding siblings ...)
2008-09-08 20:33 ` pinskia at gcc dot gnu dot org
@ 2008-09-08 21:36 ` pinskia at gcc dot gnu dot org
2008-09-09 3:20 ` hjl dot tools at gmail dot com
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2008-09-08 21:36 UTC (permalink / raw)
To: gcc-bugs
------- Comment #3 from pinskia at gcc dot gnu dot org 2008-09-08 21:35 -------
Reduced testcase:
typedef short __v8hi __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16)));
__m128i Set_AC4R_SETUP_I( const short *val ) {
short D2073 = *val;
short D2076 = *(val + 2);
short D2079 = *(val + 4);
__v8hi D2094 = {D2073, D2076, D2079, 0, D2073, D2076, D2079, 0};
return (__m128i)D2094;
}
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2008-09-08 21:35:02
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
` (3 preceding siblings ...)
2008-09-08 21:36 ` pinskia at gcc dot gnu dot org
@ 2008-09-09 3:20 ` hjl dot tools at gmail dot com
2008-09-09 4:24 ` hjl dot tools at gmail dot com
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: hjl dot tools at gmail dot com @ 2008-09-09 3:20 UTC (permalink / raw)
To: gcc-bugs
------- Comment #4 from hjl dot tools at gmail dot com 2008-09-09 03:18 -------
It is caused by my patch:
http://gcc.gnu.org/ml/gcc-cvs/2008-05/msg00569.html
--
hjl dot tools at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |hjl dot tools at gmail dot
|dot org |com
Status|NEW |ASSIGNED
Last reconfirmed|2008-09-08 21:35:02 |2008-09-09 03:18:41
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
` (4 preceding siblings ...)
2008-09-09 3:20 ` hjl dot tools at gmail dot com
@ 2008-09-09 4:24 ` hjl dot tools at gmail dot com
2008-09-09 4:41 ` hjl dot tools at gmail dot com
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: hjl dot tools at gmail dot com @ 2008-09-09 4:24 UTC (permalink / raw)
To: gcc-bugs
------- Comment #5 from hjl dot tools at gmail dot com 2008-09-09 04:23 -------
This patch fixes the crash:
--- i386.c.sse2 2008-09-08 21:17:15.000000000 -0700
+++ i386.c 2008-09-08 21:17:32.000000000 -0700
@@ -26886,7 +26886,7 @@ static void
ix86_expand_vector_init_interleave (enum machine_mode mode,
rtx target, rtx *ops, int n)
{
- enum machine_mode first_imode, second_imode, third_imode;
+ enum machine_mode first_imode, second_imode, third_imode, inner_mode;
int i, j;
rtx op0, op1;
rtx (*gen_load_even) (rtx, rtx, rtx);
@@ -26899,6 +26899,7 @@ ix86_expand_vector_init_interleave (enum
gen_load_even = gen_vec_setv8hi;
gen_interleave_first_low = gen_vec_interleave_lowv4si;
gen_interleave_second_low = gen_vec_interleave_lowv2di;
+ inner_mode = HImode;
first_imode = V4SImode;
second_imode = V2DImode;
third_imode = VOIDmode;
@@ -26907,6 +26908,7 @@ ix86_expand_vector_init_interleave (enum
gen_load_even = gen_vec_setv16qi;
gen_interleave_first_low = gen_vec_interleave_lowv8hi;
gen_interleave_second_low = gen_vec_interleave_lowv4si;
+ inner_mode = QImode;
first_imode = V8HImode;
second_imode = V4SImode;
third_imode = V2DImode;
@@ -26935,7 +26937,9 @@ ix86_expand_vector_init_interleave (enum
emit_move_insn (op0, gen_lowpart (mode, op1));
/* Load even elements into the second positon. */
- emit_insn ((*gen_load_even) (op0, ops [i + i + 1],
+ emit_insn ((*gen_load_even) (op0,
+ force_reg (inner_mode,
+ ops [i + i + 1]),
const1_rtx));
/* Cast vector to FIRST_IMODE vector. */
However the generated codes don't look good for 2 reasons:
1. By default, gcc won't generate inter-unit move between
GPR and SSE.
2. ix86_expand_vector_init doesn't take advantage of the
fact that the second half is the same as the first half
__v8hi D2094 = {D2073, D2076, D2079, 0, D2073, D2076, D2079, 0};
--
hjl dot tools at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ubizjak at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
` (5 preceding siblings ...)
2008-09-09 4:24 ` hjl dot tools at gmail dot com
@ 2008-09-09 4:41 ` hjl dot tools at gmail dot com
2008-09-09 17:24 ` hjl dot tools at gmail dot com
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: hjl dot tools at gmail dot com @ 2008-09-09 4:41 UTC (permalink / raw)
To: gcc-bugs
------- Comment #6 from hjl dot tools at gmail dot com 2008-09-09 04:39 -------
This patch will disable SSE4 and SSE2 optimization if inter-unit
move is disabled or there are duplicates:
--- i386.c.sse2 2008-09-08 21:17:15.000000000 -0700
+++ i386.c 2008-09-08 21:36:38.000000000 -0700
@@ -26886,7 +26886,7 @@ static void
ix86_expand_vector_init_interleave (enum machine_mode mode,
rtx target, rtx *ops, int n)
{
- enum machine_mode first_imode, second_imode, third_imode;
+ enum machine_mode first_imode, second_imode, third_imode, inner_mode;
int i, j;
rtx op0, op1;
rtx (*gen_load_even) (rtx, rtx, rtx);
@@ -26899,6 +26899,7 @@ ix86_expand_vector_init_interleave (enum
gen_load_even = gen_vec_setv8hi;
gen_interleave_first_low = gen_vec_interleave_lowv4si;
gen_interleave_second_low = gen_vec_interleave_lowv2di;
+ inner_mode = HImode;
first_imode = V4SImode;
second_imode = V2DImode;
third_imode = VOIDmode;
@@ -26907,6 +26908,7 @@ ix86_expand_vector_init_interleave (enum
gen_load_even = gen_vec_setv16qi;
gen_interleave_first_low = gen_vec_interleave_lowv8hi;
gen_interleave_second_low = gen_vec_interleave_lowv4si;
+ inner_mode = QImode;
first_imode = V8HImode;
second_imode = V4SImode;
third_imode = V2DImode;
@@ -26935,7 +26937,9 @@ ix86_expand_vector_init_interleave (enum
emit_move_insn (op0, gen_lowpart (mode, op1));
/* Load even elements into the second positon. */
- emit_insn ((*gen_load_even) (op0, ops [i + i + 1],
+ emit_insn ((*gen_load_even) (op0,
+ force_reg (inner_mode,
+ ops [i + i + 1]),
const1_rtx));
/* Cast vector to FIRST_IMODE vector. */
@@ -26998,7 +27002,8 @@ ix86_expand_vector_init_general (bool mm
{
rtx ops[32], op0, op1;
enum machine_mode half_mode = VOIDmode;
- int n, i;
+ int n, i, h;
+ bool duplicated;
switch (mode)
{
@@ -27045,18 +27050,27 @@ half:
return;
case V16QImode:
- if (!TARGET_SSE4_1)
+ if (!TARGET_SSE4_1 || !TARGET_INTER_UNIT_MOVES)
break;
/* FALLTHRU */
case V8HImode:
- if (!TARGET_SSE2)
+ if (!TARGET_SSE2 || !TARGET_INTER_UNIT_MOVES)
break;
n = GET_MODE_NUNITS (mode);
+ h = n >> 1;
+ duplicated = true;
for (i = 0; i < n; i++)
- ops[i] = XVECEXP (vals, 0, i);
- ix86_expand_vector_init_interleave (mode, target, ops, n >> 1);
+ {
+ ops[i] = XVECEXP (vals, 0, i);
+ if (i >= h && !rtx_equal_p (ops[i], ops[i - h]))
+ duplicated = false;
+ }
+ if (duplicated)
+ break;
+
+ ix86_expand_vector_init_interleave (mode, target, ops, h);
return;
case V4HImode:
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
` (6 preceding siblings ...)
2008-09-09 4:41 ` hjl dot tools at gmail dot com
@ 2008-09-09 17:24 ` hjl dot tools at gmail dot com
2008-09-09 20:43 ` jsm28 at gcc dot gnu dot org
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: hjl dot tools at gmail dot com @ 2008-09-09 17:24 UTC (permalink / raw)
To: gcc-bugs
------- Comment #7 from hjl dot tools at gmail dot com 2008-09-09 17:23 -------
A patch is posted at
http://gcc.gnu.org/ml/gcc-patches/2008-09/msg00727.html
--
hjl dot tools at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
URL| |http://gcc.gnu.org/ml/gcc-
| |patches/2008-
| |09/msg00727.html
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
` (7 preceding siblings ...)
2008-09-09 17:24 ` hjl dot tools at gmail dot com
@ 2008-09-09 20:43 ` jsm28 at gcc dot gnu dot org
2008-09-10 14:17 ` hjl at gcc dot gnu dot org
2008-09-10 14:19 ` hjl dot tools at gmail dot com
10 siblings, 0 replies; 12+ messages in thread
From: jsm28 at gcc dot gnu dot org @ 2008-09-09 20:43 UTC (permalink / raw)
To: gcc-bugs
--
jsm28 at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
` (8 preceding siblings ...)
2008-09-09 20:43 ` jsm28 at gcc dot gnu dot org
@ 2008-09-10 14:17 ` hjl at gcc dot gnu dot org
2008-09-10 14:19 ` hjl dot tools at gmail dot com
10 siblings, 0 replies; 12+ messages in thread
From: hjl at gcc dot gnu dot org @ 2008-09-10 14:17 UTC (permalink / raw)
To: gcc-bugs
------- Comment #8 from hjl at gcc dot gnu dot org 2008-09-10 14:15 -------
Subject: Bug 37434
Author: hjl
Date: Wed Sep 10 14:14:28 2008
New Revision: 140231
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=140231
Log:
gcc/
2008-09-10 H.J. Lu <hongjiu.lu@intel.com>
PR target/37434:
* config/i386/i386.c (ix86_expand_vector_init_interleave): Force
the even element into register.
(ix86_expand_vector_init_general): Don't use
ix86_expand_vector_init_interleave on V16QImode and V8HImode
if we can't move from GPR to SSE register directly.
gcc/testsuite/
2008-09-10 H.J. Lu <hongjiu.lu@intel.com>
PR target/37434:
* gcc.target/i386/pr37434-1.c: New.
* gcc.target/i386/pr37434-2.c: Likewise.
* gcc.target/i386/pr37434-3.c: Likewise.
* gcc.target/i386/pr37434-4.c: Likewise.
* gcc.target/i386/sse2-set-v8hi-1a.c: Likewise.
* gcc.target/i386/sse2-set-v8hi-2a.c: Likewise.
* gcc.target/i386/sse4_1-set-v16qi-1a.c: Likewise.
* gcc.target/i386/sse4_1-set-v16qi-2a.c: Likewise.
* gcc.target/i386/sse4_1-set-v16qi-3a.c: Likewise.
Added:
trunk/gcc/testsuite/gcc.target/i386/pr37434-1.c
trunk/gcc/testsuite/gcc.target/i386/pr37434-2.c
trunk/gcc/testsuite/gcc.target/i386/pr37434-3.c
trunk/gcc/testsuite/gcc.target/i386/pr37434-4.c
trunk/gcc/testsuite/gcc.target/i386/sse2-set-v8hi-1a.c
trunk/gcc/testsuite/gcc.target/i386/sse2-set-v8hi-2a.c
trunk/gcc/testsuite/gcc.target/i386/sse4_1-set-v16qi-1a.c
trunk/gcc/testsuite/gcc.target/i386/sse4_1-set-v16qi-2a.c
trunk/gcc/testsuite/gcc.target/i386/sse4_1-set-v16qi-3a.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/i386/i386.c
trunk/gcc/testsuite/ChangeLog
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/37434] [4.4 Regression] ICE in extract_insn, at recog.c:2027
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
` (9 preceding siblings ...)
2008-09-10 14:17 ` hjl at gcc dot gnu dot org
@ 2008-09-10 14:19 ` hjl dot tools at gmail dot com
10 siblings, 0 replies; 12+ messages in thread
From: hjl dot tools at gmail dot com @ 2008-09-10 14:19 UTC (permalink / raw)
To: gcc-bugs
------- Comment #9 from hjl dot tools at gmail dot com 2008-09-10 14:18 -------
Fixed.
--
hjl dot tools at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37434
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2008-09-10 14:19 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-09-08 20:02 [Bug middle-end/37434] New: [4.4 Regression] ICE in extract_insn, at recog.c:2027 tbm at cyrius dot com
2008-09-08 20:04 ` [Bug middle-end/37434] " tbm at cyrius dot com
2008-09-08 20:04 ` [Bug target/37434] " pinskia at gcc dot gnu dot org
2008-09-08 20:33 ` pinskia at gcc dot gnu dot org
2008-09-08 21:36 ` pinskia at gcc dot gnu dot org
2008-09-09 3:20 ` hjl dot tools at gmail dot com
2008-09-09 4:24 ` hjl dot tools at gmail dot com
2008-09-09 4:41 ` hjl dot tools at gmail dot com
2008-09-09 17:24 ` hjl dot tools at gmail dot com
2008-09-09 20:43 ` jsm28 at gcc dot gnu dot org
2008-09-10 14:17 ` hjl at gcc dot gnu dot org
2008-09-10 14:19 ` hjl dot tools at gmail dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).