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