http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46880

--- Comment #1 from Zdenek Sojka <zsojka at seznam dot cz> 2010-12-18 21:33:03 
UTC ---
Maybe better set of flags:

$ g++ -O -fgcse -fstack-protector-all -fschedule-insns -fsched-pressure -fweb
pr46880.C 
$ ./a.out 
Aborted

_Z3foov:
...
    xorpd    xmm1, xmm1    # tmp65
    movsd    xmm0, QWORD PTR .LC1[rip]    # tmp68,
...
    shufpd    xmm0, xmm1, 1    # tmp66, tmp65
...

.LC1:
    .long    0
    .long    1072693248

is wrong, it loads 1.0 to lower 64bits of xmm0, and shufpd can't solve the
situation with given values in xmm0 and xmm1, when xmm0 is output:
it just moves xmm0[0] or xmm0[1] to xmm0[0], and xmm1[0] or xmm1[1] to xmm0[1]

either
    xorpd    xmm0, xmm0    # tmp65
    movsd    xmm1, QWORD PTR .LC1[rip]    # tmp68,
    shufpd    xmm0, xmm1, 1    # tmp66, tmp65
or do it the same as with -fno-web:
    xorpd    xmm0, xmm0    # tmp65
    movsd    xmm1, QWORD PTR .LC1[rip]    # tmp67,
    unpcklpd    xmm0, xmm1    # tmp65, tmp67

Reply via email to