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

Steven Bosscher <steven at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2012-08-12
                 CC|                            |uros at gcc dot gnu.org
     Ever Confirmed|0                           |1

--- Comment #7 from Steven Bosscher <steven at gcc dot gnu.org> 2012-08-12 
00:27:46 UTC ---
Actually, using the builtins also doesn't work. The instruction patterns are
the same and GCC recog's the "best" available one. E.g.:

#(insn:TI 14 12 27 3 (set (reg:V2DI 21 xmm0 [66])
#        (const_vector:V2DI [
#                (const_int 0 [0])
#                (const_int 0 [0])
#            ])) /home/stevenb/devel/build-test/gcc/include/emmintrin.h:1424
1111 {*avx_movv2di_internal}
#     (expr_list:REG_EQUIV (const_vector:V2DI [
#                (const_int 0 [0])
#                (const_int 0 [0])
#            ])
#        (nil)))
        vpxor   %xmm0, %xmm0, %xmm0     # 14    *avx_movv2di_internal/1 [length
= 4]

vs.

#(insn:TI 14 12 27 3 (set (reg:V2DI 21 xmm0 [66])
#        (const_vector:V2DI [
#                (const_int 0 [0])
#                (const_int 0 [0])
#            ])) /home/stevenb/devel/build-test/gcc/include/emmintrin.h:1424
1124 {*movv2di_internal}
#     (expr_list:REG_EQUIV (const_vector:V2DI [
#                (const_int 0 [0])
#                (const_int 0 [0])
#            ])
#        (nil)))
        pxor    %xmm0, %xmm0    # 14    *movv2di_internal/1     [length = 4]

These insns just look the same to GCC, so even if the sse2 builtin expander is
used, the AVX instruction is selected.

Thus a bug, confirmed. Adding i386 guy to CC.

Reply via email to