brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.4 KiB · d8a010b Raw
823 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown   -mattr=+mmx          | FileCheck %s --check-prefixes=X86,X86-MMX3; RUN: llc < %s -mtriple=i686-unknown-unknown   -mattr=+mmx,+sse2    | FileCheck %s --check-prefixes=X86,X86-SSE4; RUN: llc < %s -mtriple=i686-unknown-unknown   -mattr=+mmx,+ssse3   | FileCheck %s --check-prefixes=X86,X86-SSE5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+mmx,+sse2    | FileCheck %s --check-prefix=X646; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+mmx,+ssse3   | FileCheck %s --check-prefix=X647; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx     | FileCheck %s --check-prefix=X648; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx2    | FileCheck %s --check-prefix=X649; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512f | FileCheck %s --check-prefix=X6410 11declare <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64>, <1 x i64>)12 13;14; v2i3215;16 17define void @build_v2i32_01(ptr%p0, i32 %a0, i32 %a1) nounwind {18; X86-LABEL: build_v2i32_01:19; X86:       # %bb.0:20; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax21; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm022; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm123; X86-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]24; X86-NEXT:    paddd %mm1, %mm125; X86-NEXT:    movq %mm1, (%eax)26; X86-NEXT:    retl27;28; X64-LABEL: build_v2i32_01:29; X64:       # %bb.0:30; X64-NEXT:    movd %edx, %mm031; X64-NEXT:    movd %esi, %mm132; X64-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]33; X64-NEXT:    paddd %mm1, %mm134; X64-NEXT:    movq %mm1, (%rdi)35; X64-NEXT:    retq36  %1 = insertelement <2 x i32> undef, i32 %a0, i32 037  %2 = insertelement <2 x i32>    %1, i32 %a1, i32 138  %3 = bitcast <2 x i32> %2 to <1 x i64>39  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)40  store <1 x i64> %4, ptr%p041  ret void42}43 44define void @build_v2i32_0z(ptr%p0, i32 %a0, i32 %a1) nounwind {45; X86-LABEL: build_v2i32_0z:46; X86:       # %bb.0:47; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax48; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm049; X86-NEXT:    paddd %mm0, %mm050; X86-NEXT:    movq %mm0, (%eax)51; X86-NEXT:    retl52;53; X64-LABEL: build_v2i32_0z:54; X64:       # %bb.0:55; X64-NEXT:    movd %esi, %mm056; X64-NEXT:    paddd %mm0, %mm057; X64-NEXT:    movq %mm0, (%rdi)58; X64-NEXT:    retq59  %1 = insertelement <2 x i32> undef, i32 %a0, i32 060  %2 = insertelement <2 x i32>    %1, i32   0, i32 161  %3 = bitcast <2 x i32> %2 to <1 x i64>62  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)63  store <1 x i64> %4, ptr%p064  ret void65}66 67define void @build_v2i32_u1(ptr%p0, i32 %a0, i32 %a1) nounwind {68; X86-MMX-LABEL: build_v2i32_u1:69; X86-MMX:       # %bb.0:70; X86-MMX-NEXT:    movl {{[0-9]+}}(%esp), %eax71; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm072; X86-MMX-NEXT:    punpckldq %mm0, %mm0 # mm0 = mm0[0,0]73; X86-MMX-NEXT:    paddd %mm0, %mm074; X86-MMX-NEXT:    movq %mm0, (%eax)75; X86-MMX-NEXT:    retl76;77; X86-SSE-LABEL: build_v2i32_u1:78; X86-SSE:       # %bb.0:79; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax80; X86-SSE-NEXT:    movd {{[0-9]+}}(%esp), %mm081; X86-SSE-NEXT:    pshufw $68, %mm0, %mm0 # mm0 = mm0[0,1,0,1]82; X86-SSE-NEXT:    paddd %mm0, %mm083; X86-SSE-NEXT:    movq %mm0, (%eax)84; X86-SSE-NEXT:    retl85;86; X64-LABEL: build_v2i32_u1:87; X64:       # %bb.0:88; X64-NEXT:    movd %edx, %mm089; X64-NEXT:    pshufw $68, %mm0, %mm0 # mm0 = mm0[0,1,0,1]90; X64-NEXT:    paddd %mm0, %mm091; X64-NEXT:    movq %mm0, (%rdi)92; X64-NEXT:    retq93  %1 = insertelement <2 x i32> undef, i32 undef, i32 094  %2 = insertelement <2 x i32>    %1, i32   %a1, i32 195  %3 = bitcast <2 x i32> %2 to <1 x i64>96  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)97  store <1 x i64> %4, ptr%p098  ret void99}100 101define void @build_v2i32_z1(ptr%p0, i32 %a0, i32 %a1) nounwind {102; X86-LABEL: build_v2i32_z1:103; X86:       # %bb.0:104; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax105; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0106; X86-NEXT:    pxor %mm1, %mm1107; X86-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]108; X86-NEXT:    paddd %mm1, %mm1109; X86-NEXT:    movq %mm1, (%eax)110; X86-NEXT:    retl111;112; X64-LABEL: build_v2i32_z1:113; X64:       # %bb.0:114; X64-NEXT:    movd %edx, %mm0115; X64-NEXT:    pxor %mm1, %mm1116; X64-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]117; X64-NEXT:    paddd %mm1, %mm1118; X64-NEXT:    movq %mm1, (%rdi)119; X64-NEXT:    retq120  %1 = insertelement <2 x i32> undef, i32   0, i32 0121  %2 = insertelement <2 x i32>    %1, i32 %a1, i32 1122  %3 = bitcast <2 x i32> %2 to <1 x i64>123  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)124  store <1 x i64> %4, ptr%p0125  ret void126}127 128define void @build_v2i32_00(ptr%p0, i32 %a0, i32 %a1) nounwind {129; X86-MMX-LABEL: build_v2i32_00:130; X86-MMX:       # %bb.0:131; X86-MMX-NEXT:    movl {{[0-9]+}}(%esp), %eax132; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm0133; X86-MMX-NEXT:    punpckldq %mm0, %mm0 # mm0 = mm0[0,0]134; X86-MMX-NEXT:    paddd %mm0, %mm0135; X86-MMX-NEXT:    movq %mm0, (%eax)136; X86-MMX-NEXT:    retl137;138; X86-SSE-LABEL: build_v2i32_00:139; X86-SSE:       # %bb.0:140; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax141; X86-SSE-NEXT:    movd {{[0-9]+}}(%esp), %mm0142; X86-SSE-NEXT:    pshufw $68, %mm0, %mm0 # mm0 = mm0[0,1,0,1]143; X86-SSE-NEXT:    paddd %mm0, %mm0144; X86-SSE-NEXT:    movq %mm0, (%eax)145; X86-SSE-NEXT:    retl146;147; X64-LABEL: build_v2i32_00:148; X64:       # %bb.0:149; X64-NEXT:    movd %esi, %mm0150; X64-NEXT:    pshufw $68, %mm0, %mm0 # mm0 = mm0[0,1,0,1]151; X64-NEXT:    paddd %mm0, %mm0152; X64-NEXT:    movq %mm0, (%rdi)153; X64-NEXT:    retq154  %1 = insertelement <2 x i32> undef, i32 %a0, i32 0155  %2 = insertelement <2 x i32>    %1, i32 %a0, i32 1156  %3 = bitcast <2 x i32> %2 to <1 x i64>157  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)158  store <1 x i64> %4, ptr%p0159  ret void160}161 162;163; v4i16164;165 166define void @build_v4i16_0123(ptr%p0, i16 %a0, i16 %a1, i16 %a2, i16 %a3) nounwind {167; X86-LABEL: build_v4i16_0123:168; X86:       # %bb.0:169; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax170; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0171; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm1172; X86-NEXT:    punpcklwd %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1]173; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0174; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm2175; X86-NEXT:    punpcklwd %mm0, %mm2 # mm2 = mm2[0],mm0[0],mm2[1],mm0[1]176; X86-NEXT:    punpckldq %mm1, %mm2 # mm2 = mm2[0],mm1[0]177; X86-NEXT:    paddd %mm2, %mm2178; X86-NEXT:    movq %mm2, (%eax)179; X86-NEXT:    retl180;181; X64-LABEL: build_v4i16_0123:182; X64:       # %bb.0:183; X64-NEXT:    movd %r8d, %mm0184; X64-NEXT:    movd %ecx, %mm1185; X64-NEXT:    punpcklwd %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1]186; X64-NEXT:    movd %edx, %mm0187; X64-NEXT:    movd %esi, %mm2188; X64-NEXT:    punpcklwd %mm0, %mm2 # mm2 = mm2[0],mm0[0],mm2[1],mm0[1]189; X64-NEXT:    punpckldq %mm1, %mm2 # mm2 = mm2[0],mm1[0]190; X64-NEXT:    paddd %mm2, %mm2191; X64-NEXT:    movq %mm2, (%rdi)192; X64-NEXT:    retq193  %1 = insertelement <4 x i16> undef, i16 %a0, i32 0194  %2 = insertelement <4 x i16>    %1, i16 %a1, i32 1195  %3 = insertelement <4 x i16>    %2, i16 %a2, i32 2196  %4 = insertelement <4 x i16>    %3, i16 %a3, i32 3197  %5 = bitcast <4 x i16> %4 to <1 x i64>198  %6 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %5, <1 x i64> %5)199  store <1 x i64> %6, ptr%p0200  ret void201}202 203define void @build_v4i16_01zz(ptr%p0, i16 %a0, i16 %a1, i16 %a2, i16 %a3) nounwind {204; X86-LABEL: build_v4i16_01zz:205; X86:       # %bb.0:206; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax207; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0208; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm1209; X86-NEXT:    punpcklwd %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1]210; X86-NEXT:    pxor %mm0, %mm0211; X86-NEXT:    punpcklwd %mm0, %mm0 # mm0 = mm0[0,0,1,1]212; X86-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]213; X86-NEXT:    paddd %mm1, %mm1214; X86-NEXT:    movq %mm1, (%eax)215; X86-NEXT:    retl216;217; X64-LABEL: build_v4i16_01zz:218; X64:       # %bb.0:219; X64-NEXT:    movd %edx, %mm0220; X64-NEXT:    movd %esi, %mm1221; X64-NEXT:    punpcklwd %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1]222; X64-NEXT:    pxor %mm0, %mm0223; X64-NEXT:    punpcklwd %mm0, %mm0 # mm0 = mm0[0,0,1,1]224; X64-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]225; X64-NEXT:    paddd %mm1, %mm1226; X64-NEXT:    movq %mm1, (%rdi)227; X64-NEXT:    retq228  %1 = insertelement <4 x i16> undef, i16 %a0, i32 0229  %2 = insertelement <4 x i16>    %1, i16 %a1, i32 1230  %3 = insertelement <4 x i16>    %2, i16   0, i32 2231  %4 = insertelement <4 x i16>    %3, i16   0, i32 3232  %5 = bitcast <4 x i16> %4 to <1 x i64>233  %6 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %5, <1 x i64> %5)234  store <1 x i64> %6, ptr%p0235  ret void236}237 238define void @build_v4i16_0uuz(ptr%p0, i16 %a0, i16 %a1, i16 %a2, i16 %a3) nounwind {239; X86-LABEL: build_v4i16_0uuz:240; X86:       # %bb.0:241; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax242; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0243; X86-NEXT:    paddd %mm0, %mm0244; X86-NEXT:    movq %mm0, (%eax)245; X86-NEXT:    retl246;247; X64-LABEL: build_v4i16_0uuz:248; X64:       # %bb.0:249; X64-NEXT:    movd %esi, %mm0250; X64-NEXT:    paddd %mm0, %mm0251; X64-NEXT:    movq %mm0, (%rdi)252; X64-NEXT:    retq253  %1 = insertelement <4 x i16> undef, i16   %a0, i32 0254  %2 = insertelement <4 x i16>    %1, i16 undef, i32 1255  %3 = insertelement <4 x i16>    %2, i16 undef, i32 2256  %4 = insertelement <4 x i16>    %3, i16     0, i32 3257  %5 = bitcast <4 x i16> %4 to <1 x i64>258  %6 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %5, <1 x i64> %5)259  store <1 x i64> %6, ptr%p0260  ret void261}262 263define void @build_v4i16_0zuz(ptr%p0, i16 %a0, i16 %a1, i16 %a2, i16 %a3) nounwind {264; X86-LABEL: build_v4i16_0zuz:265; X86:       # %bb.0:266; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax267; X86-NEXT:    movd %eax, %mm0268; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax269; X86-NEXT:    paddd %mm0, %mm0270; X86-NEXT:    movq %mm0, (%eax)271; X86-NEXT:    retl272;273; X64-LABEL: build_v4i16_0zuz:274; X64:       # %bb.0:275; X64-NEXT:    movzwl %si, %eax276; X64-NEXT:    movd %eax, %mm0277; X64-NEXT:    paddd %mm0, %mm0278; X64-NEXT:    movq %mm0, (%rdi)279; X64-NEXT:    retq280  %1 = insertelement <4 x i16> undef, i16   %a0, i32 0281  %2 = insertelement <4 x i16>    %1, i16     0, i32 1282  %3 = insertelement <4 x i16>    %2, i16 undef, i32 2283  %4 = insertelement <4 x i16>    %3, i16     0, i32 3284  %5 = bitcast <4 x i16> %4 to <1 x i64>285  %6 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %5, <1 x i64> %5)286  store <1 x i64> %6, ptr%p0287  ret void288}289 290define void @build_v4i16_012u(ptr%p0, i16 %a0, i16 %a1, i16 %a2, i16 %a3) nounwind {291; X86-LABEL: build_v4i16_012u:292; X86:       # %bb.0:293; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax294; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0295; X86-NEXT:    punpcklwd %mm0, %mm0 # mm0 = mm0[0,0,1,1]296; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm1297; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm2298; X86-NEXT:    punpcklwd %mm1, %mm2 # mm2 = mm2[0],mm1[0],mm2[1],mm1[1]299; X86-NEXT:    punpckldq %mm0, %mm2 # mm2 = mm2[0],mm0[0]300; X86-NEXT:    paddd %mm2, %mm2301; X86-NEXT:    movq %mm2, (%eax)302; X86-NEXT:    retl303;304; X64-LABEL: build_v4i16_012u:305; X64:       # %bb.0:306; X64-NEXT:    movd %ecx, %mm0307; X64-NEXT:    punpcklwd %mm0, %mm0 # mm0 = mm0[0,0,1,1]308; X64-NEXT:    movd %edx, %mm1309; X64-NEXT:    movd %esi, %mm2310; X64-NEXT:    punpcklwd %mm1, %mm2 # mm2 = mm2[0],mm1[0],mm2[1],mm1[1]311; X64-NEXT:    punpckldq %mm0, %mm2 # mm2 = mm2[0],mm0[0]312; X64-NEXT:    paddd %mm2, %mm2313; X64-NEXT:    movq %mm2, (%rdi)314; X64-NEXT:    retq315  %1 = insertelement <4 x i16> undef, i16   %a0, i32 0316  %2 = insertelement <4 x i16>    %1, i16   %a1, i32 1317  %3 = insertelement <4 x i16>    %2, i16   %a2, i32 2318  %4 = insertelement <4 x i16>    %3, i16 undef, i32 3319  %5 = bitcast <4 x i16> %4 to <1 x i64>320  %6 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %5, <1 x i64> %5)321  store <1 x i64> %6, ptr%p0322  ret void323}324 325define void @build_v4i16_0u00(ptr%p0, i16 %a0, i16 %a1, i16 %a2, i16 %a3) nounwind {326; X86-MMX-LABEL: build_v4i16_0u00:327; X86-MMX:       # %bb.0:328; X86-MMX-NEXT:    movl {{[0-9]+}}(%esp), %eax329; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm0330; X86-MMX-NEXT:    punpcklwd %mm0, %mm0 # mm0 = mm0[0,0,1,1]331; X86-MMX-NEXT:    punpckldq %mm0, %mm0 # mm0 = mm0[0,0]332; X86-MMX-NEXT:    paddd %mm0, %mm0333; X86-MMX-NEXT:    movq %mm0, (%eax)334; X86-MMX-NEXT:    retl335;336; X86-SSE-LABEL: build_v4i16_0u00:337; X86-SSE:       # %bb.0:338; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax339; X86-SSE-NEXT:    movd {{[0-9]+}}(%esp), %mm0340; X86-SSE-NEXT:    pshufw $0, %mm0, %mm0 # mm0 = mm0[0,0,0,0]341; X86-SSE-NEXT:    paddd %mm0, %mm0342; X86-SSE-NEXT:    movq %mm0, (%eax)343; X86-SSE-NEXT:    retl344;345; X64-LABEL: build_v4i16_0u00:346; X64:       # %bb.0:347; X64-NEXT:    movd %esi, %mm0348; X64-NEXT:    pshufw $0, %mm0, %mm0 # mm0 = mm0[0,0,0,0]349; X64-NEXT:    paddd %mm0, %mm0350; X64-NEXT:    movq %mm0, (%rdi)351; X64-NEXT:    retq352  %1 = insertelement <4 x i16> undef, i16   %a0, i32 0353  %2 = insertelement <4 x i16>    %1, i16 undef, i32 1354  %3 = insertelement <4 x i16>    %2, i16   %a0, i32 2355  %4 = insertelement <4 x i16>    %3, i16   %a0, i32 3356  %5 = bitcast <4 x i16> %4 to <1 x i64>357  %6 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %5, <1 x i64> %5)358  store <1 x i64> %6, ptr%p0359  ret void360}361 362;363; v8i8364;365 366define void @build_v8i8_01234567(ptr%p0, i8 %a0, i8 %a1, i8 %a2, i8 %a3, i8 %a4, i8 %a5, i8 %a6, i8 %a7) nounwind {367; X86-LABEL: build_v8i8_01234567:368; X86:       # %bb.0:369; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax370; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0371; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm1372; X86-NEXT:    punpcklbw %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1],mm1[2],mm0[2],mm1[3],mm0[3]373; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0374; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm2375; X86-NEXT:    punpcklbw %mm0, %mm2 # mm2 = mm2[0],mm0[0],mm2[1],mm0[1],mm2[2],mm0[2],mm2[3],mm0[3]376; X86-NEXT:    punpcklwd %mm1, %mm2 # mm2 = mm2[0],mm1[0],mm2[1],mm1[1]377; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0378; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm1379; X86-NEXT:    punpcklbw %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1],mm1[2],mm0[2],mm1[3],mm0[3]380; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0381; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm3382; X86-NEXT:    punpcklbw %mm0, %mm3 # mm3 = mm3[0],mm0[0],mm3[1],mm0[1],mm3[2],mm0[2],mm3[3],mm0[3]383; X86-NEXT:    punpcklwd %mm1, %mm3 # mm3 = mm3[0],mm1[0],mm3[1],mm1[1]384; X86-NEXT:    punpckldq %mm2, %mm3 # mm3 = mm3[0],mm2[0]385; X86-NEXT:    paddd %mm3, %mm3386; X86-NEXT:    movq %mm3, (%eax)387; X86-NEXT:    retl388;389; X64-LABEL: build_v8i8_01234567:390; X64:       # %bb.0:391; X64-NEXT:    movd {{[0-9]+}}(%rsp), %mm0392; X64-NEXT:    movd {{[0-9]+}}(%rsp), %mm1393; X64-NEXT:    punpcklbw %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1],mm1[2],mm0[2],mm1[3],mm0[3]394; X64-NEXT:    movd %r9d, %mm0395; X64-NEXT:    movd {{[0-9]+}}(%rsp), %mm2396; X64-NEXT:    punpcklbw %mm2, %mm0 # mm0 = mm0[0],mm2[0],mm0[1],mm2[1],mm0[2],mm2[2],mm0[3],mm2[3]397; X64-NEXT:    punpcklwd %mm1, %mm0 # mm0 = mm0[0],mm1[0],mm0[1],mm1[1]398; X64-NEXT:    movd %r8d, %mm1399; X64-NEXT:    movd %ecx, %mm2400; X64-NEXT:    punpcklbw %mm1, %mm2 # mm2 = mm2[0],mm1[0],mm2[1],mm1[1],mm2[2],mm1[2],mm2[3],mm1[3]401; X64-NEXT:    movd %edx, %mm1402; X64-NEXT:    movd %esi, %mm3403; X64-NEXT:    punpcklbw %mm1, %mm3 # mm3 = mm3[0],mm1[0],mm3[1],mm1[1],mm3[2],mm1[2],mm3[3],mm1[3]404; X64-NEXT:    punpcklwd %mm2, %mm3 # mm3 = mm3[0],mm2[0],mm3[1],mm2[1]405; X64-NEXT:    punpckldq %mm0, %mm3 # mm3 = mm3[0],mm0[0]406; X64-NEXT:    paddd %mm3, %mm3407; X64-NEXT:    movq %mm3, (%rdi)408; X64-NEXT:    retq409  %1  = insertelement <8 x i8> undef, i8 %a0, i32 0410  %2  = insertelement <8 x i8>    %1, i8 %a1, i32 1411  %3  = insertelement <8 x i8>    %2, i8 %a2, i32 2412  %4  = insertelement <8 x i8>    %3, i8 %a3, i32 3413  %5  = insertelement <8 x i8>    %4, i8 %a4, i32 4414  %6  = insertelement <8 x i8>    %5, i8 %a5, i32 5415  %7  = insertelement <8 x i8>    %6, i8 %a6, i32 6416  %8  = insertelement <8 x i8>    %7, i8 %a7, i32 7417  %9  = bitcast <8 x i8> %8 to <1 x i64>418  %10 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %9, <1 x i64> %9)419  store <1 x i64> %10, ptr%p0420  ret void421}422 423define void @build_v8i8_0u2345z7(ptr%p0, i8 %a0, i8 %a1, i8 %a2, i8 %a3, i8 %a4, i8 %a5, i8 %a6, i8 %a7) nounwind {424; X86-LABEL: build_v8i8_0u2345z7:425; X86:       # %bb.0:426; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax427; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0428; X86-NEXT:    pxor %mm1, %mm1429; X86-NEXT:    punpcklbw %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1],mm1[2],mm0[2],mm1[3],mm0[3]430; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0431; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm2432; X86-NEXT:    punpcklbw %mm0, %mm2 # mm2 = mm2[0],mm0[0],mm2[1],mm0[1],mm2[2],mm0[2],mm2[3],mm0[3]433; X86-NEXT:    punpcklwd %mm1, %mm2 # mm2 = mm2[0],mm1[0],mm2[1],mm1[1]434; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0435; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm1436; X86-NEXT:    punpcklbw %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1],mm1[2],mm0[2],mm1[3],mm0[3]437; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0438; X86-NEXT:    punpcklbw %mm0, %mm0 # mm0 = mm0[0,0,1,1,2,2,3,3]439; X86-NEXT:    punpcklwd %mm1, %mm0 # mm0 = mm0[0],mm1[0],mm0[1],mm1[1]440; X86-NEXT:    punpckldq %mm2, %mm0 # mm0 = mm0[0],mm2[0]441; X86-NEXT:    paddd %mm0, %mm0442; X86-NEXT:    movq %mm0, (%eax)443; X86-NEXT:    retl444;445; X64-LABEL: build_v8i8_0u2345z7:446; X64:       # %bb.0:447; X64-NEXT:    movd {{[0-9]+}}(%rsp), %mm0448; X64-NEXT:    pxor %mm1, %mm1449; X64-NEXT:    punpcklbw %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1],mm1[2],mm0[2],mm1[3],mm0[3]450; X64-NEXT:    movd %r9d, %mm0451; X64-NEXT:    movd {{[0-9]+}}(%rsp), %mm2452; X64-NEXT:    punpcklbw %mm2, %mm0 # mm0 = mm0[0],mm2[0],mm0[1],mm2[1],mm0[2],mm2[2],mm0[3],mm2[3]453; X64-NEXT:    punpcklwd %mm1, %mm0 # mm0 = mm0[0],mm1[0],mm0[1],mm1[1]454; X64-NEXT:    movd %r8d, %mm1455; X64-NEXT:    movd %ecx, %mm2456; X64-NEXT:    punpcklbw %mm1, %mm2 # mm2 = mm2[0],mm1[0],mm2[1],mm1[1],mm2[2],mm1[2],mm2[3],mm1[3]457; X64-NEXT:    movd %esi, %mm1458; X64-NEXT:    punpcklbw %mm1, %mm1 # mm1 = mm1[0,0,1,1,2,2,3,3]459; X64-NEXT:    punpcklwd %mm2, %mm1 # mm1 = mm1[0],mm2[0],mm1[1],mm2[1]460; X64-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]461; X64-NEXT:    paddd %mm1, %mm1462; X64-NEXT:    movq %mm1, (%rdi)463; X64-NEXT:    retq464  %1  = insertelement <8 x i8> undef, i8   %a0, i32 0465  %2  = insertelement <8 x i8>    %1, i8 undef, i32 1466  %3  = insertelement <8 x i8>    %2, i8   %a2, i32 2467  %4  = insertelement <8 x i8>    %3, i8   %a3, i32 3468  %5  = insertelement <8 x i8>    %4, i8   %a4, i32 4469  %6  = insertelement <8 x i8>    %5, i8   %a5, i32 5470  %7  = insertelement <8 x i8>    %6, i8    0,  i32 6471  %8  = insertelement <8 x i8>    %7, i8   %a7, i32 7472  %9  = bitcast <8 x i8> %8 to <1 x i64>473  %10 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %9, <1 x i64> %9)474  store <1 x i64> %10, ptr%p0475  ret void476}477 478define void @build_v8i8_0123zzzu(ptr%p0, i8 %a0, i8 %a1, i8 %a2, i8 %a3, i8 %a4, i8 %a5, i8 %a6, i8 %a7) nounwind {479; X86-LABEL: build_v8i8_0123zzzu:480; X86:       # %bb.0:481; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax482; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0483; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm1484; X86-NEXT:    punpcklbw %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1],mm1[2],mm0[2],mm1[3],mm0[3]485; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0486; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm2487; X86-NEXT:    punpcklbw %mm0, %mm2 # mm2 = mm2[0],mm0[0],mm2[1],mm0[1],mm2[2],mm0[2],mm2[3],mm0[3]488; X86-NEXT:    punpcklwd %mm1, %mm2 # mm2 = mm2[0],mm1[0],mm2[1],mm1[1]489; X86-NEXT:    pxor %mm0, %mm0490; X86-NEXT:    pxor %mm1, %mm1491; X86-NEXT:    punpcklbw %mm1, %mm1 # mm1 = mm1[0,0,1,1,2,2,3,3]492; X86-NEXT:    punpcklbw %mm0, %mm0 # mm0 = mm0[0,0,1,1,2,2,3,3]493; X86-NEXT:    punpcklwd %mm1, %mm0 # mm0 = mm0[0],mm1[0],mm0[1],mm1[1]494; X86-NEXT:    punpckldq %mm0, %mm2 # mm2 = mm2[0],mm0[0]495; X86-NEXT:    paddd %mm2, %mm2496; X86-NEXT:    movq %mm2, (%eax)497; X86-NEXT:    retl498;499; X64-LABEL: build_v8i8_0123zzzu:500; X64:       # %bb.0:501; X64-NEXT:    movd %r8d, %mm0502; X64-NEXT:    movd %ecx, %mm1503; X64-NEXT:    punpcklbw %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1],mm1[2],mm0[2],mm1[3],mm0[3]504; X64-NEXT:    movd %edx, %mm0505; X64-NEXT:    movd %esi, %mm2506; X64-NEXT:    punpcklbw %mm0, %mm2 # mm2 = mm2[0],mm0[0],mm2[1],mm0[1],mm2[2],mm0[2],mm2[3],mm0[3]507; X64-NEXT:    punpcklwd %mm1, %mm2 # mm2 = mm2[0],mm1[0],mm2[1],mm1[1]508; X64-NEXT:    pxor %mm0, %mm0509; X64-NEXT:    pxor %mm1, %mm1510; X64-NEXT:    punpcklbw %mm1, %mm1 # mm1 = mm1[0,0,1,1,2,2,3,3]511; X64-NEXT:    punpcklbw %mm0, %mm0 # mm0 = mm0[0,0,1,1,2,2,3,3]512; X64-NEXT:    punpcklwd %mm1, %mm0 # mm0 = mm0[0],mm1[0],mm0[1],mm1[1]513; X64-NEXT:    punpckldq %mm0, %mm2 # mm2 = mm2[0],mm0[0]514; X64-NEXT:    paddd %mm2, %mm2515; X64-NEXT:    movq %mm2, (%rdi)516; X64-NEXT:    retq517  %1  = insertelement <8 x i8> undef, i8   %a0, i32 0518  %2  = insertelement <8 x i8>    %1, i8   %a1, i32 1519  %3  = insertelement <8 x i8>    %2, i8   %a2, i32 2520  %4  = insertelement <8 x i8>    %3, i8   %a3, i32 3521  %5  = insertelement <8 x i8>    %4, i8     0, i32 4522  %6  = insertelement <8 x i8>    %5, i8     0, i32 5523  %7  = insertelement <8 x i8>    %6, i8     0, i32 6524  %8  = insertelement <8 x i8>    %7, i8 undef, i32 7525  %9  = bitcast <8 x i8> %8 to <1 x i64>526  %10 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %9, <1 x i64> %9)527  store <1 x i64> %10, ptr%p0528  ret void529}530 531define void @build_v8i8_0uuuuzzz(ptr%p0, i8 %a0, i8 %a1, i8 %a2, i8 %a3, i8 %a4, i8 %a5, i8 %a6, i8 %a7) nounwind {532; X86-LABEL: build_v8i8_0uuuuzzz:533; X86:       # %bb.0:534; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax535; X86-NEXT:    movd {{[0-9]+}}(%esp), %mm0536; X86-NEXT:    paddd %mm0, %mm0537; X86-NEXT:    movq %mm0, (%eax)538; X86-NEXT:    retl539;540; X64-LABEL: build_v8i8_0uuuuzzz:541; X64:       # %bb.0:542; X64-NEXT:    movd %esi, %mm0543; X64-NEXT:    paddd %mm0, %mm0544; X64-NEXT:    movq %mm0, (%rdi)545; X64-NEXT:    retq546  %1  = insertelement <8 x i8> undef, i8   %a0, i32 0547  %2  = insertelement <8 x i8>    %1, i8 undef, i32 1548  %3  = insertelement <8 x i8>    %2, i8 undef, i32 2549  %4  = insertelement <8 x i8>    %3, i8 undef, i32 3550  %5  = insertelement <8 x i8>    %4, i8 undef, i32 4551  %6  = insertelement <8 x i8>    %5, i8     0, i32 5552  %7  = insertelement <8 x i8>    %6, i8     0, i32 6553  %8  = insertelement <8 x i8>    %7, i8     0, i32 7554  %9  = bitcast <8 x i8> %8 to <1 x i64>555  %10 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %9, <1 x i64> %9)556  store <1 x i64> %10, ptr%p0557  ret void558}559 560define void @build_v8i8_0zzzzzzu(ptr%p0, i8 %a0, i8 %a1, i8 %a2, i8 %a3, i8 %a4, i8 %a5, i8 %a6, i8 %a7) nounwind {561; X86-LABEL: build_v8i8_0zzzzzzu:562; X86:       # %bb.0:563; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax564; X86-NEXT:    movd %eax, %mm0565; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax566; X86-NEXT:    paddd %mm0, %mm0567; X86-NEXT:    movq %mm0, (%eax)568; X86-NEXT:    retl569;570; X64-LABEL: build_v8i8_0zzzzzzu:571; X64:       # %bb.0:572; X64-NEXT:    movzbl %sil, %eax573; X64-NEXT:    movd %eax, %mm0574; X64-NEXT:    paddd %mm0, %mm0575; X64-NEXT:    movq %mm0, (%rdi)576; X64-NEXT:    retq577  %1  = insertelement <8 x i8> undef, i8   %a0, i32 0578  %2  = insertelement <8 x i8>    %1, i8     0, i32 1579  %3  = insertelement <8 x i8>    %2, i8     0, i32 2580  %4  = insertelement <8 x i8>    %3, i8     0, i32 3581  %5  = insertelement <8 x i8>    %4, i8     0, i32 4582  %6  = insertelement <8 x i8>    %5, i8     0, i32 5583  %7  = insertelement <8 x i8>    %6, i8     0, i32 6584  %8  = insertelement <8 x i8>    %7, i8 undef, i32 7585  %9  = bitcast <8 x i8> %8 to <1 x i64>586  %10 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %9, <1 x i64> %9)587  store <1 x i64> %10, ptr%p0588  ret void589}590 591define void @build_v8i8_00000000(ptr%p0, i8 %a0, i8 %a1, i8 %a2, i8 %a3, i8 %a4, i8 %a5, i8 %a6, i8 %a7) nounwind {592; X86-MMX-LABEL: build_v8i8_00000000:593; X86-MMX:       # %bb.0:594; X86-MMX-NEXT:    movl {{[0-9]+}}(%esp), %eax595; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm0596; X86-MMX-NEXT:    punpcklbw %mm0, %mm0 # mm0 = mm0[0,0,1,1,2,2,3,3]597; X86-MMX-NEXT:    punpcklwd %mm0, %mm0 # mm0 = mm0[0,0,1,1]598; X86-MMX-NEXT:    punpckldq %mm0, %mm0 # mm0 = mm0[0,0]599; X86-MMX-NEXT:    paddd %mm0, %mm0600; X86-MMX-NEXT:    movq %mm0, (%eax)601; X86-MMX-NEXT:    retl602;603; X86-SSE-LABEL: build_v8i8_00000000:604; X86-SSE:       # %bb.0:605; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax606; X86-SSE-NEXT:    movd {{[0-9]+}}(%esp), %mm0607; X86-SSE-NEXT:    punpcklbw %mm0, %mm0 # mm0 = mm0[0,0,1,1,2,2,3,3]608; X86-SSE-NEXT:    pshufw $0, %mm0, %mm0 # mm0 = mm0[0,0,0,0]609; X86-SSE-NEXT:    paddd %mm0, %mm0610; X86-SSE-NEXT:    movq %mm0, (%eax)611; X86-SSE-NEXT:    retl612;613; X64-LABEL: build_v8i8_00000000:614; X64:       # %bb.0:615; X64-NEXT:    movd %esi, %mm0616; X64-NEXT:    punpcklbw %mm0, %mm0 # mm0 = mm0[0,0,1,1,2,2,3,3]617; X64-NEXT:    pshufw $0, %mm0, %mm0 # mm0 = mm0[0,0,0,0]618; X64-NEXT:    paddd %mm0, %mm0619; X64-NEXT:    movq %mm0, (%rdi)620; X64-NEXT:    retq621  %1  = insertelement <8 x i8> undef, i8 %a0, i32 0622  %2  = insertelement <8 x i8>    %1, i8 %a0, i32 1623  %3  = insertelement <8 x i8>    %2, i8 %a0, i32 2624  %4  = insertelement <8 x i8>    %3, i8 %a0, i32 3625  %5  = insertelement <8 x i8>    %4, i8 %a0, i32 4626  %6  = insertelement <8 x i8>    %5, i8 %a0, i32 5627  %7  = insertelement <8 x i8>    %6, i8 %a0, i32 6628  %8  = insertelement <8 x i8>    %7, i8 %a0, i32 7629  %9  = bitcast <8 x i8> %8 to <1 x i64>630  %10 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %9, <1 x i64> %9)631  store <1 x i64> %10, ptr%p0632  ret void633}634 635;636; v2f32637;638 639define void @build_v2f32_01(ptr%p0, float %a0, float %a1) nounwind {640; X86-MMX-LABEL: build_v2f32_01:641; X86-MMX:       # %bb.0:642; X86-MMX-NEXT:    movl {{[0-9]+}}(%esp), %eax643; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm0644; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm1645; X86-MMX-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]646; X86-MMX-NEXT:    paddd %mm1, %mm1647; X86-MMX-NEXT:    movq %mm1, (%eax)648; X86-MMX-NEXT:    retl649;650; X86-SSE-LABEL: build_v2f32_01:651; X86-SSE:       # %bb.0:652; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax653; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero654; X86-SSE-NEXT:    movdq2q %xmm0, %mm0655; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero656; X86-SSE-NEXT:    movdq2q %xmm0, %mm1657; X86-SSE-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]658; X86-SSE-NEXT:    paddd %mm1, %mm1659; X86-SSE-NEXT:    movq %mm1, (%eax)660; X86-SSE-NEXT:    retl661;662; X64-LABEL: build_v2f32_01:663; X64:       # %bb.0:664; X64-NEXT:    movdq2q %xmm1, %mm0665; X64-NEXT:    movdq2q %xmm0, %mm1666; X64-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]667; X64-NEXT:    paddd %mm1, %mm1668; X64-NEXT:    movq %mm1, (%rdi)669; X64-NEXT:    retq670  %1 = insertelement <2 x float> undef, float %a0, i32 0671  %2 = insertelement <2 x float>    %1, float %a1, i32 1672  %3 = bitcast <2 x float> %2 to <1 x i64>673  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)674  store <1 x i64> %4, ptr%p0675  ret void676}677 678define void @build_v2f32_0z(ptr%p0, float %a0, float %a1) nounwind {679; X86-MMX-LABEL: build_v2f32_0z:680; X86-MMX:       # %bb.0:681; X86-MMX-NEXT:    movl {{[0-9]+}}(%esp), %eax682; X86-MMX-NEXT:    pxor %mm0, %mm0683; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm1684; X86-MMX-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]685; X86-MMX-NEXT:    paddd %mm1, %mm1686; X86-MMX-NEXT:    movq %mm1, (%eax)687; X86-MMX-NEXT:    retl688;689; X86-SSE-LABEL: build_v2f32_0z:690; X86-SSE:       # %bb.0:691; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax692; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero693; X86-SSE-NEXT:    movdq2q %xmm0, %mm0694; X86-SSE-NEXT:    pxor %mm1, %mm1695; X86-SSE-NEXT:    punpckldq %mm1, %mm0 # mm0 = mm0[0],mm1[0]696; X86-SSE-NEXT:    paddd %mm0, %mm0697; X86-SSE-NEXT:    movq %mm0, (%eax)698; X86-SSE-NEXT:    retl699;700; X64-LABEL: build_v2f32_0z:701; X64:       # %bb.0:702; X64-NEXT:    movdq2q %xmm0, %mm0703; X64-NEXT:    pxor %mm1, %mm1704; X64-NEXT:    punpckldq %mm1, %mm0 # mm0 = mm0[0],mm1[0]705; X64-NEXT:    paddd %mm0, %mm0706; X64-NEXT:    movq %mm0, (%rdi)707; X64-NEXT:    retq708  %1 = insertelement <2 x float> undef, float %a0, i32 0709  %2 = insertelement <2 x float>    %1, float 0.0, i32 1710  %3 = bitcast <2 x float> %2 to <1 x i64>711  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)712  store <1 x i64> %4, ptr%p0713  ret void714}715 716define void @build_v2f32_u1(ptr%p0, float %a0, float %a1) nounwind {717; X86-MMX-LABEL: build_v2f32_u1:718; X86-MMX:       # %bb.0:719; X86-MMX-NEXT:    movl {{[0-9]+}}(%esp), %eax720; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm0721; X86-MMX-NEXT:    punpckldq %mm0, %mm0 # mm0 = mm0[0,0]722; X86-MMX-NEXT:    paddd %mm0, %mm0723; X86-MMX-NEXT:    movq %mm0, (%eax)724; X86-MMX-NEXT:    retl725;726; X86-SSE-LABEL: build_v2f32_u1:727; X86-SSE:       # %bb.0:728; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax729; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero730; X86-SSE-NEXT:    movdq2q %xmm0, %mm0731; X86-SSE-NEXT:    pshufw $68, %mm0, %mm0 # mm0 = mm0[0,1,0,1]732; X86-SSE-NEXT:    paddd %mm0, %mm0733; X86-SSE-NEXT:    movq %mm0, (%eax)734; X86-SSE-NEXT:    retl735;736; X64-LABEL: build_v2f32_u1:737; X64:       # %bb.0:738; X64-NEXT:    movdq2q %xmm1, %mm0739; X64-NEXT:    pshufw $68, %mm0, %mm0 # mm0 = mm0[0,1,0,1]740; X64-NEXT:    paddd %mm0, %mm0741; X64-NEXT:    movq %mm0, (%rdi)742; X64-NEXT:    retq743  %1 = insertelement <2 x float> undef, float undef, i32 0744  %2 = insertelement <2 x float>    %1, float   %a1, i32 1745  %3 = bitcast <2 x float> %2 to <1 x i64>746  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)747  store <1 x i64> %4, ptr%p0748  ret void749}750 751define void @build_v2f32_z1(ptr%p0, float %a0, float %a1) nounwind {752; X86-MMX-LABEL: build_v2f32_z1:753; X86-MMX:       # %bb.0:754; X86-MMX-NEXT:    movl {{[0-9]+}}(%esp), %eax755; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm0756; X86-MMX-NEXT:    pxor %mm1, %mm1757; X86-MMX-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]758; X86-MMX-NEXT:    paddd %mm1, %mm1759; X86-MMX-NEXT:    movq %mm1, (%eax)760; X86-MMX-NEXT:    retl761;762; X86-SSE-LABEL: build_v2f32_z1:763; X86-SSE:       # %bb.0:764; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax765; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero766; X86-SSE-NEXT:    movdq2q %xmm0, %mm0767; X86-SSE-NEXT:    pxor %mm1, %mm1768; X86-SSE-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]769; X86-SSE-NEXT:    paddd %mm1, %mm1770; X86-SSE-NEXT:    movq %mm1, (%eax)771; X86-SSE-NEXT:    retl772;773; X64-LABEL: build_v2f32_z1:774; X64:       # %bb.0:775; X64-NEXT:    movdq2q %xmm1, %mm0776; X64-NEXT:    pxor %mm1, %mm1777; X64-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]778; X64-NEXT:    paddd %mm1, %mm1779; X64-NEXT:    movq %mm1, (%rdi)780; X64-NEXT:    retq781  %1 = insertelement <2 x float> undef, float 0.0, i32 0782  %2 = insertelement <2 x float>    %1, float %a1, i32 1783  %3 = bitcast <2 x float> %2 to <1 x i64>784  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)785  store <1 x i64> %4, ptr%p0786  ret void787}788 789define void @build_v2f32_00(ptr%p0, float %a0, float %a1) nounwind {790; X86-MMX-LABEL: build_v2f32_00:791; X86-MMX:       # %bb.0:792; X86-MMX-NEXT:    movl {{[0-9]+}}(%esp), %eax793; X86-MMX-NEXT:    movd {{[0-9]+}}(%esp), %mm0794; X86-MMX-NEXT:    punpckldq %mm0, %mm0 # mm0 = mm0[0,0]795; X86-MMX-NEXT:    paddd %mm0, %mm0796; X86-MMX-NEXT:    movq %mm0, (%eax)797; X86-MMX-NEXT:    retl798;799; X86-SSE-LABEL: build_v2f32_00:800; X86-SSE:       # %bb.0:801; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax802; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero803; X86-SSE-NEXT:    movdq2q %xmm0, %mm0804; X86-SSE-NEXT:    pshufw $68, %mm0, %mm0 # mm0 = mm0[0,1,0,1]805; X86-SSE-NEXT:    paddd %mm0, %mm0806; X86-SSE-NEXT:    movq %mm0, (%eax)807; X86-SSE-NEXT:    retl808;809; X64-LABEL: build_v2f32_00:810; X64:       # %bb.0:811; X64-NEXT:    movdq2q %xmm0, %mm0812; X64-NEXT:    pshufw $68, %mm0, %mm0 # mm0 = mm0[0,1,0,1]813; X64-NEXT:    paddd %mm0, %mm0814; X64-NEXT:    movq %mm0, (%rdi)815; X64-NEXT:    retq816  %1 = insertelement <2 x float> undef, float %a0, i32 0817  %2 = insertelement <2 x float>    %1, float %a0, i32 1818  %3 = bitcast <2 x float> %2 to <1 x i64>819  %4 = tail call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %3, <1 x i64> %3)820  store <1 x i64> %4, ptr%p0821  ret void822}823