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