From: Uros Bizjak Date: Sat, 7 Jul 2007 09:23:04 +0000 (+0200) Subject: re PR target/32660 (ICE using __builtin_ia32_vec_ext_v2di()) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=05c1d0b1c484a64b596968fec036b1f3bd61134f;p=thirdparty%2Fgcc.git re PR target/32660 (ICE using __builtin_ia32_vec_ext_v2di()) PR target/32660 Backport from mainline. * config/i386/sse.md (*vec_extractv2di_1_sse2): New. (*vec_extractv2di_1_sse): New. From-SVN: r126438 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 757f84f7c447..4475753bb8d2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-07-07 Uros Bizjak + + PR target/32660 + Backport from mainline. + * config/i386/sse.md (*vec_extractv2di_1_sse2): New. + (*vec_extractv2di_1_sse): New. + 2007-07-06 Paolo Bonzini PR middle-end/32004 diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 8524e70aaead..7bd8d469be6a 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -3483,6 +3483,35 @@ operands[1] = gen_rtx_REG (DImode, REGNO (operands[1])); }) +(define_insn "*vec_extractv2di_1_sse2" + [(set (match_operand:DI 0 "nonimmediate_operand" "=m,x,x") + (vec_select:DI + (match_operand:V2DI 1 "nonimmediate_operand" "x,0,o") + (parallel [(const_int 1)])))] + "TARGET_SSE2 && !(MEM_P (operands[0]) && MEM_P (operands[1]))" + "@ + movhps\t{%1, %0|%0, %1} + psrldq\t{$8, %0|%0, 8} + movq\t{%H1, %0|%0, %H1}" + [(set_attr "type" "ssemov,sseishft,ssemov") + (set_attr "memory" "*,none,*") + (set_attr "mode" "V2SF,TI,TI")]) + +;; Not sure this is ever used, but it doesn't hurt to have it. -aoliva +(define_insn "*vec_extractv2di_1_sse" + [(set (match_operand:DI 0 "nonimmediate_operand" "=m,x,x") + (vec_select:DI + (match_operand:V2DI 1 "nonimmediate_operand" "x,x,o") + (parallel [(const_int 1)])))] + "!TARGET_SSE2 && TARGET_SSE + && !(MEM_P (operands[0]) && MEM_P (operands[1]))" + "@ + movhps\t{%1, %0|%0, %1} + movhlps\t{%1, %0|%0, %1} + movlps\t{%H1, %0|%0, %H1}" + [(set_attr "type" "ssemov") + (set_attr "mode" "V2SF,V4SF,V2SF")]) + (define_insn "*vec_dupv4si" [(set (match_operand:V4SI 0 "register_operand" "=Y,x") (vec_duplicate:V4SI