Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86-64 -mattr=+sse4.1 | FileCheck %s
      2 
      3 ;CHECK-LABEL: load_2_i8:
      4 ; A single 16-bit load
      5 ;CHECK: pmovzxbq
      6 ;CHECK: paddq
      7 ;CHECK: pshufb
      8 ; A single 16-bit store
      9 ;CHECK: movw
     10 ;CHECK: ret
     11 
     12 define void @load_2_i8(<2 x i8>* %A)  {
     13    %T = load <2 x i8>, <2 x i8>* %A
     14    %G = add <2 x i8> %T, <i8 9, i8 7>
     15    store <2 x i8> %G, <2 x i8>* %A
     16    ret void
     17 } 
     18 
     19 ;CHECK-LABEL: load_2_i16:
     20 ; Read 32-bits
     21 ;CHECK: pmovzxwq
     22 ;CHECK: paddq
     23 ;CHECK: pshufd
     24 ;CHECK: movd
     25 ;CHECK: ret
     26 define void @load_2_i16(<2 x i16>* %A)  {
     27    %T = load <2 x i16>, <2 x i16>* %A
     28    %G = add <2 x i16> %T, <i16 9, i16 7>
     29    store <2 x i16> %G, <2 x i16>* %A
     30    ret void
     31 } 
     32 
     33 ;CHECK-LABEL: load_2_i32:
     34 ;CHECK: pmovzxdq
     35 ;CHECK: paddd
     36 ;CHECK: pshufd
     37 ;CHECK: ret
     38 define void @load_2_i32(<2 x i32>* %A)  {
     39    %T = load <2 x i32>, <2 x i32>* %A
     40    %G = add <2 x i32> %T, <i32 9, i32 7>
     41    store <2 x i32> %G, <2 x i32>* %A
     42    ret void
     43 } 
     44 
     45 ;CHECK-LABEL: load_4_i8:
     46 ;CHECK: pmovzxbd
     47 ;CHECK: paddd
     48 ;CHECK: pshufb
     49 ;CHECK: ret
     50 define void @load_4_i8(<4 x i8>* %A)  {
     51    %T = load <4 x i8>, <4 x i8>* %A
     52    %G = add <4 x i8> %T, <i8 1, i8 4, i8 9, i8 7>
     53    store <4 x i8> %G, <4 x i8>* %A
     54    ret void
     55 } 
     56 
     57 ;CHECK-LABEL: load_4_i16:
     58 ;CHECK: pmovzxwd
     59 ;CHECK: paddw
     60 ;CHECK: pshufb
     61 ;CHECK: ret
     62 define void @load_4_i16(<4 x i16>* %A)  {
     63    %T = load <4 x i16>, <4 x i16>* %A
     64    %G = add <4 x i16> %T, <i16 1, i16 4, i16 9, i16 7>
     65    store <4 x i16> %G, <4 x i16>* %A
     66    ret void
     67 } 
     68 
     69 ;CHECK-LABEL: load_8_i8:
     70 ;CHECK: pmovzxbw
     71 ;CHECK: paddb
     72 ;CHECK: pshufb
     73 ;CHECK: ret
     74 define void @load_8_i8(<8 x i8>* %A)  {
     75    %T = load <8 x i8>, <8 x i8>* %A
     76    %G = add <8 x i8> %T, %T
     77    store <8 x i8> %G, <8 x i8>* %A
     78    ret void
     79 } 
     80