brintos

brintos / llvm-project-archived public Read only

0
0
Text · 52.2 KiB · 6eb99dd Raw
1391 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+mmx,+ssse3 | FileCheck %s3 4define <1 x i64> @stack_fold_cvtpd2pi(<2 x double> %a0) {5; CHECK-LABEL: stack_fold_cvtpd2pi:6; CHECK:       # %bb.0:7; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill8; CHECK-NEXT:    #APP9; CHECK-NEXT:    nop10; CHECK-NEXT:    #NO_APP11; CHECK-NEXT:    cvtpd2pi {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 16-byte Folded Reload12; CHECK-NEXT:    movq %mm0, %rax13; CHECK-NEXT:    retq14  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()15  %2 = call <1 x i64> @llvm.x86.sse.cvtpd2pi(<2 x double> %a0) nounwind readnone16  ret <1 x i64> %217}18declare <1 x i64> @llvm.x86.sse.cvtpd2pi(<2 x double>) nounwind readnone19 20define <2 x double> @stack_fold_cvtpi2pd(<1 x i64> %a0) {21; CHECK-LABEL: stack_fold_cvtpi2pd:22; CHECK:       # %bb.0:23; CHECK-NEXT:    movq %rdi, %mm024; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill25; CHECK-NEXT:    #APP26; CHECK-NEXT:    nop27; CHECK-NEXT:    #NO_APP28; CHECK-NEXT:    cvtpi2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload29; CHECK-NEXT:    retq30  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm1},~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()31  %2 = call <2 x double> @llvm.x86.sse.cvtpi2pd(<1 x i64> %a0) nounwind readnone32  ret <2 x double> %233}34declare <2 x double> @llvm.x86.sse.cvtpi2pd(<1 x i64>) nounwind readnone35 36define <4 x float> @stack_fold_cvtpi2ps(<4 x float> %a0, <1 x i64> %a1) {37; CHECK-LABEL: stack_fold_cvtpi2ps:38; CHECK:       # %bb.0:39; CHECK-NEXT:    movq %rdi, %mm040; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill41; CHECK-NEXT:    #APP42; CHECK-NEXT:    nop43; CHECK-NEXT:    #NO_APP44; CHECK-NEXT:    cvtpi2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload45; CHECK-NEXT:    retq46  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm1},~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()47  %2 = call <4 x float> @llvm.x86.sse.cvtpi2ps(<4 x float> %a0, <1 x i64> %a1) nounwind readnone48  ret <4 x float> %249}50declare <4 x float> @llvm.x86.sse.cvtpi2ps(<4 x float>, <1 x i64>) nounwind readnone51 52define <1 x i64> @stack_fold_cvtps2pi(<4 x float> %a0) {53; CHECK-LABEL: stack_fold_cvtps2pi:54; CHECK:       # %bb.0:55; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill56; CHECK-NEXT:    #APP57; CHECK-NEXT:    nop58; CHECK-NEXT:    #NO_APP59; CHECK-NEXT:    cvtps2pi {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 16-byte Folded Reload60; CHECK-NEXT:    movq %mm0, %rax61; CHECK-NEXT:    retq62  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()63  %2 = call <1 x i64> @llvm.x86.sse.cvtps2pi(<4 x float> %a0) nounwind readnone64  ret <1 x i64> %265}66declare <1 x i64> @llvm.x86.sse.cvtps2pi(<4 x float>) nounwind readnone67 68define <1 x i64> @stack_fold_cvttpd2pi(<2 x double> %a0) {69; CHECK-LABEL: stack_fold_cvttpd2pi:70; CHECK:       # %bb.0:71; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill72; CHECK-NEXT:    #APP73; CHECK-NEXT:    nop74; CHECK-NEXT:    #NO_APP75; CHECK-NEXT:    cvttpd2pi {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 16-byte Folded Reload76; CHECK-NEXT:    movq %mm0, %rax77; CHECK-NEXT:    retq78  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()79  %2 = call <1 x i64> @llvm.x86.sse.cvttpd2pi(<2 x double> %a0) nounwind readnone80  ret <1 x i64> %281}82declare <1 x i64> @llvm.x86.sse.cvttpd2pi(<2 x double>) nounwind readnone83 84define <1 x i64> @stack_fold_cvttps2pi(<4 x float> %a0) {85; CHECK-LABEL: stack_fold_cvttps2pi:86; CHECK:       # %bb.0:87; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill88; CHECK-NEXT:    #APP89; CHECK-NEXT:    nop90; CHECK-NEXT:    #NO_APP91; CHECK-NEXT:    cvttps2pi {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 16-byte Folded Reload92; CHECK-NEXT:    movq %mm0, %rax93; CHECK-NEXT:    retq94  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()95  %2 = call <1 x i64> @llvm.x86.sse.cvttps2pi(<4 x float> %a0) nounwind readnone96  ret <1 x i64> %297}98declare <1 x i64> @llvm.x86.sse.cvttps2pi(<4 x float>) nounwind readnone99 100; TODO stack_fold_movd_load101 102; padd forces execution on mmx103define i32 @stack_fold_movd_store(<1 x i64> %a0) nounwind {104; CHECK-LABEL: stack_fold_movd_store:105; CHECK:       # %bb.0:106; CHECK-NEXT:    pushq %rbp107; CHECK-NEXT:    pushq %r15108; CHECK-NEXT:    pushq %r14109; CHECK-NEXT:    pushq %r13110; CHECK-NEXT:    pushq %r12111; CHECK-NEXT:    pushq %rbx112; CHECK-NEXT:    movq %rdi, %mm0113; CHECK-NEXT:    paddb %mm0, %mm0114; CHECK-NEXT:    movd %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill115; CHECK-NEXT:    #APP116; CHECK-NEXT:    nop117; CHECK-NEXT:    #NO_APP118; CHECK-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload119; CHECK-NEXT:    popq %rbx120; CHECK-NEXT:    popq %r12121; CHECK-NEXT:    popq %r13122; CHECK-NEXT:    popq %r14123; CHECK-NEXT:    popq %r15124; CHECK-NEXT:    popq %rbp125; CHECK-NEXT:    retq126  %1 = call <1 x i64> @llvm.x86.mmx.padd.b(<1 x i64> %a0, <1 x i64> %a0)127  %2 = bitcast <1 x i64> %1 to <2 x i32>128  %3 = extractelement <2 x i32> %2, i32 0129  %4 = tail call i64 asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()130  ret i32 %3131}132 133; TODO stack_fold_movq_load134 135; padd forces execution on mmx136define i64 @stack_fold_movq_store(<1 x i64> %a0) nounwind {137; CHECK-LABEL: stack_fold_movq_store:138; CHECK:       # %bb.0:139; CHECK-NEXT:    pushq %rbp140; CHECK-NEXT:    pushq %r15141; CHECK-NEXT:    pushq %r14142; CHECK-NEXT:    pushq %r13143; CHECK-NEXT:    pushq %r12144; CHECK-NEXT:    pushq %rbx145; CHECK-NEXT:    movq %rdi, %mm0146; CHECK-NEXT:    paddb %mm0, %mm0147; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill148; CHECK-NEXT:    #APP149; CHECK-NEXT:    nop150; CHECK-NEXT:    #NO_APP151; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload152; CHECK-NEXT:    popq %rbx153; CHECK-NEXT:    popq %r12154; CHECK-NEXT:    popq %r13155; CHECK-NEXT:    popq %r14156; CHECK-NEXT:    popq %r15157; CHECK-NEXT:    popq %rbp158; CHECK-NEXT:    retq159  %1 = call <1 x i64> @llvm.x86.mmx.padd.b(<1 x i64> %a0, <1 x i64> %a0)160  %2 = bitcast <1 x i64> %1 to i64161  %3 = tail call i64 asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()162  ret i64 %2163}164 165define <1 x i64> @stack_fold_pabsb(<1 x i64> %a0) {166; CHECK-LABEL: stack_fold_pabsb:167; CHECK:       # %bb.0:168; CHECK-NEXT:    movq %rdi, %mm0169; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill170; CHECK-NEXT:    #APP171; CHECK-NEXT:    nop172; CHECK-NEXT:    #NO_APP173; CHECK-NEXT:    pabsb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload174; CHECK-NEXT:    movq %mm0, %rax175; CHECK-NEXT:    retq176  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()177  %2 = call <1 x i64> @llvm.x86.ssse3.pabs.b(<1 x i64> %a0) nounwind readnone178  ret <1 x i64> %2179}180declare <1 x i64> @llvm.x86.ssse3.pabs.b(<1 x i64>) nounwind readnone181 182define <1 x i64> @stack_fold_pabsd(<1 x i64> %a0) {183; CHECK-LABEL: stack_fold_pabsd:184; CHECK:       # %bb.0:185; CHECK-NEXT:    movq %rdi, %mm0186; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill187; CHECK-NEXT:    #APP188; CHECK-NEXT:    nop189; CHECK-NEXT:    #NO_APP190; CHECK-NEXT:    pabsd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload191; CHECK-NEXT:    movq %mm0, %rax192; CHECK-NEXT:    retq193  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()194  %2 = call <1 x i64> @llvm.x86.ssse3.pabs.d(<1 x i64> %a0) nounwind readnone195  ret <1 x i64> %2196}197declare <1 x i64> @llvm.x86.ssse3.pabs.d(<1 x i64>) nounwind readnone198 199define <1 x i64> @stack_fold_pabsw(<1 x i64> %a0) {200; CHECK-LABEL: stack_fold_pabsw:201; CHECK:       # %bb.0:202; CHECK-NEXT:    movq %rdi, %mm0203; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill204; CHECK-NEXT:    #APP205; CHECK-NEXT:    nop206; CHECK-NEXT:    #NO_APP207; CHECK-NEXT:    pabsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload208; CHECK-NEXT:    movq %mm0, %rax209; CHECK-NEXT:    retq210  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()211  %2 = call <1 x i64> @llvm.x86.ssse3.pabs.w(<1 x i64> %a0) nounwind readnone212  ret <1 x i64> %2213}214declare <1 x i64> @llvm.x86.ssse3.pabs.w(<1 x i64>) nounwind readnone215 216define <1 x i64> @stack_fold_packssdw(<1 x i64> %a, <1 x i64> %b) {217; CHECK-LABEL: stack_fold_packssdw:218; CHECK:       # %bb.0:219; CHECK-NEXT:    movq %rsi, %mm0220; CHECK-NEXT:    movq %rdi, %mm1221; CHECK-NEXT:    packssdw %mm0, %mm1222; CHECK-NEXT:    movq %mm1, %rax223; CHECK-NEXT:    #APP224; CHECK-NEXT:    nop225; CHECK-NEXT:    #NO_APP226; CHECK-NEXT:    retq227  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()228  %2 = call <1 x i64> @llvm.x86.mmx.packssdw(<1 x i64> %a, <1 x i64> %b) nounwind readnone229  ret <1 x i64> %2230}231declare <1 x i64> @llvm.x86.mmx.packssdw(<1 x i64>, <1 x i64>) nounwind readnone232 233define <1 x i64> @stack_fold_packsswb(<1 x i64> %a, <1 x i64> %b) {234; CHECK-LABEL: stack_fold_packsswb:235; CHECK:       # %bb.0:236; CHECK-NEXT:    movq %rsi, %mm0237; CHECK-NEXT:    movq %rdi, %mm1238; CHECK-NEXT:    packsswb %mm0, %mm1239; CHECK-NEXT:    movq %mm1, %rax240; CHECK-NEXT:    #APP241; CHECK-NEXT:    nop242; CHECK-NEXT:    #NO_APP243; CHECK-NEXT:    retq244  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()245  %2 = call <1 x i64> @llvm.x86.mmx.packsswb(<1 x i64> %a, <1 x i64> %b) nounwind readnone246  ret <1 x i64> %2247}248declare <1 x i64> @llvm.x86.mmx.packsswb(<1 x i64>, <1 x i64>) nounwind readnone249 250define <1 x i64> @stack_fold_packuswb(<1 x i64> %a, <1 x i64> %b) {251; CHECK-LABEL: stack_fold_packuswb:252; CHECK:       # %bb.0:253; CHECK-NEXT:    movq %rsi, %mm0254; CHECK-NEXT:    movq %rdi, %mm1255; CHECK-NEXT:    packuswb %mm0, %mm1256; CHECK-NEXT:    movq %mm1, %rax257; CHECK-NEXT:    #APP258; CHECK-NEXT:    nop259; CHECK-NEXT:    #NO_APP260; CHECK-NEXT:    retq261  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()262  %2 = call <1 x i64> @llvm.x86.mmx.packuswb(<1 x i64> %a, <1 x i64> %b) nounwind readnone263  ret <1 x i64> %2264}265declare <1 x i64> @llvm.x86.mmx.packuswb(<1 x i64>, <1 x i64>) nounwind readnone266 267define <1 x i64> @stack_fold_paddb(<1 x i64> %a, <1 x i64> %b) {268; CHECK-LABEL: stack_fold_paddb:269; CHECK:       # %bb.0:270; CHECK-NEXT:    movq %rsi, %mm0271; CHECK-NEXT:    movq %rdi, %mm1272; CHECK-NEXT:    paddb %mm0, %mm1273; CHECK-NEXT:    movq %mm1, %rax274; CHECK-NEXT:    #APP275; CHECK-NEXT:    nop276; CHECK-NEXT:    #NO_APP277; CHECK-NEXT:    retq278  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()279  %2 = call <1 x i64> @llvm.x86.mmx.padd.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone280  ret <1 x i64> %2281}282declare <1 x i64> @llvm.x86.mmx.padd.b(<1 x i64>, <1 x i64>) nounwind readnone283 284define <1 x i64> @stack_fold_paddd(<1 x i64> %a, <1 x i64> %b) {285; CHECK-LABEL: stack_fold_paddd:286; CHECK:       # %bb.0:287; CHECK-NEXT:    movq %rsi, %mm0288; CHECK-NEXT:    movq %rdi, %mm1289; CHECK-NEXT:    paddd %mm0, %mm1290; CHECK-NEXT:    movq %mm1, %rax291; CHECK-NEXT:    #APP292; CHECK-NEXT:    nop293; CHECK-NEXT:    #NO_APP294; CHECK-NEXT:    retq295  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()296  %2 = call <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64> %a, <1 x i64> %b) nounwind readnone297  ret <1 x i64> %2298}299declare <1 x i64> @llvm.x86.mmx.padd.d(<1 x i64>, <1 x i64>) nounwind readnone300 301define <1 x i64> @stack_fold_paddq(<1 x i64> %a, <1 x i64> %b) {302; CHECK-LABEL: stack_fold_paddq:303; CHECK:       # %bb.0:304; CHECK-NEXT:    movq %rsi, %mm0305; CHECK-NEXT:    movq %rdi, %mm1306; CHECK-NEXT:    paddq %mm0, %mm1307; CHECK-NEXT:    movq %mm1, %rax308; CHECK-NEXT:    #APP309; CHECK-NEXT:    nop310; CHECK-NEXT:    #NO_APP311; CHECK-NEXT:    retq312  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()313  %2 = call <1 x i64> @llvm.x86.mmx.padd.q(<1 x i64> %a, <1 x i64> %b) nounwind readnone314  ret <1 x i64> %2315}316declare <1 x i64> @llvm.x86.mmx.padd.q(<1 x i64>, <1 x i64>) nounwind readnone317 318define <1 x i64> @stack_fold_paddsb(<1 x i64> %a, <1 x i64> %b) {319; CHECK-LABEL: stack_fold_paddsb:320; CHECK:       # %bb.0:321; CHECK-NEXT:    movq %rsi, %mm0322; CHECK-NEXT:    movq %rdi, %mm1323; CHECK-NEXT:    paddsb %mm0, %mm1324; CHECK-NEXT:    movq %mm1, %rax325; CHECK-NEXT:    #APP326; CHECK-NEXT:    nop327; CHECK-NEXT:    #NO_APP328; CHECK-NEXT:    retq329  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()330  %2 = call <1 x i64> @llvm.x86.mmx.padds.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone331  ret <1 x i64> %2332}333declare <1 x i64> @llvm.x86.mmx.padds.b(<1 x i64>, <1 x i64>) nounwind readnone334 335define <1 x i64> @stack_fold_paddsw(<1 x i64> %a, <1 x i64> %b) {336; CHECK-LABEL: stack_fold_paddsw:337; CHECK:       # %bb.0:338; CHECK-NEXT:    movq %rsi, %mm0339; CHECK-NEXT:    movq %rdi, %mm1340; CHECK-NEXT:    paddsw %mm0, %mm1341; CHECK-NEXT:    movq %mm1, %rax342; CHECK-NEXT:    #APP343; CHECK-NEXT:    nop344; CHECK-NEXT:    #NO_APP345; CHECK-NEXT:    retq346  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()347  %2 = call <1 x i64> @llvm.x86.mmx.padds.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone348  ret <1 x i64> %2349}350declare <1 x i64> @llvm.x86.mmx.padds.w(<1 x i64>, <1 x i64>) nounwind readnone351 352define <1 x i64> @stack_fold_paddusb(<1 x i64> %a, <1 x i64> %b) {353; CHECK-LABEL: stack_fold_paddusb:354; CHECK:       # %bb.0:355; CHECK-NEXT:    movq %rsi, %mm0356; CHECK-NEXT:    movq %rdi, %mm1357; CHECK-NEXT:    paddusb %mm0, %mm1358; CHECK-NEXT:    movq %mm1, %rax359; CHECK-NEXT:    #APP360; CHECK-NEXT:    nop361; CHECK-NEXT:    #NO_APP362; CHECK-NEXT:    retq363  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()364  %2 = call <1 x i64> @llvm.x86.mmx.paddus.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone365  ret <1 x i64> %2366}367declare <1 x i64> @llvm.x86.mmx.paddus.b(<1 x i64>, <1 x i64>) nounwind readnone368 369define <1 x i64> @stack_fold_paddusw(<1 x i64> %a, <1 x i64> %b) {370; CHECK-LABEL: stack_fold_paddusw:371; CHECK:       # %bb.0:372; CHECK-NEXT:    movq %rsi, %mm0373; CHECK-NEXT:    movq %rdi, %mm1374; CHECK-NEXT:    paddusw %mm0, %mm1375; CHECK-NEXT:    movq %mm1, %rax376; CHECK-NEXT:    #APP377; CHECK-NEXT:    nop378; CHECK-NEXT:    #NO_APP379; CHECK-NEXT:    retq380  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()381  %2 = call <1 x i64> @llvm.x86.mmx.paddus.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone382  ret <1 x i64> %2383}384declare <1 x i64> @llvm.x86.mmx.paddus.w(<1 x i64>, <1 x i64>) nounwind readnone385 386define <1 x i64> @stack_fold_paddw(<1 x i64> %a, <1 x i64> %b) {387; CHECK-LABEL: stack_fold_paddw:388; CHECK:       # %bb.0:389; CHECK-NEXT:    movq %rsi, %mm0390; CHECK-NEXT:    movq %rdi, %mm1391; CHECK-NEXT:    paddw %mm0, %mm1392; CHECK-NEXT:    movq %mm1, %rax393; CHECK-NEXT:    #APP394; CHECK-NEXT:    nop395; CHECK-NEXT:    #NO_APP396; CHECK-NEXT:    retq397  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()398  %2 = call <1 x i64> @llvm.x86.mmx.padd.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone399  ret <1 x i64> %2400}401declare <1 x i64> @llvm.x86.mmx.padd.w(<1 x i64>, <1 x i64>) nounwind readnone402 403define <1 x i64> @stack_fold_palignr(<1 x i64> %a, <1 x i64> %b) {404; CHECK-LABEL: stack_fold_palignr:405; CHECK:       # %bb.0:406; CHECK-NEXT:    movq %rsi, %mm0407; CHECK-NEXT:    movq %rdi, %mm1408; CHECK-NEXT:    palignr $1, %mm0, %mm1409; CHECK-NEXT:    movq %mm1, %rax410; CHECK-NEXT:    #APP411; CHECK-NEXT:    nop412; CHECK-NEXT:    #NO_APP413; CHECK-NEXT:    retq414  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()415  %2 = call <1 x i64> @llvm.x86.mmx.palignr.b(<1 x i64> %a, <1 x i64> %b, i8 1) nounwind readnone416  ret <1 x i64> %2417}418declare <1 x i64> @llvm.x86.mmx.palignr.b(<1 x i64>, <1 x i64>, i8) nounwind readnone419 420define <1 x i64> @stack_fold_pand(<1 x i64> %a, <1 x i64> %b) {421; CHECK-LABEL: stack_fold_pand:422; CHECK:       # %bb.0:423; CHECK-NEXT:    movq %rsi, %mm0424; CHECK-NEXT:    movq %rdi, %mm1425; CHECK-NEXT:    pand %mm0, %mm1426; CHECK-NEXT:    movq %mm1, %rax427; CHECK-NEXT:    #APP428; CHECK-NEXT:    nop429; CHECK-NEXT:    #NO_APP430; CHECK-NEXT:    retq431  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()432  %2 = call <1 x i64> @llvm.x86.mmx.pand(<1 x i64> %a, <1 x i64> %b) nounwind readnone433  ret <1 x i64> %2434}435declare <1 x i64> @llvm.x86.mmx.pand(<1 x i64>, <1 x i64>) nounwind readnone436 437define <1 x i64> @stack_fold_pandn(<1 x i64> %a, <1 x i64> %b) {438; CHECK-LABEL: stack_fold_pandn:439; CHECK:       # %bb.0:440; CHECK-NEXT:    movq %rsi, %mm0441; CHECK-NEXT:    movq %rdi, %mm1442; CHECK-NEXT:    pandn %mm0, %mm1443; CHECK-NEXT:    movq %mm1, %rax444; CHECK-NEXT:    #APP445; CHECK-NEXT:    nop446; CHECK-NEXT:    #NO_APP447; CHECK-NEXT:    retq448  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()449  %2 = call <1 x i64> @llvm.x86.mmx.pandn(<1 x i64> %a, <1 x i64> %b) nounwind readnone450  ret <1 x i64> %2451}452declare <1 x i64> @llvm.x86.mmx.pandn(<1 x i64>, <1 x i64>) nounwind readnone453 454define <1 x i64> @stack_fold_pavgb(<1 x i64> %a, <1 x i64> %b) {455; CHECK-LABEL: stack_fold_pavgb:456; CHECK:       # %bb.0:457; CHECK-NEXT:    movq %rsi, %mm0458; CHECK-NEXT:    movq %rdi, %mm1459; CHECK-NEXT:    pavgb %mm0, %mm1460; CHECK-NEXT:    movq %mm1, %rax461; CHECK-NEXT:    #APP462; CHECK-NEXT:    nop463; CHECK-NEXT:    #NO_APP464; CHECK-NEXT:    retq465  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()466  %2 = call <1 x i64> @llvm.x86.mmx.pavg.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone467  ret <1 x i64> %2468}469declare <1 x i64> @llvm.x86.mmx.pavg.b(<1 x i64>, <1 x i64>) nounwind readnone470 471define <1 x i64> @stack_fold_pavgw(<1 x i64> %a, <1 x i64> %b) {472; CHECK-LABEL: stack_fold_pavgw:473; CHECK:       # %bb.0:474; CHECK-NEXT:    movq %rsi, %mm0475; CHECK-NEXT:    movq %rdi, %mm1476; CHECK-NEXT:    pavgw %mm0, %mm1477; CHECK-NEXT:    movq %mm1, %rax478; CHECK-NEXT:    #APP479; CHECK-NEXT:    nop480; CHECK-NEXT:    #NO_APP481; CHECK-NEXT:    retq482  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()483  %2 = call <1 x i64> @llvm.x86.mmx.pavg.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone484  ret <1 x i64> %2485}486declare <1 x i64> @llvm.x86.mmx.pavg.w(<1 x i64>, <1 x i64>) nounwind readnone487 488define <1 x i64> @stack_fold_pcmpeqb(<1 x i64> %a, <1 x i64> %b) {489; CHECK-LABEL: stack_fold_pcmpeqb:490; CHECK:       # %bb.0:491; CHECK-NEXT:    movq %rsi, %mm0492; CHECK-NEXT:    movq %rdi, %mm1493; CHECK-NEXT:    pcmpeqb %mm0, %mm1494; CHECK-NEXT:    movq %mm1, %rax495; CHECK-NEXT:    #APP496; CHECK-NEXT:    nop497; CHECK-NEXT:    #NO_APP498; CHECK-NEXT:    retq499  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()500  %2 = call <1 x i64> @llvm.x86.mmx.pcmpeq.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone501  ret <1 x i64> %2502}503declare <1 x i64> @llvm.x86.mmx.pcmpeq.b(<1 x i64>, <1 x i64>) nounwind readnone504 505define <1 x i64> @stack_fold_pcmpeqd(<1 x i64> %a, <1 x i64> %b) {506; CHECK-LABEL: stack_fold_pcmpeqd:507; CHECK:       # %bb.0:508; CHECK-NEXT:    movq %rsi, %mm0509; CHECK-NEXT:    movq %rdi, %mm1510; CHECK-NEXT:    pcmpeqd %mm0, %mm1511; CHECK-NEXT:    movq %mm1, %rax512; CHECK-NEXT:    #APP513; CHECK-NEXT:    nop514; CHECK-NEXT:    #NO_APP515; CHECK-NEXT:    retq516  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()517  %2 = call <1 x i64> @llvm.x86.mmx.pcmpeq.d(<1 x i64> %a, <1 x i64> %b) nounwind readnone518  ret <1 x i64> %2519}520declare <1 x i64> @llvm.x86.mmx.pcmpeq.d(<1 x i64>, <1 x i64>) nounwind readnone521 522define <1 x i64> @stack_fold_pcmpeqw(<1 x i64> %a, <1 x i64> %b) {523; CHECK-LABEL: stack_fold_pcmpeqw:524; CHECK:       # %bb.0:525; CHECK-NEXT:    movq %rsi, %mm0526; CHECK-NEXT:    movq %rdi, %mm1527; CHECK-NEXT:    pcmpeqw %mm0, %mm1528; CHECK-NEXT:    movq %mm1, %rax529; CHECK-NEXT:    #APP530; CHECK-NEXT:    nop531; CHECK-NEXT:    #NO_APP532; CHECK-NEXT:    retq533  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()534  %2 = call <1 x i64> @llvm.x86.mmx.pcmpeq.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone535  ret <1 x i64> %2536}537declare <1 x i64> @llvm.x86.mmx.pcmpeq.w(<1 x i64>, <1 x i64>) nounwind readnone538 539define <1 x i64> @stack_fold_pcmpgtb(<1 x i64> %a, <1 x i64> %b) {540; CHECK-LABEL: stack_fold_pcmpgtb:541; CHECK:       # %bb.0:542; CHECK-NEXT:    movq %rsi, %mm0543; CHECK-NEXT:    movq %rdi, %mm1544; CHECK-NEXT:    pcmpgtb %mm0, %mm1545; CHECK-NEXT:    movq %mm1, %rax546; CHECK-NEXT:    #APP547; CHECK-NEXT:    nop548; CHECK-NEXT:    #NO_APP549; CHECK-NEXT:    retq550  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()551  %2 = call <1 x i64> @llvm.x86.mmx.pcmpgt.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone552  ret <1 x i64> %2553}554declare <1 x i64> @llvm.x86.mmx.pcmpgt.b(<1 x i64>, <1 x i64>) nounwind readnone555 556define <1 x i64> @stack_fold_pcmpgtd(<1 x i64> %a, <1 x i64> %b) {557; CHECK-LABEL: stack_fold_pcmpgtd:558; CHECK:       # %bb.0:559; CHECK-NEXT:    movq %rsi, %mm0560; CHECK-NEXT:    movq %rdi, %mm1561; CHECK-NEXT:    pcmpgtd %mm0, %mm1562; CHECK-NEXT:    movq %mm1, %rax563; CHECK-NEXT:    #APP564; CHECK-NEXT:    nop565; CHECK-NEXT:    #NO_APP566; CHECK-NEXT:    retq567  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()568  %2 = call <1 x i64> @llvm.x86.mmx.pcmpgt.d(<1 x i64> %a, <1 x i64> %b) nounwind readnone569  ret <1 x i64> %2570}571declare <1 x i64> @llvm.x86.mmx.pcmpgt.d(<1 x i64>, <1 x i64>) nounwind readnone572 573define <1 x i64> @stack_fold_pcmpgtw(<1 x i64> %a, <1 x i64> %b) {574; CHECK-LABEL: stack_fold_pcmpgtw:575; CHECK:       # %bb.0:576; CHECK-NEXT:    movq %rsi, %mm0577; CHECK-NEXT:    movq %rdi, %mm1578; CHECK-NEXT:    pcmpgtw %mm0, %mm1579; CHECK-NEXT:    movq %mm1, %rax580; CHECK-NEXT:    #APP581; CHECK-NEXT:    nop582; CHECK-NEXT:    #NO_APP583; CHECK-NEXT:    retq584  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()585  %2 = call <1 x i64> @llvm.x86.mmx.pcmpgt.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone586  ret <1 x i64> %2587}588declare <1 x i64> @llvm.x86.mmx.pcmpgt.w(<1 x i64>, <1 x i64>) nounwind readnone589 590define <1 x i64> @stack_fold_phaddd(<1 x i64> %a, <1 x i64> %b) {591; CHECK-LABEL: stack_fold_phaddd:592; CHECK:       # %bb.0:593; CHECK-NEXT:    movq %rsi, %mm0594; CHECK-NEXT:    movq %rdi, %mm1595; CHECK-NEXT:    phaddd %mm0, %mm1596; CHECK-NEXT:    movq %mm1, %rax597; CHECK-NEXT:    #APP598; CHECK-NEXT:    nop599; CHECK-NEXT:    #NO_APP600; CHECK-NEXT:    retq601  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()602  %2 = call <1 x i64> @llvm.x86.ssse3.phadd.d(<1 x i64> %a, <1 x i64> %b) nounwind readnone603  ret <1 x i64> %2604}605declare <1 x i64> @llvm.x86.ssse3.phadd.d(<1 x i64>, <1 x i64>) nounwind readnone606 607define <1 x i64> @stack_fold_phaddsw(<1 x i64> %a, <1 x i64> %b) {608; CHECK-LABEL: stack_fold_phaddsw:609; CHECK:       # %bb.0:610; CHECK-NEXT:    movq %rsi, %mm0611; CHECK-NEXT:    movq %rdi, %mm1612; CHECK-NEXT:    phaddsw %mm0, %mm1613; CHECK-NEXT:    movq %mm1, %rax614; CHECK-NEXT:    #APP615; CHECK-NEXT:    nop616; CHECK-NEXT:    #NO_APP617; CHECK-NEXT:    retq618  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()619  %2 = call <1 x i64> @llvm.x86.ssse3.phadd.sw(<1 x i64> %a, <1 x i64> %b) nounwind readnone620  ret <1 x i64> %2621}622declare <1 x i64> @llvm.x86.ssse3.phadd.sw(<1 x i64>, <1 x i64>) nounwind readnone623 624define <1 x i64> @stack_fold_phaddw(<1 x i64> %a, <1 x i64> %b) {625; CHECK-LABEL: stack_fold_phaddw:626; CHECK:       # %bb.0:627; CHECK-NEXT:    movq %rsi, %mm0628; CHECK-NEXT:    movq %rdi, %mm1629; CHECK-NEXT:    phaddw %mm0, %mm1630; CHECK-NEXT:    movq %mm1, %rax631; CHECK-NEXT:    #APP632; CHECK-NEXT:    nop633; CHECK-NEXT:    #NO_APP634; CHECK-NEXT:    retq635  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()636  %2 = call <1 x i64> @llvm.x86.ssse3.phadd.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone637  ret <1 x i64> %2638}639declare <1 x i64> @llvm.x86.ssse3.phadd.w(<1 x i64>, <1 x i64>) nounwind readnone640 641define <1 x i64> @stack_fold_phsubd(<1 x i64> %a, <1 x i64> %b) {642; CHECK-LABEL: stack_fold_phsubd:643; CHECK:       # %bb.0:644; CHECK-NEXT:    movq %rsi, %mm0645; CHECK-NEXT:    movq %rdi, %mm1646; CHECK-NEXT:    phsubd %mm0, %mm1647; CHECK-NEXT:    movq %mm1, %rax648; CHECK-NEXT:    #APP649; CHECK-NEXT:    nop650; CHECK-NEXT:    #NO_APP651; CHECK-NEXT:    retq652  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()653  %2 = call <1 x i64> @llvm.x86.ssse3.phsub.d(<1 x i64> %a, <1 x i64> %b) nounwind readnone654  ret <1 x i64> %2655}656declare <1 x i64> @llvm.x86.ssse3.phsub.d(<1 x i64>, <1 x i64>) nounwind readnone657 658define <1 x i64> @stack_fold_phsubsw(<1 x i64> %a, <1 x i64> %b) {659; CHECK-LABEL: stack_fold_phsubsw:660; CHECK:       # %bb.0:661; CHECK-NEXT:    movq %rsi, %mm0662; CHECK-NEXT:    movq %rdi, %mm1663; CHECK-NEXT:    phsubsw %mm0, %mm1664; CHECK-NEXT:    movq %mm1, %rax665; CHECK-NEXT:    #APP666; CHECK-NEXT:    nop667; CHECK-NEXT:    #NO_APP668; CHECK-NEXT:    retq669  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()670  %2 = call <1 x i64> @llvm.x86.ssse3.phsub.sw(<1 x i64> %a, <1 x i64> %b) nounwind readnone671  ret <1 x i64> %2672}673declare <1 x i64> @llvm.x86.ssse3.phsub.sw(<1 x i64>, <1 x i64>) nounwind readnone674 675define <1 x i64> @stack_fold_phsubw(<1 x i64> %a, <1 x i64> %b) {676; CHECK-LABEL: stack_fold_phsubw:677; CHECK:       # %bb.0:678; CHECK-NEXT:    movq %rsi, %mm0679; CHECK-NEXT:    movq %rdi, %mm1680; CHECK-NEXT:    phsubw %mm0, %mm1681; CHECK-NEXT:    movq %mm1, %rax682; CHECK-NEXT:    #APP683; CHECK-NEXT:    nop684; CHECK-NEXT:    #NO_APP685; CHECK-NEXT:    retq686  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()687  %2 = call <1 x i64> @llvm.x86.ssse3.phsub.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone688  ret <1 x i64> %2689}690declare <1 x i64> @llvm.x86.ssse3.phsub.w(<1 x i64>, <1 x i64>) nounwind readnone691 692; TODO stack_fold_pinsrw693 694define <1 x i64> @stack_fold_pmaddubsw(<1 x i64> %a, <1 x i64> %b) {695; CHECK-LABEL: stack_fold_pmaddubsw:696; CHECK:       # %bb.0:697; CHECK-NEXT:    movq %rsi, %mm0698; CHECK-NEXT:    movq %rdi, %mm1699; CHECK-NEXT:    pmaddubsw %mm0, %mm1700; CHECK-NEXT:    movq %mm1, %rax701; CHECK-NEXT:    #APP702; CHECK-NEXT:    nop703; CHECK-NEXT:    #NO_APP704; CHECK-NEXT:    retq705  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()706  %2 = call <1 x i64> @llvm.x86.ssse3.pmadd.ub.sw(<1 x i64> %a, <1 x i64> %b) nounwind readnone707  ret <1 x i64> %2708}709declare <1 x i64> @llvm.x86.ssse3.pmadd.ub.sw(<1 x i64>, <1 x i64>) nounwind readnone710 711define <1 x i64> @stack_fold_pmaddwd(<1 x i64> %a, <1 x i64> %b) {712; CHECK-LABEL: stack_fold_pmaddwd:713; CHECK:       # %bb.0:714; CHECK-NEXT:    movq %rsi, %mm0715; CHECK-NEXT:    movq %rdi, %mm1716; CHECK-NEXT:    pmaddwd %mm0, %mm1717; CHECK-NEXT:    movq %mm1, %rax718; CHECK-NEXT:    #APP719; CHECK-NEXT:    nop720; CHECK-NEXT:    #NO_APP721; CHECK-NEXT:    retq722  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()723  %2 = call <1 x i64> @llvm.x86.mmx.pmadd.wd(<1 x i64> %a, <1 x i64> %b) nounwind readnone724  ret <1 x i64> %2725}726declare <1 x i64> @llvm.x86.mmx.pmadd.wd(<1 x i64>, <1 x i64>) nounwind readnone727 728define <1 x i64> @stack_fold_pmaxsw(<1 x i64> %a, <1 x i64> %b) {729; CHECK-LABEL: stack_fold_pmaxsw:730; CHECK:       # %bb.0:731; CHECK-NEXT:    movq %rsi, %mm0732; CHECK-NEXT:    movq %rdi, %mm1733; CHECK-NEXT:    pmaxsw %mm0, %mm1734; CHECK-NEXT:    movq %mm1, %rax735; CHECK-NEXT:    #APP736; CHECK-NEXT:    nop737; CHECK-NEXT:    #NO_APP738; CHECK-NEXT:    retq739  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()740  %2 = call <1 x i64> @llvm.x86.mmx.pmaxs.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone741  ret <1 x i64> %2742}743declare <1 x i64> @llvm.x86.mmx.pmaxs.w(<1 x i64>, <1 x i64>) nounwind readnone744 745define <1 x i64> @stack_fold_pmaxub(<1 x i64> %a, <1 x i64> %b) {746; CHECK-LABEL: stack_fold_pmaxub:747; CHECK:       # %bb.0:748; CHECK-NEXT:    movq %rsi, %mm0749; CHECK-NEXT:    movq %rdi, %mm1750; CHECK-NEXT:    pmaxub %mm0, %mm1751; CHECK-NEXT:    movq %mm1, %rax752; CHECK-NEXT:    #APP753; CHECK-NEXT:    nop754; CHECK-NEXT:    #NO_APP755; CHECK-NEXT:    retq756  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()757  %2 = call <1 x i64> @llvm.x86.mmx.pmaxu.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone758  ret <1 x i64> %2759}760declare <1 x i64> @llvm.x86.mmx.pmaxu.b(<1 x i64>, <1 x i64>) nounwind readnone761 762define <1 x i64> @stack_fold_pminsw(<1 x i64> %a, <1 x i64> %b) {763; CHECK-LABEL: stack_fold_pminsw:764; CHECK:       # %bb.0:765; CHECK-NEXT:    movq %rsi, %mm0766; CHECK-NEXT:    movq %rdi, %mm1767; CHECK-NEXT:    pminsw %mm0, %mm1768; CHECK-NEXT:    movq %mm1, %rax769; CHECK-NEXT:    #APP770; CHECK-NEXT:    nop771; CHECK-NEXT:    #NO_APP772; CHECK-NEXT:    retq773  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()774  %2 = call <1 x i64> @llvm.x86.mmx.pmins.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone775  ret <1 x i64> %2776}777declare <1 x i64> @llvm.x86.mmx.pmins.w(<1 x i64>, <1 x i64>) nounwind readnone778 779define <1 x i64> @stack_fold_pminub(<1 x i64> %a, <1 x i64> %b) {780; CHECK-LABEL: stack_fold_pminub:781; CHECK:       # %bb.0:782; CHECK-NEXT:    movq %rsi, %mm0783; CHECK-NEXT:    movq %rdi, %mm1784; CHECK-NEXT:    pminub %mm0, %mm1785; CHECK-NEXT:    movq %mm1, %rax786; CHECK-NEXT:    #APP787; CHECK-NEXT:    nop788; CHECK-NEXT:    #NO_APP789; CHECK-NEXT:    retq790  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()791  %2 = call <1 x i64> @llvm.x86.mmx.pminu.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone792  ret <1 x i64> %2793}794declare <1 x i64> @llvm.x86.mmx.pminu.b(<1 x i64>, <1 x i64>) nounwind readnone795 796define <1 x i64> @stack_fold_pmulhrsw(<1 x i64> %a, <1 x i64> %b) {797; CHECK-LABEL: stack_fold_pmulhrsw:798; CHECK:       # %bb.0:799; CHECK-NEXT:    movq %rsi, %mm0800; CHECK-NEXT:    movq %rdi, %mm1801; CHECK-NEXT:    pmulhrsw %mm0, %mm1802; CHECK-NEXT:    movq %mm1, %rax803; CHECK-NEXT:    #APP804; CHECK-NEXT:    nop805; CHECK-NEXT:    #NO_APP806; CHECK-NEXT:    retq807  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()808  %2 = call <1 x i64> @llvm.x86.ssse3.pmul.hr.sw(<1 x i64> %a, <1 x i64> %b) nounwind readnone809  ret <1 x i64> %2810}811declare <1 x i64> @llvm.x86.ssse3.pmul.hr.sw(<1 x i64>, <1 x i64>) nounwind readnone812 813define <1 x i64> @stack_fold_pmulhuw(<1 x i64> %a, <1 x i64> %b) {814; CHECK-LABEL: stack_fold_pmulhuw:815; CHECK:       # %bb.0:816; CHECK-NEXT:    movq %rsi, %mm0817; CHECK-NEXT:    movq %rdi, %mm1818; CHECK-NEXT:    pmulhuw %mm0, %mm1819; CHECK-NEXT:    movq %mm1, %rax820; CHECK-NEXT:    #APP821; CHECK-NEXT:    nop822; CHECK-NEXT:    #NO_APP823; CHECK-NEXT:    retq824  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()825  %2 = call <1 x i64> @llvm.x86.mmx.pmulhu.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone826  ret <1 x i64> %2827}828declare <1 x i64> @llvm.x86.mmx.pmulhu.w(<1 x i64>, <1 x i64>) nounwind readnone829 830define <1 x i64> @stack_fold_pmulhw(<1 x i64> %a, <1 x i64> %b) {831; CHECK-LABEL: stack_fold_pmulhw:832; CHECK:       # %bb.0:833; CHECK-NEXT:    movq %rsi, %mm0834; CHECK-NEXT:    movq %rdi, %mm1835; CHECK-NEXT:    pmulhw %mm0, %mm1836; CHECK-NEXT:    movq %mm1, %rax837; CHECK-NEXT:    #APP838; CHECK-NEXT:    nop839; CHECK-NEXT:    #NO_APP840; CHECK-NEXT:    retq841  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()842  %2 = call <1 x i64> @llvm.x86.mmx.pmulh.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone843  ret <1 x i64> %2844}845declare <1 x i64> @llvm.x86.mmx.pmulh.w(<1 x i64>, <1 x i64>) nounwind readnone846 847define <1 x i64> @stack_fold_pmullw(<1 x i64> %a, <1 x i64> %b) {848; CHECK-LABEL: stack_fold_pmullw:849; CHECK:       # %bb.0:850; CHECK-NEXT:    movq %rsi, %mm0851; CHECK-NEXT:    movq %rdi, %mm1852; CHECK-NEXT:    pmullw %mm0, %mm1853; CHECK-NEXT:    movq %mm1, %rax854; CHECK-NEXT:    #APP855; CHECK-NEXT:    nop856; CHECK-NEXT:    #NO_APP857; CHECK-NEXT:    retq858  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()859  %2 = call <1 x i64> @llvm.x86.mmx.pmull.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone860  ret <1 x i64> %2861}862declare <1 x i64> @llvm.x86.mmx.pmull.w(<1 x i64>, <1 x i64>) nounwind readnone863 864define <1 x i64> @stack_fold_pmuludq(<1 x i64> %a, <1 x i64> %b) {865; CHECK-LABEL: stack_fold_pmuludq:866; CHECK:       # %bb.0:867; CHECK-NEXT:    movq %rsi, %mm0868; CHECK-NEXT:    movq %rdi, %mm1869; CHECK-NEXT:    pmuludq %mm0, %mm1870; CHECK-NEXT:    movq %mm1, %rax871; CHECK-NEXT:    #APP872; CHECK-NEXT:    nop873; CHECK-NEXT:    #NO_APP874; CHECK-NEXT:    retq875  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()876  %2 = call <1 x i64> @llvm.x86.mmx.pmulu.dq(<1 x i64> %a, <1 x i64> %b) nounwind readnone877  ret <1 x i64> %2878}879declare <1 x i64> @llvm.x86.mmx.pmulu.dq(<1 x i64>, <1 x i64>) nounwind readnone880 881define <1 x i64> @stack_fold_por(<1 x i64> %a, <1 x i64> %b) {882; CHECK-LABEL: stack_fold_por:883; CHECK:       # %bb.0:884; CHECK-NEXT:    movq %rsi, %mm0885; CHECK-NEXT:    movq %rdi, %mm1886; CHECK-NEXT:    por %mm0, %mm1887; CHECK-NEXT:    movq %mm1, %rax888; CHECK-NEXT:    #APP889; CHECK-NEXT:    nop890; CHECK-NEXT:    #NO_APP891; CHECK-NEXT:    retq892  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()893  %2 = call <1 x i64> @llvm.x86.mmx.por(<1 x i64> %a, <1 x i64> %b) nounwind readnone894  ret <1 x i64> %2895}896declare <1 x i64> @llvm.x86.mmx.por(<1 x i64>, <1 x i64>) nounwind readnone897 898define <1 x i64> @stack_fold_psadbw(<1 x i64> %a, <1 x i64> %b) {899; CHECK-LABEL: stack_fold_psadbw:900; CHECK:       # %bb.0:901; CHECK-NEXT:    movq %rsi, %mm0902; CHECK-NEXT:    movq %rdi, %mm1903; CHECK-NEXT:    psadbw %mm0, %mm1904; CHECK-NEXT:    movq %mm1, %rax905; CHECK-NEXT:    #APP906; CHECK-NEXT:    nop907; CHECK-NEXT:    #NO_APP908; CHECK-NEXT:    retq909  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()910  %2 = call <1 x i64> @llvm.x86.mmx.psad.bw(<1 x i64> %a, <1 x i64> %b) nounwind readnone911  ret <1 x i64> %2912}913declare <1 x i64> @llvm.x86.mmx.psad.bw(<1 x i64>, <1 x i64>) nounwind readnone914 915define <1 x i64> @stack_fold_pshufb(<1 x i64> %a, <1 x i64> %b) {916; CHECK-LABEL: stack_fold_pshufb:917; CHECK:       # %bb.0:918; CHECK-NEXT:    movq %rsi, %mm0919; CHECK-NEXT:    movq %rdi, %mm1920; CHECK-NEXT:    pshufb %mm0, %mm1921; CHECK-NEXT:    movq %mm1, %rax922; CHECK-NEXT:    #APP923; CHECK-NEXT:    nop924; CHECK-NEXT:    #NO_APP925; CHECK-NEXT:    retq926  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()927  %2 = call <1 x i64> @llvm.x86.ssse3.pshuf.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone928  ret <1 x i64> %2929}930declare <1 x i64> @llvm.x86.ssse3.pshuf.b(<1 x i64>, <1 x i64>) nounwind readnone931 932define <1 x i64> @stack_fold_pshufw(<1 x i64> %a) {933; CHECK-LABEL: stack_fold_pshufw:934; CHECK:       # %bb.0:935; CHECK-NEXT:    movq %rdi, %mm0936; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill937; CHECK-NEXT:    #APP938; CHECK-NEXT:    nop939; CHECK-NEXT:    #NO_APP940; CHECK-NEXT:    pshufw $1, {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload941; CHECK-NEXT:    # mm0 = mem[1,0,0,0]942; CHECK-NEXT:    movq %mm0, %rax943; CHECK-NEXT:    retq944  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()945  %2 = call <1 x i64> @llvm.x86.sse.pshuf.w(<1 x i64> %a, i8 1) nounwind readnone946  ret <1 x i64> %2947}948declare <1 x i64> @llvm.x86.sse.pshuf.w(<1 x i64>, i8) nounwind readnone949 950define <1 x i64> @stack_fold_psignb(<1 x i64> %a0, <1 x i64> %a1) {951; CHECK-LABEL: stack_fold_psignb:952; CHECK:       # %bb.0:953; CHECK-NEXT:    movq %rsi, %mm0954; CHECK-NEXT:    movq %rdi, %mm1955; CHECK-NEXT:    psignb %mm0, %mm1956; CHECK-NEXT:    movq %mm1, %rax957; CHECK-NEXT:    #APP958; CHECK-NEXT:    nop959; CHECK-NEXT:    #NO_APP960; CHECK-NEXT:    retq961  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()962  %2 = call <1 x i64> @llvm.x86.ssse3.psign.b(<1 x i64> %a0, <1 x i64> %a1) nounwind readnone963  ret <1 x i64> %2964}965declare <1 x i64> @llvm.x86.ssse3.psign.b(<1 x i64>, <1 x i64>) nounwind readnone966 967define <1 x i64> @stack_fold_psignd(<1 x i64> %a0, <1 x i64> %a1) {968; CHECK-LABEL: stack_fold_psignd:969; CHECK:       # %bb.0:970; CHECK-NEXT:    movq %rsi, %mm0971; CHECK-NEXT:    movq %rdi, %mm1972; CHECK-NEXT:    psignd %mm0, %mm1973; CHECK-NEXT:    movq %mm1, %rax974; CHECK-NEXT:    #APP975; CHECK-NEXT:    nop976; CHECK-NEXT:    #NO_APP977; CHECK-NEXT:    retq978  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()979  %2 = call <1 x i64> @llvm.x86.ssse3.psign.d(<1 x i64> %a0, <1 x i64> %a1) nounwind readnone980  ret <1 x i64> %2981}982declare <1 x i64> @llvm.x86.ssse3.psign.d(<1 x i64>, <1 x i64>) nounwind readnone983 984define <1 x i64> @stack_fold_psignw(<1 x i64> %a0, <1 x i64> %a1) {985; CHECK-LABEL: stack_fold_psignw:986; CHECK:       # %bb.0:987; CHECK-NEXT:    movq %rsi, %mm0988; CHECK-NEXT:    movq %rdi, %mm1989; CHECK-NEXT:    psignw %mm0, %mm1990; CHECK-NEXT:    movq %mm1, %rax991; CHECK-NEXT:    #APP992; CHECK-NEXT:    nop993; CHECK-NEXT:    #NO_APP994; CHECK-NEXT:    retq995  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()996  %2 = call <1 x i64> @llvm.x86.ssse3.psign.w(<1 x i64> %a0, <1 x i64> %a1) nounwind readnone997  ret <1 x i64> %2998}999declare <1 x i64> @llvm.x86.ssse3.psign.w(<1 x i64>, <1 x i64>) nounwind readnone1000 1001define <1 x i64> @stack_fold_pslld(<1 x i64> %a, <1 x i64> %b) {1002; CHECK-LABEL: stack_fold_pslld:1003; CHECK:       # %bb.0:1004; CHECK-NEXT:    movq %rsi, %mm01005; CHECK-NEXT:    movq %rdi, %mm11006; CHECK-NEXT:    pslld %mm0, %mm11007; CHECK-NEXT:    movq %mm1, %rax1008; CHECK-NEXT:    #APP1009; CHECK-NEXT:    nop1010; CHECK-NEXT:    #NO_APP1011; CHECK-NEXT:    retq1012  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1013  %2 = call <1 x i64> @llvm.x86.mmx.psll.d(<1 x i64> %a, <1 x i64> %b) nounwind readnone1014  ret <1 x i64> %21015}1016declare <1 x i64> @llvm.x86.mmx.psll.d(<1 x i64>, <1 x i64>) nounwind readnone1017 1018define <1 x i64> @stack_fold_psllq(<1 x i64> %a, <1 x i64> %b) {1019; CHECK-LABEL: stack_fold_psllq:1020; CHECK:       # %bb.0:1021; CHECK-NEXT:    movq %rsi, %mm01022; CHECK-NEXT:    movq %rdi, %mm11023; CHECK-NEXT:    psllq %mm0, %mm11024; CHECK-NEXT:    movq %mm1, %rax1025; CHECK-NEXT:    #APP1026; CHECK-NEXT:    nop1027; CHECK-NEXT:    #NO_APP1028; CHECK-NEXT:    retq1029  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1030  %2 = call <1 x i64> @llvm.x86.mmx.psll.q(<1 x i64> %a, <1 x i64> %b) nounwind readnone1031  ret <1 x i64> %21032}1033declare <1 x i64> @llvm.x86.mmx.psll.q(<1 x i64>, <1 x i64>) nounwind readnone1034 1035define <1 x i64> @stack_fold_psllw(<1 x i64> %a, <1 x i64> %b) {1036; CHECK-LABEL: stack_fold_psllw:1037; CHECK:       # %bb.0:1038; CHECK-NEXT:    movq %rsi, %mm01039; CHECK-NEXT:    movq %rdi, %mm11040; CHECK-NEXT:    psllw %mm0, %mm11041; CHECK-NEXT:    movq %mm1, %rax1042; CHECK-NEXT:    #APP1043; CHECK-NEXT:    nop1044; CHECK-NEXT:    #NO_APP1045; CHECK-NEXT:    retq1046  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1047  %2 = call <1 x i64> @llvm.x86.mmx.psll.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone1048  ret <1 x i64> %21049}1050declare <1 x i64> @llvm.x86.mmx.psll.w(<1 x i64>, <1 x i64>) nounwind readnone1051 1052define <1 x i64> @stack_fold_psrad(<1 x i64> %a, <1 x i64> %b) {1053; CHECK-LABEL: stack_fold_psrad:1054; CHECK:       # %bb.0:1055; CHECK-NEXT:    movq %rsi, %mm01056; CHECK-NEXT:    movq %rdi, %mm11057; CHECK-NEXT:    psrad %mm0, %mm11058; CHECK-NEXT:    movq %mm1, %rax1059; CHECK-NEXT:    #APP1060; CHECK-NEXT:    nop1061; CHECK-NEXT:    #NO_APP1062; CHECK-NEXT:    retq1063  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1064  %2 = call <1 x i64> @llvm.x86.mmx.psra.d(<1 x i64> %a, <1 x i64> %b) nounwind readnone1065  ret <1 x i64> %21066}1067declare <1 x i64> @llvm.x86.mmx.psra.d(<1 x i64>, <1 x i64>) nounwind readnone1068 1069define <1 x i64> @stack_fold_psraw(<1 x i64> %a, <1 x i64> %b) {1070; CHECK-LABEL: stack_fold_psraw:1071; CHECK:       # %bb.0:1072; CHECK-NEXT:    movq %rsi, %mm01073; CHECK-NEXT:    movq %rdi, %mm11074; CHECK-NEXT:    psraw %mm0, %mm11075; CHECK-NEXT:    movq %mm1, %rax1076; CHECK-NEXT:    #APP1077; CHECK-NEXT:    nop1078; CHECK-NEXT:    #NO_APP1079; CHECK-NEXT:    retq1080  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1081  %2 = call <1 x i64> @llvm.x86.mmx.psra.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone1082  ret <1 x i64> %21083}1084declare <1 x i64> @llvm.x86.mmx.psra.w(<1 x i64>, <1 x i64>) nounwind readnone1085 1086define <1 x i64> @stack_fold_psrld(<1 x i64> %a, <1 x i64> %b) {1087; CHECK-LABEL: stack_fold_psrld:1088; CHECK:       # %bb.0:1089; CHECK-NEXT:    movq %rsi, %mm01090; CHECK-NEXT:    movq %rdi, %mm11091; CHECK-NEXT:    psrld %mm0, %mm11092; CHECK-NEXT:    movq %mm1, %rax1093; CHECK-NEXT:    #APP1094; CHECK-NEXT:    nop1095; CHECK-NEXT:    #NO_APP1096; CHECK-NEXT:    retq1097  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1098  %2 = call <1 x i64> @llvm.x86.mmx.psrl.d(<1 x i64> %a, <1 x i64> %b) nounwind readnone1099  ret <1 x i64> %21100}1101declare <1 x i64> @llvm.x86.mmx.psrl.d(<1 x i64>, <1 x i64>) nounwind readnone1102 1103define <1 x i64> @stack_fold_psrlq(<1 x i64> %a, <1 x i64> %b) {1104; CHECK-LABEL: stack_fold_psrlq:1105; CHECK:       # %bb.0:1106; CHECK-NEXT:    movq %rsi, %mm01107; CHECK-NEXT:    movq %rdi, %mm11108; CHECK-NEXT:    psrlq %mm0, %mm11109; CHECK-NEXT:    movq %mm1, %rax1110; CHECK-NEXT:    #APP1111; CHECK-NEXT:    nop1112; CHECK-NEXT:    #NO_APP1113; CHECK-NEXT:    retq1114  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1115  %2 = call <1 x i64> @llvm.x86.mmx.psrl.q(<1 x i64> %a, <1 x i64> %b) nounwind readnone1116  ret <1 x i64> %21117}1118declare <1 x i64> @llvm.x86.mmx.psrl.q(<1 x i64>, <1 x i64>) nounwind readnone1119 1120define <1 x i64> @stack_fold_psrlw(<1 x i64> %a, <1 x i64> %b) {1121; CHECK-LABEL: stack_fold_psrlw:1122; CHECK:       # %bb.0:1123; CHECK-NEXT:    movq %rsi, %mm01124; CHECK-NEXT:    movq %rdi, %mm11125; CHECK-NEXT:    psrlw %mm0, %mm11126; CHECK-NEXT:    movq %mm1, %rax1127; CHECK-NEXT:    #APP1128; CHECK-NEXT:    nop1129; CHECK-NEXT:    #NO_APP1130; CHECK-NEXT:    retq1131  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1132  %2 = call <1 x i64> @llvm.x86.mmx.psrl.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone1133  ret <1 x i64> %21134}1135declare <1 x i64> @llvm.x86.mmx.psrl.w(<1 x i64>, <1 x i64>) nounwind readnone1136 1137define <1 x i64> @stack_fold_psubb(<1 x i64> %a, <1 x i64> %b) {1138; CHECK-LABEL: stack_fold_psubb:1139; CHECK:       # %bb.0:1140; CHECK-NEXT:    movq %rsi, %mm01141; CHECK-NEXT:    movq %rdi, %mm11142; CHECK-NEXT:    psubb %mm0, %mm11143; CHECK-NEXT:    movq %mm1, %rax1144; CHECK-NEXT:    #APP1145; CHECK-NEXT:    nop1146; CHECK-NEXT:    #NO_APP1147; CHECK-NEXT:    retq1148  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1149  %2 = call <1 x i64> @llvm.x86.mmx.psub.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone1150  ret <1 x i64> %21151}1152declare <1 x i64> @llvm.x86.mmx.psub.b(<1 x i64>, <1 x i64>) nounwind readnone1153 1154define <1 x i64> @stack_fold_psubd(<1 x i64> %a, <1 x i64> %b) {1155; CHECK-LABEL: stack_fold_psubd:1156; CHECK:       # %bb.0:1157; CHECK-NEXT:    movq %rsi, %mm01158; CHECK-NEXT:    movq %rdi, %mm11159; CHECK-NEXT:    psubd %mm0, %mm11160; CHECK-NEXT:    movq %mm1, %rax1161; CHECK-NEXT:    #APP1162; CHECK-NEXT:    nop1163; CHECK-NEXT:    #NO_APP1164; CHECK-NEXT:    retq1165  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1166  %2 = call <1 x i64> @llvm.x86.mmx.psub.d(<1 x i64> %a, <1 x i64> %b) nounwind readnone1167  ret <1 x i64> %21168}1169declare <1 x i64> @llvm.x86.mmx.psub.d(<1 x i64>, <1 x i64>) nounwind readnone1170 1171define <1 x i64> @stack_fold_psubq(<1 x i64> %a, <1 x i64> %b) {1172; CHECK-LABEL: stack_fold_psubq:1173; CHECK:       # %bb.0:1174; CHECK-NEXT:    movq %rsi, %mm01175; CHECK-NEXT:    movq %rdi, %mm11176; CHECK-NEXT:    psubq %mm0, %mm11177; CHECK-NEXT:    movq %mm1, %rax1178; CHECK-NEXT:    #APP1179; CHECK-NEXT:    nop1180; CHECK-NEXT:    #NO_APP1181; CHECK-NEXT:    retq1182  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1183  %2 = call <1 x i64> @llvm.x86.mmx.psub.q(<1 x i64> %a, <1 x i64> %b) nounwind readnone1184  ret <1 x i64> %21185}1186declare <1 x i64> @llvm.x86.mmx.psub.q(<1 x i64>, <1 x i64>) nounwind readnone1187 1188define <1 x i64> @stack_fold_psubsb(<1 x i64> %a, <1 x i64> %b) {1189; CHECK-LABEL: stack_fold_psubsb:1190; CHECK:       # %bb.0:1191; CHECK-NEXT:    movq %rsi, %mm01192; CHECK-NEXT:    movq %rdi, %mm11193; CHECK-NEXT:    psubsb %mm0, %mm11194; CHECK-NEXT:    movq %mm1, %rax1195; CHECK-NEXT:    #APP1196; CHECK-NEXT:    nop1197; CHECK-NEXT:    #NO_APP1198; CHECK-NEXT:    retq1199  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1200  %2 = call <1 x i64> @llvm.x86.mmx.psubs.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone1201  ret <1 x i64> %21202}1203declare <1 x i64> @llvm.x86.mmx.psubs.b(<1 x i64>, <1 x i64>) nounwind readnone1204 1205define <1 x i64> @stack_fold_psubsw(<1 x i64> %a, <1 x i64> %b) {1206; CHECK-LABEL: stack_fold_psubsw:1207; CHECK:       # %bb.0:1208; CHECK-NEXT:    movq %rsi, %mm01209; CHECK-NEXT:    movq %rdi, %mm11210; CHECK-NEXT:    psubsw %mm0, %mm11211; CHECK-NEXT:    movq %mm1, %rax1212; CHECK-NEXT:    #APP1213; CHECK-NEXT:    nop1214; CHECK-NEXT:    #NO_APP1215; CHECK-NEXT:    retq1216  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1217  %2 = call <1 x i64> @llvm.x86.mmx.psubs.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone1218  ret <1 x i64> %21219}1220declare <1 x i64> @llvm.x86.mmx.psubs.w(<1 x i64>, <1 x i64>) nounwind readnone1221 1222define <1 x i64> @stack_fold_psubusb(<1 x i64> %a, <1 x i64> %b) {1223; CHECK-LABEL: stack_fold_psubusb:1224; CHECK:       # %bb.0:1225; CHECK-NEXT:    movq %rsi, %mm01226; CHECK-NEXT:    movq %rdi, %mm11227; CHECK-NEXT:    psubusb %mm0, %mm11228; CHECK-NEXT:    movq %mm1, %rax1229; CHECK-NEXT:    #APP1230; CHECK-NEXT:    nop1231; CHECK-NEXT:    #NO_APP1232; CHECK-NEXT:    retq1233  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1234  %2 = call <1 x i64> @llvm.x86.mmx.psubus.b(<1 x i64> %a, <1 x i64> %b) nounwind readnone1235  ret <1 x i64> %21236}1237declare <1 x i64> @llvm.x86.mmx.psubus.b(<1 x i64>, <1 x i64>) nounwind readnone1238 1239define <1 x i64> @stack_fold_psubusw(<1 x i64> %a, <1 x i64> %b) {1240; CHECK-LABEL: stack_fold_psubusw:1241; CHECK:       # %bb.0:1242; CHECK-NEXT:    movq %rsi, %mm01243; CHECK-NEXT:    movq %rdi, %mm11244; CHECK-NEXT:    psubusw %mm0, %mm11245; CHECK-NEXT:    movq %mm1, %rax1246; CHECK-NEXT:    #APP1247; CHECK-NEXT:    nop1248; CHECK-NEXT:    #NO_APP1249; CHECK-NEXT:    retq1250  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1251  %2 = call <1 x i64> @llvm.x86.mmx.psubus.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone1252  ret <1 x i64> %21253}1254declare <1 x i64> @llvm.x86.mmx.psubus.w(<1 x i64>, <1 x i64>) nounwind readnone1255 1256define <1 x i64> @stack_fold_psubw(<1 x i64> %a, <1 x i64> %b) {1257; CHECK-LABEL: stack_fold_psubw:1258; CHECK:       # %bb.0:1259; CHECK-NEXT:    movq %rsi, %mm01260; CHECK-NEXT:    movq %rdi, %mm11261; CHECK-NEXT:    psubw %mm0, %mm11262; CHECK-NEXT:    movq %mm1, %rax1263; CHECK-NEXT:    #APP1264; CHECK-NEXT:    nop1265; CHECK-NEXT:    #NO_APP1266; CHECK-NEXT:    retq1267  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1268  %2 = call <1 x i64> @llvm.x86.mmx.psub.w(<1 x i64> %a, <1 x i64> %b) nounwind readnone1269  ret <1 x i64> %21270}1271declare <1 x i64> @llvm.x86.mmx.psub.w(<1 x i64>, <1 x i64>) nounwind readnone1272 1273define <1 x i64> @stack_fold_punpckhbw(<1 x i64> %a, <1 x i64> %b) {1274; CHECK-LABEL: stack_fold_punpckhbw:1275; CHECK:       # %bb.0:1276; CHECK-NEXT:    movq %rsi, %mm01277; CHECK-NEXT:    movq %rdi, %mm11278; CHECK-NEXT:    punpckhbw %mm0, %mm1 # mm1 = mm1[4],mm0[4],mm1[5],mm0[5],mm1[6],mm0[6],mm1[7],mm0[7]1279; CHECK-NEXT:    movq %mm1, %rax1280; CHECK-NEXT:    #APP1281; CHECK-NEXT:    nop1282; CHECK-NEXT:    #NO_APP1283; CHECK-NEXT:    retq1284  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1285  %2 = call <1 x i64> @llvm.x86.mmx.punpckhbw(<1 x i64> %a, <1 x i64> %b) nounwind readnone1286  ret <1 x i64> %21287}1288declare <1 x i64> @llvm.x86.mmx.punpckhbw(<1 x i64>, <1 x i64>) nounwind readnone1289 1290define <1 x i64> @stack_fold_punpckhdq(<1 x i64> %a, <1 x i64> %b) {1291; CHECK-LABEL: stack_fold_punpckhdq:1292; CHECK:       # %bb.0:1293; CHECK-NEXT:    movq %rsi, %mm01294; CHECK-NEXT:    movq %rdi, %mm11295; CHECK-NEXT:    punpckhdq %mm0, %mm1 # mm1 = mm1[1],mm0[1]1296; CHECK-NEXT:    movq %mm1, %rax1297; CHECK-NEXT:    #APP1298; CHECK-NEXT:    nop1299; CHECK-NEXT:    #NO_APP1300; CHECK-NEXT:    retq1301  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1302  %2 = call <1 x i64> @llvm.x86.mmx.punpckhdq(<1 x i64> %a, <1 x i64> %b) nounwind readnone1303  ret <1 x i64> %21304}1305declare <1 x i64> @llvm.x86.mmx.punpckhdq(<1 x i64>, <1 x i64>) nounwind readnone1306 1307define <1 x i64> @stack_fold_punpckhwd(<1 x i64> %a, <1 x i64> %b) {1308; CHECK-LABEL: stack_fold_punpckhwd:1309; CHECK:       # %bb.0:1310; CHECK-NEXT:    movq %rsi, %mm01311; CHECK-NEXT:    movq %rdi, %mm11312; CHECK-NEXT:    punpckhwd %mm0, %mm1 # mm1 = mm1[2],mm0[2],mm1[3],mm0[3]1313; CHECK-NEXT:    movq %mm1, %rax1314; CHECK-NEXT:    #APP1315; CHECK-NEXT:    nop1316; CHECK-NEXT:    #NO_APP1317; CHECK-NEXT:    retq1318  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1319  %2 = call <1 x i64> @llvm.x86.mmx.punpckhwd(<1 x i64> %a, <1 x i64> %b) nounwind readnone1320  ret <1 x i64> %21321}1322declare <1 x i64> @llvm.x86.mmx.punpckhwd(<1 x i64>, <1 x i64>) nounwind readnone1323 1324define <1 x i64> @stack_fold_punpcklbw(<1 x i64> %a, <1 x i64> %b) {1325; CHECK-LABEL: stack_fold_punpcklbw:1326; CHECK:       # %bb.0:1327; CHECK-NEXT:    movq %rsi, %mm01328; CHECK-NEXT:    movq %rdi, %mm11329; CHECK-NEXT:    punpcklbw %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1],mm1[2],mm0[2],mm1[3],mm0[3]1330; CHECK-NEXT:    movq %mm1, %rax1331; CHECK-NEXT:    #APP1332; CHECK-NEXT:    nop1333; CHECK-NEXT:    #NO_APP1334; CHECK-NEXT:    retq1335  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1336  %2 = call <1 x i64> @llvm.x86.mmx.punpcklbw(<1 x i64> %a, <1 x i64> %b) nounwind readnone1337  ret <1 x i64> %21338}1339declare <1 x i64> @llvm.x86.mmx.punpcklbw(<1 x i64>, <1 x i64>) nounwind readnone1340 1341define <1 x i64> @stack_fold_punpckldq(<1 x i64> %a, <1 x i64> %b) {1342; CHECK-LABEL: stack_fold_punpckldq:1343; CHECK:       # %bb.0:1344; CHECK-NEXT:    movq %rsi, %mm01345; CHECK-NEXT:    movq %rdi, %mm11346; CHECK-NEXT:    punpckldq %mm0, %mm1 # mm1 = mm1[0],mm0[0]1347; CHECK-NEXT:    movq %mm1, %rax1348; CHECK-NEXT:    #APP1349; CHECK-NEXT:    nop1350; CHECK-NEXT:    #NO_APP1351; CHECK-NEXT:    retq1352  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1353  %2 = call <1 x i64> @llvm.x86.mmx.punpckldq(<1 x i64> %a, <1 x i64> %b) nounwind readnone1354  ret <1 x i64> %21355}1356declare <1 x i64> @llvm.x86.mmx.punpckldq(<1 x i64>, <1 x i64>) nounwind readnone1357 1358define <1 x i64> @stack_fold_punpcklwd(<1 x i64> %a, <1 x i64> %b) {1359; CHECK-LABEL: stack_fold_punpcklwd:1360; CHECK:       # %bb.0:1361; CHECK-NEXT:    movq %rsi, %mm01362; CHECK-NEXT:    movq %rdi, %mm11363; CHECK-NEXT:    punpcklwd %mm0, %mm1 # mm1 = mm1[0],mm0[0],mm1[1],mm0[1]1364; CHECK-NEXT:    movq %mm1, %rax1365; CHECK-NEXT:    #APP1366; CHECK-NEXT:    nop1367; CHECK-NEXT:    #NO_APP1368; CHECK-NEXT:    retq1369  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1370  %2 = call <1 x i64> @llvm.x86.mmx.punpcklwd(<1 x i64> %a, <1 x i64> %b) nounwind readnone1371  ret <1 x i64> %21372}1373declare <1 x i64> @llvm.x86.mmx.punpcklwd(<1 x i64>, <1 x i64>) nounwind readnone1374 1375define <1 x i64> @stack_fold_pxor(<1 x i64> %a, <1 x i64> %b) {1376; CHECK-LABEL: stack_fold_pxor:1377; CHECK:       # %bb.0:1378; CHECK-NEXT:    movq %rsi, %mm01379; CHECK-NEXT:    movq %rdi, %mm11380; CHECK-NEXT:    pxor %mm0, %mm11381; CHECK-NEXT:    movq %mm1, %rax1382; CHECK-NEXT:    #APP1383; CHECK-NEXT:    nop1384; CHECK-NEXT:    #NO_APP1385; CHECK-NEXT:    retq1386  %1 = tail call <1 x i64> asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()1387  %2 = call <1 x i64> @llvm.x86.mmx.pxor(<1 x i64> %a, <1 x i64> %b) nounwind readnone1388  ret <1 x i64> %21389}1390declare <1 x i64> @llvm.x86.mmx.pxor(<1 x i64>, <1 x i64>) nounwind readnone1391