public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
@ 2008-08-12 23:15 christophe at saout dot de
2008-08-12 23:19 ` [Bug tree-optimization/37101] " christophe at saout dot de
` (17 more replies)
0 siblings, 18 replies; 19+ messages in thread
From: christophe at saout dot de @ 2008-08-12 23:15 UTC (permalink / raw)
To: gcc-bugs
(see http://bugs.gentoo.org/show_bug.cgi?id=227311 )
Seeing this on my (amd64) gcc 4.3.1 in xorg-server code dix/resource.c with
"-O2 -march=nocona -ftree-vectorize".
( gcc -O2 -march=nocona -ftree-vectorize -o resource.o -c resource.i )
Unfortunately I was not able to reproduce this using a simpler testcase,
because gcc would omit a "punpcklqdq" instead of the offending "movq/movlps",
so I attached the whole thing with a description of the problem and an analysis
of the wrong assembler code emitted.
When going through the attached file, look for the "RebuildTable" function,
which is inlined into "AddResource".
It contains the following construct:
for (rptr = resources, tptr = tails; --j >= 0; rptr++, tptr++)
{
*rptr = NullResource;
*tptr = rptr;
}
which initialises two arrays of pointers, one filled with null pointers and the
other with a pointer to the just filled NULL in the other array.
The symptom (leeding to a segfault just after) shows up that the second "tails"
array is incorrectly initialized. Every second entry does not contain the
correct pointer (i.e. filled with the correct value of rptr), but contains a
"ladder" starting at 0 (0x8, 018, 0x28, ...), i.e. does not add the value of
"resources" as start offset. (the whole array goes like 0xc000, 0x0008,
0xc010, 0x0018, 0xc020, 0x0028, ... instead of 0xc000, 0xc008, 0xc010, 0xc018,
0xc020, 0xc028, ...)
Digging through the code it seems that the tree vectorizer is emitting an
optimized implementation of the loop for large amount of entries (j starts at a
value of 128 when the failure was observed) after the body of the function.
It fills a bunch of xmm registers with values, so that both arrays can be
filled 16 bytes at a time (instead of 8 bytes at a time).
Now, due to the bug, the register that pair-wise fills the "tails" array should
be doing sth like this (pseudo-code)
xmm1 = ((resources + 0x00000008) << 64) + resources
xmm2 = (0x00000010 << 64) + 0x00000010
and then fill in xmm1 and add xmm2 to it after each iteration, or something
like that.
What I now seem to see be seeing, is that in my terminology here "xmm1" is not
filled correctly, the upper 64 bit seem to be zero, which would explain how the
array is incorrectly filled.
The assembler code of this part looks like:
(the start of the for loop in the default code path)
f0d: 44 89 ee mov %r13d,%esi
f10: 83 ee 01 sub $0x1,%esi
f13: 78 32 js f47 <AddResource+0x1a2>
f15: 41 83 fd 09 cmp $0x9,%r13d
f19: 0f 87 22 01 00 00 ja 1041 <AddResource+0x29c>
So here seems to be some logic for the first --j and as to whether the
optimized out-of-line code should be jumped (and a non-sse implementation
of the loop body below, which looks ok).
Starting at 1041 there is some more funny logic which I don't fully get, but
some instructions below is where I think the cause of the problem is:
Here, the code that initializes xmm1 (also the xmm1 in my pseudo-code above):
107e: 48 8b 44 24 38 mov 0x38(%rsp),%rax
1083: 48 83 c0 08 add $0x8,%rax
1087: 66 48 0f 6e c8 movq %rax,%xmm1
108c: 0f 12 4c 24 38 movlps 0x38(%rsp),%xmm1
I'm no sse2 expert, but it seems as if movlps was supposed to move the lower
part of xmm1 (which contains "resources" + 0x8) to the upper part before
overwriting the lower part with "resources"? Or something, like that, which it
doesn't (using google and http://www.ews.uiuc.edu/~cjiang/reference/vc191.htm
as a reference... :-))
Anyway, here is the rest of the method:
1091: 66 0f 6f c1 movdqa %xmm1,%xmm0
1095: 31 d2 xor %edx,%edx
1097: 31 c0 xor %eax,%eax
1099: 66 0f 6f 15 00 00 00 movdqa 0x0(%rip),%xmm2 # 10a1
<AddResource+0x2fc>
10a0: 00
109d: R_X86_64_PC32 .LC3+0xfffffffffffffffc
(presumably loads 0x0000001000000010 into xmm2)
10a1: 66 0f ef c9 pxor %xmm1,%xmm1
(xmm1 now contains zeroes to fill the "resources" array)
10a5: 48 8b 5c 24 38 mov 0x38(%rsp),%rbx
10aa: 66 0f 7f 0c 03 movdqa %xmm1,(%rbx,%rax,1) <- fill 2
resources entries
10af: 66 41 0f 7f 04 04 movdqa %xmm0,(%r12,%rax,1) <- fill 2
tails entries
10b5: 83 c2 01 add $0x1,%edx
10b8: 48 83 c0 10 add $0x10,%rax
10bc: 66 0f d4 c2 paddq %xmm2,%xmm0
10c0: 39 ca cmp %ecx,%edx
10c2: 72 e1 jb 10a5 <AddResource+0x300>
Trying to reproduce the test case, gcc omitted a "punpcklqdq" to initialized
the base instead, which works, so this must me some different code triggered by
some other register constraints or something (?).
As from the report, I guess this bug was already present in 4.2, haven't tested
any other versions myself.
--
Summary: [4.2/4.3 Regression] wrong code: tree vectorizer omits
bogus movq/movlps construct
Product: gcc
Version: 4.3.1
Status: UNCONFIRMED
Severity: critical
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: christophe at saout dot de
GCC build triplet: x86_64-pc-linux-gnu
GCC host triplet: x86_64-pc-linux-gnu
GCC target triplet: x86_64-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
@ 2008-08-12 23:19 ` christophe at saout dot de
2008-08-13 8:54 ` rguenth at gcc dot gnu dot org
` (16 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: christophe at saout dot de @ 2008-08-12 23:19 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from christophe at saout dot de 2008-08-12 23:17 -------
Created an attachment (id=16061)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=16061&action=view)
preprocessed source file to be compiled to see the wrong generated code
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
2008-08-12 23:19 ` [Bug tree-optimization/37101] " christophe at saout dot de
@ 2008-08-13 8:54 ` rguenth at gcc dot gnu dot org
2008-08-13 13:48 ` ubizjak at gmail dot com
` (15 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-08-13 8:54 UTC (permalink / raw)
To: gcc-bugs
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rguenth at gcc dot gnu dot
| |org
Keywords| |wrong-code
Target Milestone|--- |4.3.2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
2008-08-12 23:19 ` [Bug tree-optimization/37101] " christophe at saout dot de
2008-08-13 8:54 ` rguenth at gcc dot gnu dot org
@ 2008-08-13 13:48 ` ubizjak at gmail dot com
2008-08-13 16:15 ` christophe at saout dot de
` (14 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: ubizjak at gmail dot com @ 2008-08-13 13:48 UTC (permalink / raw)
To: gcc-bugs
------- Comment #2 from ubizjak at gmail dot com 2008-08-13 13:47 -------
(In reply to comment #0)
> Here, the code that initializes xmm1 (also the xmm1 in my pseudo-code above):
>
> 107e: 48 8b 44 24 38 mov 0x38(%rsp),%rax
> 1083: 48 83 c0 08 add $0x8,%rax
> 1087: 66 48 0f 6e c8 movq %rax,%xmm1
> 108c: 0f 12 4c 24 38 movlps 0x38(%rsp),%xmm1
This code should implement following statement (from _.optimized dump):
<bb 12>:
vect_vec_iv_.590 = {rptr, rptr + 8};
ivtmp.642 = 0;
ivtmp.644 = 0B;
this dump is with -fverbose-asm:
movq 56(%rsp), %rax # rptr, tmp114
addq $8, %rax #, tmp114
movd %rax, %xmm1 # tmp114,
movlps 56(%rsp), %xmm1 # rptr,
movdqa %xmm1, %xmm0 #, vect_vec_iv_.590
xorl %edx, %edx # ivtmp.642
xorl %eax, %eax # ivtmp.644
It looks to me, that movhps should be there instead of movlps. What happens if
you manually change this movlps into movhps in generated asm and recompile this
changed asm?
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2008-08-13 13:47:27
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (2 preceding siblings ...)
2008-08-13 13:48 ` ubizjak at gmail dot com
@ 2008-08-13 16:15 ` christophe at saout dot de
2008-08-13 22:17 ` christophe at saout dot de
` (13 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: christophe at saout dot de @ 2008-08-13 16:15 UTC (permalink / raw)
To: gcc-bugs
------- Comment #3 from christophe at saout dot de 2008-08-13 16:14 -------
Ok, tried that...
Now xorg-server doesn't segfault, but hang in an infinite loop.
Adding printouts after the loop shows that the upper and lower parts of the
register are inverted:
(contents of the "tails" array):
0 0x28e1c98
1 0x28e1c90
2 0x28e1ca8
3 0x28e1ca0
4 0x28e1cb8
...
So, the movlps is correct to fill the lower half of the register without
touching the upper half, but the "movd %rax, %xmm1" should fill the upper half
instead. I tried changing it into a movhps, but that won't take the %rax as
source register.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (3 preceding siblings ...)
2008-08-13 16:15 ` christophe at saout dot de
@ 2008-08-13 22:17 ` christophe at saout dot de
2008-08-14 0:10 ` christophe at saout dot de
` (12 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: christophe at saout dot de @ 2008-08-13 22:17 UTC (permalink / raw)
To: gcc-bugs
------- Comment #4 from christophe at saout dot de 2008-08-13 22:15 -------
Ok, I'm completely not in my game here, but after staring at rtl dumps and gcc
code for about two hours straight, things slowly start to make a litte sense...
(please tell me to shut up and forget about it if I am totally wrong about
this)
In my opinion the issue comes from here:
(define_insn "*vec_concatv2di_rex"
[(set (match_operand:V2DI 0 "register_operand" "=Y2,Yi,!Y2,Y2,x,x,x")
(vec_concat:V2DI
(match_operand:DI 1 "nonimmediate_operand" " m,r ,*y ,0 ,0,0,m")
(match_operand:DI 2 "vector_move_operand" " C,C ,C ,Y2,x,m,0")))]
"TARGET_64BIT"
"@
movq\t{%1, %0|%0, %1}
movq\t{%1, %0|%0, %1}
movq2dq\t{%1, %0|%0, %1}
punpcklqdq\t{%2, %0|%0, %2}
movlhps\t{%2, %0|%0, %2}
movhps\t{%2, %0|%0, %2}
movlps\t{%1, %0|%0, %1}"
[(set_attr "type" "ssemov,ssemov,ssemov,sselog,ssemov,ssemov,ssemov")
(set_attr "mode" "TI,TI,TI,TI,V4SF,V2SF,V2SF")])
As far as I understand it, looking at the instruction and operand matches,
this rule is used to combined two 64 bit values into one 128 bit xmm register.
The relevant part in the RTL dump seems to be:
(insn 401 108 109 (set (reg:DI 22 xmm1)
(reg/f:DI 0 ax [124])) 89 {*movdi_1_rex64} (expr_list:REG_DEAD
(reg/f:DI 0 ax [124])
(nil)))
(insn:HI 109 401 402 (set (reg:V2DI 22 xmm1)
(vec_concat:V2DI (mem/c:DI (plus:DI (reg/f:DI 7 sp)
(const_int 56 [0x38])) [52 D.11729+0 S8 A8])
(reg:DI 22 xmm1))) 1301 {*vec_concatv2di_rex} (nil))
The first instruction tells it to move %rax to %xmm1 (which contains the 64
bits of %xmm1 that should end up in the upper half of %xmm1), which just had 8
added to it in the previous step ("add $0x8,%rax" after %rax being loaded from
rptr).
The second instruction now is supposed to take %xmm1 and a memory operand (the
"rptr" value without 8 added) and combine the two into %xmm1.
As far as I understand the RTL template syntax, this definition handles seven
cases at once, which the last one matching here, operands 0 to 2 being "x", "m"
and "0", which I guess means "xmm register", "memory" and "same as 0th
operand".
So this is supposed to take the memory operand, %xmm1 and combine the two, i.e.
taking the memory operand as lower half and the contents of %xmm1 as upper half
and putting the result in %xmm1 again.
Which is exactly what is supposed to happen here. For the second-to-last
instruction (with the role flipped, i.e. the memory operand to land in the
upper half), this would yield in a "movhps", which is ok.
But for "movlps" it is not, since the lower half of %xmm1 is not moved to the
upper half, which leads to the problem I see.
My assumption would be that the seventh combination leading to emission of
"movlps" is badly formulated. The "0" in the constraints seems to be
interpreted by gcc that it's ok if the contents are in the lower half of the
input register, whereas it seems that the constrain is should at least tell gcc
that the contents of operand 2 should already be in the upper half.
However, I have no idea how to tell gcc that. I could try and remove that 7th
combination altogether to force gcc to find an alternative solution (?).
Is it worth testing that? (i.e. going to build gcc and experiment...)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (4 preceding siblings ...)
2008-08-13 22:17 ` christophe at saout dot de
@ 2008-08-14 0:10 ` christophe at saout dot de
2008-08-14 11:35 ` ubizjak at gmail dot com
` (11 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: christophe at saout dot de @ 2008-08-14 0:10 UTC (permalink / raw)
To: gcc-bugs
------- Comment #5 from christophe at saout dot de 2008-08-14 00:08 -------
Created an attachment (id=16068)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=16068&action=view)
Remove broken alternatives using movlps for vec_concatv2di(_rex) insn
causes gcc to emit the following valid sequence instead
(which is the sequence it always produced when I tried to build a standalone
test case):
movq 56(%rsp), %rax
addq $8, %rax
movq 56(%rsp), %xmm1
movd %rax, %xmm2
punpcklqdq %xmm2, %xmm1
movdqa %xmm1, %xmm0
BTW: that last move seems redundant...
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (5 preceding siblings ...)
2008-08-14 0:10 ` christophe at saout dot de
@ 2008-08-14 11:35 ` ubizjak at gmail dot com
2008-08-14 11:59 ` uros at gcc dot gnu dot org
` (10 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: ubizjak at gmail dot com @ 2008-08-14 11:35 UTC (permalink / raw)
To: gcc-bugs
------- Comment #6 from ubizjak at gmail dot com 2008-08-14 11:34 -------
(In reply to comment #5)
> Created an attachment (id=16068)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=16068&action=view) [edit]
> Remove broken alternatives using movlps for vec_concatv2di(_rex) insn
This is in fact the correct fix. I'm bootstrapping and regression testing your
patch on gcc-4.4 and will do the backport to branches in a couple of days.
--
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-08-13 13:47:27 |2008-08-14 11:34:18
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (6 preceding siblings ...)
2008-08-14 11:35 ` ubizjak at gmail dot com
@ 2008-08-14 11:59 ` uros at gcc dot gnu dot org
2008-08-14 18:26 ` hjl at gcc dot gnu dot org
` (9 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: uros at gcc dot gnu dot org @ 2008-08-14 11:59 UTC (permalink / raw)
To: gcc-bugs
------- Comment #7 from uros at gcc dot gnu dot org 2008-08-14 11:58 -------
Subject: Bug 37101
Author: uros
Date: Thu Aug 14 11:57:18 2008
New Revision: 139095
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139095
Log:
PR target/37101
* config/i386/sse.md (vec_concatv2di): Remove movlps alternative.
(*vec_concatv2di_rex64_sse4_1): Ditto.
(*vec_concatv2di_rex64_sse): Ditto.
testsuite/ChangeLog:
PR target/37101
* gcc.target/i386/pr37101.c: New test.
Added:
trunk/gcc/testsuite/gcc.target/i386/pr37101.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/i386/sse.md
trunk/gcc/testsuite/ChangeLog
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (7 preceding siblings ...)
2008-08-14 11:59 ` uros at gcc dot gnu dot org
@ 2008-08-14 18:26 ` hjl at gcc dot gnu dot org
2008-08-17 6:24 ` cnstar9988 at gmail dot com
` (8 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: hjl at gcc dot gnu dot org @ 2008-08-14 18:26 UTC (permalink / raw)
To: gcc-bugs
------- Comment #8 from hjl at gcc dot gnu dot org 2008-08-14 18:25 -------
Subject: Bug 37101
Author: hjl
Date: Thu Aug 14 18:23:58 2008
New Revision: 139110
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139110
Log:
2008-08-14 H.J. Lu <hongjiu.lu@intel.com>
PR target/37101
* config/i386/sse.md (*vec_concatv2di_avx): Remove vmovlps
alternative.
(*vec_concatv2di_rex64_avx): Likewise.
Modified:
branches/ix86/avx/gcc/ChangeLog.avx
branches/ix86/avx/gcc/config/i386/sse.md
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (8 preceding siblings ...)
2008-08-14 18:26 ` hjl at gcc dot gnu dot org
@ 2008-08-17 6:24 ` cnstar9988 at gmail dot com
2008-08-17 14:59 ` uros at gcc dot gnu dot org
` (7 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: cnstar9988 at gmail dot com @ 2008-08-17 6:24 UTC (permalink / raw)
To: gcc-bugs
------- Comment #9 from cnstar9988 at gmail dot com 2008-08-17 06:22 -------
ping...
fixed for 4_3 branch?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug tree-optimization/37101] [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (9 preceding siblings ...)
2008-08-17 6:24 ` cnstar9988 at gmail dot com
@ 2008-08-17 14:59 ` uros at gcc dot gnu dot org
2008-08-17 17:26 ` [Bug target/37101] [4.2 " ubizjak at gmail dot com
` (6 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: uros at gcc dot gnu dot org @ 2008-08-17 14:59 UTC (permalink / raw)
To: gcc-bugs
------- Comment #10 from uros at gcc dot gnu dot org 2008-08-17 14:58 -------
Subject: Bug 37101
Author: uros
Date: Sun Aug 17 14:57:00 2008
New Revision: 139178
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139178
Log:
PR target/37101
* config/i386/sse.md (vec_concatv2di): Remove movlps alternative.
(*vec_concatv2di_rex64_sse): Ditto.
testsuite/ChangeLog:
PR target/37101
* gcc.target/i386/pr37101.c: New test.
Added:
branches/gcc-4_3-branch/gcc/testsuite/gcc.target/i386/pr37101.c
Modified:
branches/gcc-4_3-branch/gcc/ChangeLog
branches/gcc-4_3-branch/gcc/config/i386/sse.md
branches/gcc-4_3-branch/gcc/testsuite/ChangeLog
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug target/37101] [4.2 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (10 preceding siblings ...)
2008-08-17 14:59 ` uros at gcc dot gnu dot org
@ 2008-08-17 17:26 ` ubizjak at gmail dot com
2008-08-27 22:13 ` jsm28 at gcc dot gnu dot org
` (5 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: ubizjak at gmail dot com @ 2008-08-17 17:26 UTC (permalink / raw)
To: gcc-bugs
------- Comment #11 from ubizjak at gmail dot com 2008-08-17 17:24 -------
Fixed for 4.3.2.
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|critical |normal
Component|tree-optimization |target
Priority|P3 |P2
Summary|[4.2/4.3 Regression] wrong |[4.2 Regression] wrong code:
|code: tree vectorizer omits |tree vectorizer omits bogus
|bogus movq/movlps construct |movq/movlps construct
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug target/37101] [4.2 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (11 preceding siblings ...)
2008-08-17 17:26 ` [Bug target/37101] [4.2 " ubizjak at gmail dot com
@ 2008-08-27 22:13 ` jsm28 at gcc dot gnu dot org
2008-08-28 14:22 ` rguenth at gcc dot gnu dot org
` (4 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: jsm28 at gcc dot gnu dot org @ 2008-08-27 22:13 UTC (permalink / raw)
To: gcc-bugs
------- Comment #12 from jsm28 at gcc dot gnu dot org 2008-08-27 22:05 -------
4.3.2 is released, changing milestones to 4.3.3.
--
jsm28 at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.3.2 |4.3.3
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug target/37101] [4.2 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (12 preceding siblings ...)
2008-08-27 22:13 ` jsm28 at gcc dot gnu dot org
@ 2008-08-28 14:22 ` rguenth at gcc dot gnu dot org
2008-08-29 9:44 ` uros at gcc dot gnu dot org
` (3 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-08-28 14:22 UTC (permalink / raw)
To: gcc-bugs
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to fail| |4.2.4 4.3.1
Known to work| |4.3.2 4.4.0
Target Milestone|4.3.3 |4.2.5
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug target/37101] [4.2 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (13 preceding siblings ...)
2008-08-28 14:22 ` rguenth at gcc dot gnu dot org
@ 2008-08-29 9:44 ` uros at gcc dot gnu dot org
2008-08-29 9:45 ` ubizjak at gmail dot com
` (2 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: uros at gcc dot gnu dot org @ 2008-08-29 9:44 UTC (permalink / raw)
To: gcc-bugs
------- Comment #13 from uros at gcc dot gnu dot org 2008-08-29 09:43 -------
Subject: Bug 37101
Author: uros
Date: Fri Aug 29 09:41:57 2008
New Revision: 139758
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139758
Log:
Backport from mainline:
2008-08-14 Christophe Saout <christophe@saout.de>
Uros Bizjak <ubizjak@gmail.com>
PR target/37101
* config/i386/sse.md (vec_concatv2di): Remove movlps alternative.
testsuite/ChangeLog:
Backport from mainline:
2008-08-14 Uros Bizjak <ubizjak@gmail.com>
PR target/37101
* gcc.target/i386/pr37101.c: New test.
Added:
branches/gcc-4_2-branch/gcc/testsuite/gcc.target/i386/pr37101.c
Modified:
branches/gcc-4_2-branch/gcc/ChangeLog
branches/gcc-4_2-branch/gcc/config/i386/sse.md
branches/gcc-4_2-branch/gcc/testsuite/ChangeLog
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug target/37101] [4.2 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (14 preceding siblings ...)
2008-08-29 9:44 ` uros at gcc dot gnu dot org
@ 2008-08-29 9:45 ` ubizjak at gmail dot com
2008-09-02 20:54 ` Emmanuel dot Thome at inria dot fr
2009-04-29 15:16 ` pinskia at gcc dot gnu dot org
17 siblings, 0 replies; 19+ messages in thread
From: ubizjak at gmail dot com @ 2008-08-29 9:45 UTC (permalink / raw)
To: gcc-bugs
------- Comment #14 from ubizjak at gmail dot com 2008-08-29 09:44 -------
Fixed.
--
ubizjak at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug target/37101] [4.2 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (15 preceding siblings ...)
2008-08-29 9:45 ` ubizjak at gmail dot com
@ 2008-09-02 20:54 ` Emmanuel dot Thome at inria dot fr
2009-04-29 15:16 ` pinskia at gcc dot gnu dot org
17 siblings, 0 replies; 19+ messages in thread
From: Emmanuel dot Thome at inria dot fr @ 2008-09-02 20:54 UTC (permalink / raw)
To: gcc-bugs
------- Comment #15 from Emmanuel dot Thome at inria dot fr 2008-09-02 20:53 -------
*** Bug 37340 has been marked as a duplicate of this bug. ***
--
Emmanuel dot Thome at inria dot fr changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |Emmanuel dot Thome at inria
| |dot fr
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Bug target/37101] [4.2 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
` (16 preceding siblings ...)
2008-09-02 20:54 ` Emmanuel dot Thome at inria dot fr
@ 2009-04-29 15:16 ` pinskia at gcc dot gnu dot org
17 siblings, 0 replies; 19+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2009-04-29 15:16 UTC (permalink / raw)
To: gcc-bugs
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.2.5 |4.3.2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37101
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2009-04-29 15:16 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-08-12 23:15 [Bug tree-optimization/37101] New: [4.2/4.3 Regression] wrong code: tree vectorizer omits bogus movq/movlps construct christophe at saout dot de
2008-08-12 23:19 ` [Bug tree-optimization/37101] " christophe at saout dot de
2008-08-13 8:54 ` rguenth at gcc dot gnu dot org
2008-08-13 13:48 ` ubizjak at gmail dot com
2008-08-13 16:15 ` christophe at saout dot de
2008-08-13 22:17 ` christophe at saout dot de
2008-08-14 0:10 ` christophe at saout dot de
2008-08-14 11:35 ` ubizjak at gmail dot com
2008-08-14 11:59 ` uros at gcc dot gnu dot org
2008-08-14 18:26 ` hjl at gcc dot gnu dot org
2008-08-17 6:24 ` cnstar9988 at gmail dot com
2008-08-17 14:59 ` uros at gcc dot gnu dot org
2008-08-17 17:26 ` [Bug target/37101] [4.2 " ubizjak at gmail dot com
2008-08-27 22:13 ` jsm28 at gcc dot gnu dot org
2008-08-28 14:22 ` rguenth at gcc dot gnu dot org
2008-08-29 9:44 ` uros at gcc dot gnu dot org
2008-08-29 9:45 ` ubizjak at gmail dot com
2008-09-02 20:54 ` Emmanuel dot Thome at inria dot fr
2009-04-29 15:16 ` pinskia at gcc dot gnu dot org
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).