Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X32
      3 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X64
      4 
      5 define <2 x i64> @shl1(<4 x i32> %r, <4 x i32> %a) nounwind readnone ssp {
      6 ; X32-LABEL: shl1:
      7 ; X32:       # %bb.0: # %entry
      8 ; X32-NEXT:    pslld $23, %xmm1
      9 ; X32-NEXT:    paddd {{\.LCPI.*}}, %xmm1
     10 ; X32-NEXT:    cvttps2dq %xmm1, %xmm1
     11 ; X32-NEXT:    pmulld %xmm1, %xmm0
     12 ; X32-NEXT:    retl
     13 ;
     14 ; X64-LABEL: shl1:
     15 ; X64:       # %bb.0: # %entry
     16 ; X64-NEXT:    pslld $23, %xmm1
     17 ; X64-NEXT:    paddd {{.*}}(%rip), %xmm1
     18 ; X64-NEXT:    cvttps2dq %xmm1, %xmm1
     19 ; X64-NEXT:    pmulld %xmm1, %xmm0
     20 ; X64-NEXT:    retq
     21 entry:
     22 ; CHECK-NOT: shll
     23 ; CHECK: pslld
     24 ; CHECK: paddd
     25 ; CHECK: cvttps2dq
     26 ; CHECK: pmulld
     27 
     28   %shl = shl <4 x i32> %r, %a                     ; <<4 x i32>> [#uses=1]
     29   %tmp2 = bitcast <4 x i32> %shl to <2 x i64>     ; <<2 x i64>> [#uses=1]
     30   ret <2 x i64> %tmp2
     31 }
     32 
     33 define <2 x i64> @shl2(<16 x i8> %r, <16 x i8> %a) nounwind readnone ssp {
     34 ; X32-LABEL: shl2:
     35 ; X32:       # %bb.0: # %entry
     36 ; X32-NEXT:    movdqa %xmm0, %xmm2
     37 ; X32-NEXT:    psllw $5, %xmm1
     38 ; X32-NEXT:    movdqa %xmm0, %xmm3
     39 ; X32-NEXT:    psllw $4, %xmm3
     40 ; X32-NEXT:    pand {{\.LCPI.*}}, %xmm3
     41 ; X32-NEXT:    movdqa %xmm1, %xmm0
     42 ; X32-NEXT:    pblendvb %xmm0, %xmm3, %xmm2
     43 ; X32-NEXT:    movdqa %xmm2, %xmm3
     44 ; X32-NEXT:    psllw $2, %xmm3
     45 ; X32-NEXT:    pand {{\.LCPI.*}}, %xmm3
     46 ; X32-NEXT:    paddb %xmm1, %xmm1
     47 ; X32-NEXT:    movdqa %xmm1, %xmm0
     48 ; X32-NEXT:    pblendvb %xmm0, %xmm3, %xmm2
     49 ; X32-NEXT:    movdqa %xmm2, %xmm3
     50 ; X32-NEXT:    paddb %xmm2, %xmm3
     51 ; X32-NEXT:    paddb %xmm1, %xmm1
     52 ; X32-NEXT:    movdqa %xmm1, %xmm0
     53 ; X32-NEXT:    pblendvb %xmm0, %xmm3, %xmm2
     54 ; X32-NEXT:    movdqa %xmm2, %xmm0
     55 ; X32-NEXT:    retl
     56 ;
     57 ; X64-LABEL: shl2:
     58 ; X64:       # %bb.0: # %entry
     59 ; X64-NEXT:    movdqa %xmm0, %xmm2
     60 ; X64-NEXT:    psllw $5, %xmm1
     61 ; X64-NEXT:    movdqa %xmm0, %xmm3
     62 ; X64-NEXT:    psllw $4, %xmm3
     63 ; X64-NEXT:    pand {{.*}}(%rip), %xmm3
     64 ; X64-NEXT:    movdqa %xmm1, %xmm0
     65 ; X64-NEXT:    pblendvb %xmm0, %xmm3, %xmm2
     66 ; X64-NEXT:    movdqa %xmm2, %xmm3
     67 ; X64-NEXT:    psllw $2, %xmm3
     68 ; X64-NEXT:    pand {{.*}}(%rip), %xmm3
     69 ; X64-NEXT:    paddb %xmm1, %xmm1
     70 ; X64-NEXT:    movdqa %xmm1, %xmm0
     71 ; X64-NEXT:    pblendvb %xmm0, %xmm3, %xmm2
     72 ; X64-NEXT:    movdqa %xmm2, %xmm3
     73 ; X64-NEXT:    paddb %xmm2, %xmm3
     74 ; X64-NEXT:    paddb %xmm1, %xmm1
     75 ; X64-NEXT:    movdqa %xmm1, %xmm0
     76 ; X64-NEXT:    pblendvb %xmm0, %xmm3, %xmm2
     77 ; X64-NEXT:    movdqa %xmm2, %xmm0
     78 ; X64-NEXT:    retq
     79 entry:
     80 ; CHECK-NOT: shlb
     81 ; CHECK: pblendvb
     82 ; CHECK: pblendvb
     83 ; CHECK: pblendvb
     84   %shl = shl <16 x i8> %r, %a                     ; <<16 x i8>> [#uses=1]
     85   %tmp2 = bitcast <16 x i8> %shl to <2 x i64>     ; <<2 x i64>> [#uses=1]
     86   ret <2 x i64> %tmp2
     87 }
     88