2487 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+sse4.2,+aes,+crc32,+pclmul < %s | FileCheck %s3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-unknown"6 7; Stack reload folding tests.8;9; By including a nop call with sideeffects we can force a partial register spill of the10; relevant registers and check that the reload is correctly folded into the instruction.11 12define <2 x i64> @stack_fold_aesdec(<2 x i64> %a0, <2 x i64> %a1) {13; CHECK-LABEL: stack_fold_aesdec:14; CHECK: # %bb.0:15; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill16; CHECK-NEXT: #APP17; CHECK-NEXT: nop18; CHECK-NEXT: #NO_APP19; CHECK-NEXT: aesdec {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload20; CHECK-NEXT: retq21 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()22 %2 = call <2 x i64> @llvm.x86.aesni.aesdec(<2 x i64> %a0, <2 x i64> %a1)23 ret <2 x i64> %224}25declare <2 x i64> @llvm.x86.aesni.aesdec(<2 x i64>, <2 x i64>) nounwind readnone26 27define <2 x i64> @stack_fold_aesdeclast(<2 x i64> %a0, <2 x i64> %a1) {28; CHECK-LABEL: stack_fold_aesdeclast:29; CHECK: # %bb.0:30; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill31; CHECK-NEXT: #APP32; CHECK-NEXT: nop33; CHECK-NEXT: #NO_APP34; CHECK-NEXT: aesdeclast {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload35; CHECK-NEXT: retq36 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()37 %2 = call <2 x i64> @llvm.x86.aesni.aesdeclast(<2 x i64> %a0, <2 x i64> %a1)38 ret <2 x i64> %239}40declare <2 x i64> @llvm.x86.aesni.aesdeclast(<2 x i64>, <2 x i64>) nounwind readnone41 42define <2 x i64> @stack_fold_aesenc(<2 x i64> %a0, <2 x i64> %a1) {43; CHECK-LABEL: stack_fold_aesenc:44; CHECK: # %bb.0:45; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill46; CHECK-NEXT: #APP47; CHECK-NEXT: nop48; CHECK-NEXT: #NO_APP49; CHECK-NEXT: aesenc {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload50; CHECK-NEXT: retq51 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()52 %2 = call <2 x i64> @llvm.x86.aesni.aesenc(<2 x i64> %a0, <2 x i64> %a1)53 ret <2 x i64> %254}55declare <2 x i64> @llvm.x86.aesni.aesenc(<2 x i64>, <2 x i64>) nounwind readnone56 57define <2 x i64> @stack_fold_aesenclast(<2 x i64> %a0, <2 x i64> %a1) {58; CHECK-LABEL: stack_fold_aesenclast:59; CHECK: # %bb.0:60; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill61; CHECK-NEXT: #APP62; CHECK-NEXT: nop63; CHECK-NEXT: #NO_APP64; CHECK-NEXT: aesenclast {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload65; CHECK-NEXT: retq66 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()67 %2 = call <2 x i64> @llvm.x86.aesni.aesenclast(<2 x i64> %a0, <2 x i64> %a1)68 ret <2 x i64> %269}70declare <2 x i64> @llvm.x86.aesni.aesenclast(<2 x i64>, <2 x i64>) nounwind readnone71 72define <2 x i64> @stack_fold_aesimc(<2 x i64> %a0) {73; CHECK-LABEL: stack_fold_aesimc:74; CHECK: # %bb.0:75; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill76; CHECK-NEXT: #APP77; CHECK-NEXT: nop78; CHECK-NEXT: #NO_APP79; CHECK-NEXT: aesimc {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload80; CHECK-NEXT: retq81 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()82 %2 = call <2 x i64> @llvm.x86.aesni.aesimc(<2 x i64> %a0)83 ret <2 x i64> %284}85declare <2 x i64> @llvm.x86.aesni.aesimc(<2 x i64>) nounwind readnone86 87define <2 x i64> @stack_fold_aeskeygenassist(<2 x i64> %a0) {88; CHECK-LABEL: stack_fold_aeskeygenassist:89; CHECK: # %bb.0:90; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill91; CHECK-NEXT: #APP92; CHECK-NEXT: nop93; CHECK-NEXT: #NO_APP94; CHECK-NEXT: aeskeygenassist $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload95; CHECK-NEXT: retq96 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()97 %2 = call <2 x i64> @llvm.x86.aesni.aeskeygenassist(<2 x i64> %a0, i8 7)98 ret <2 x i64> %299}100declare <2 x i64> @llvm.x86.aesni.aeskeygenassist(<2 x i64>, i8) nounwind readnone101 102define i32 @stack_fold_crc32_32_8(i32 %a0, i8 %a1) {103; CHECK-LABEL: stack_fold_crc32_32_8:104; CHECK: # %bb.0:105; CHECK-NEXT: pushq %rbp106; CHECK-NEXT: .cfi_def_cfa_offset 16107; CHECK-NEXT: pushq %r15108; CHECK-NEXT: .cfi_def_cfa_offset 24109; CHECK-NEXT: pushq %r14110; CHECK-NEXT: .cfi_def_cfa_offset 32111; CHECK-NEXT: pushq %r13112; CHECK-NEXT: .cfi_def_cfa_offset 40113; CHECK-NEXT: pushq %r12114; CHECK-NEXT: .cfi_def_cfa_offset 48115; CHECK-NEXT: pushq %rbx116; CHECK-NEXT: .cfi_def_cfa_offset 56117; CHECK-NEXT: .cfi_offset %rbx, -56118; CHECK-NEXT: .cfi_offset %r12, -48119; CHECK-NEXT: .cfi_offset %r13, -40120; CHECK-NEXT: .cfi_offset %r14, -32121; CHECK-NEXT: .cfi_offset %r15, -24122; CHECK-NEXT: .cfi_offset %rbp, -16123; CHECK-NEXT: movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill124; CHECK-NEXT: movl %edi, %eax125; CHECK-NEXT: #APP126; CHECK-NEXT: nop127; CHECK-NEXT: #NO_APP128; CHECK-NEXT: crc32b {{[-0-9]+}}(%r{{[sb]}}p), %eax # 1-byte Folded Reload129; CHECK-NEXT: popq %rbx130; CHECK-NEXT: .cfi_def_cfa_offset 48131; CHECK-NEXT: popq %r12132; CHECK-NEXT: .cfi_def_cfa_offset 40133; CHECK-NEXT: popq %r13134; CHECK-NEXT: .cfi_def_cfa_offset 32135; CHECK-NEXT: popq %r14136; CHECK-NEXT: .cfi_def_cfa_offset 24137; CHECK-NEXT: popq %r15138; CHECK-NEXT: .cfi_def_cfa_offset 16139; CHECK-NEXT: popq %rbp140; CHECK-NEXT: .cfi_def_cfa_offset 8141; CHECK-NEXT: retq142 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()143 %2 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %a0, i8 %a1)144 ret i32 %2145}146declare i32 @llvm.x86.sse42.crc32.32.8(i32, i8) nounwind147 148define i32 @stack_fold_crc32_32_16(i32 %a0, i16 %a1) {149; CHECK-LABEL: stack_fold_crc32_32_16:150; CHECK: # %bb.0:151; CHECK-NEXT: pushq %rbp152; CHECK-NEXT: .cfi_def_cfa_offset 16153; CHECK-NEXT: pushq %r15154; CHECK-NEXT: .cfi_def_cfa_offset 24155; CHECK-NEXT: pushq %r14156; CHECK-NEXT: .cfi_def_cfa_offset 32157; CHECK-NEXT: pushq %r13158; CHECK-NEXT: .cfi_def_cfa_offset 40159; CHECK-NEXT: pushq %r12160; CHECK-NEXT: .cfi_def_cfa_offset 48161; CHECK-NEXT: pushq %rbx162; CHECK-NEXT: .cfi_def_cfa_offset 56163; CHECK-NEXT: .cfi_offset %rbx, -56164; CHECK-NEXT: .cfi_offset %r12, -48165; CHECK-NEXT: .cfi_offset %r13, -40166; CHECK-NEXT: .cfi_offset %r14, -32167; CHECK-NEXT: .cfi_offset %r15, -24168; CHECK-NEXT: .cfi_offset %rbp, -16169; CHECK-NEXT: movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill170; CHECK-NEXT: movl %edi, %eax171; CHECK-NEXT: #APP172; CHECK-NEXT: nop173; CHECK-NEXT: #NO_APP174; CHECK-NEXT: crc32w {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload175; CHECK-NEXT: popq %rbx176; CHECK-NEXT: .cfi_def_cfa_offset 48177; CHECK-NEXT: popq %r12178; CHECK-NEXT: .cfi_def_cfa_offset 40179; CHECK-NEXT: popq %r13180; CHECK-NEXT: .cfi_def_cfa_offset 32181; CHECK-NEXT: popq %r14182; CHECK-NEXT: .cfi_def_cfa_offset 24183; CHECK-NEXT: popq %r15184; CHECK-NEXT: .cfi_def_cfa_offset 16185; CHECK-NEXT: popq %rbp186; CHECK-NEXT: .cfi_def_cfa_offset 8187; CHECK-NEXT: retq188 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()189 %2 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %a0, i16 %a1)190 ret i32 %2191}192declare i32 @llvm.x86.sse42.crc32.32.16(i32, i16) nounwind193 194define i32 @stack_fold_crc32_32_32(i32 %a0, i32 %a1) {195; CHECK-LABEL: stack_fold_crc32_32_32:196; CHECK: # %bb.0:197; CHECK-NEXT: pushq %rbp198; CHECK-NEXT: .cfi_def_cfa_offset 16199; CHECK-NEXT: pushq %r15200; CHECK-NEXT: .cfi_def_cfa_offset 24201; CHECK-NEXT: pushq %r14202; CHECK-NEXT: .cfi_def_cfa_offset 32203; CHECK-NEXT: pushq %r13204; CHECK-NEXT: .cfi_def_cfa_offset 40205; CHECK-NEXT: pushq %r12206; CHECK-NEXT: .cfi_def_cfa_offset 48207; CHECK-NEXT: pushq %rbx208; CHECK-NEXT: .cfi_def_cfa_offset 56209; CHECK-NEXT: .cfi_offset %rbx, -56210; CHECK-NEXT: .cfi_offset %r12, -48211; CHECK-NEXT: .cfi_offset %r13, -40212; CHECK-NEXT: .cfi_offset %r14, -32213; CHECK-NEXT: .cfi_offset %r15, -24214; CHECK-NEXT: .cfi_offset %rbp, -16215; CHECK-NEXT: movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill216; CHECK-NEXT: movl %edi, %eax217; CHECK-NEXT: #APP218; CHECK-NEXT: nop219; CHECK-NEXT: #NO_APP220; CHECK-NEXT: crc32l {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Folded Reload221; CHECK-NEXT: popq %rbx222; CHECK-NEXT: .cfi_def_cfa_offset 48223; CHECK-NEXT: popq %r12224; CHECK-NEXT: .cfi_def_cfa_offset 40225; CHECK-NEXT: popq %r13226; CHECK-NEXT: .cfi_def_cfa_offset 32227; CHECK-NEXT: popq %r14228; CHECK-NEXT: .cfi_def_cfa_offset 24229; CHECK-NEXT: popq %r15230; CHECK-NEXT: .cfi_def_cfa_offset 16231; CHECK-NEXT: popq %rbp232; CHECK-NEXT: .cfi_def_cfa_offset 8233; CHECK-NEXT: retq234 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()235 %2 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %a0, i32 %a1)236 ret i32 %2237}238declare i32 @llvm.x86.sse42.crc32.32.32(i32, i32) nounwind239 240define i64 @stack_fold_crc32_64_64(i64 %a0, i64 %a1) {241; CHECK-LABEL: stack_fold_crc32_64_64:242; CHECK: # %bb.0:243; CHECK-NEXT: pushq %rbp244; CHECK-NEXT: .cfi_def_cfa_offset 16245; CHECK-NEXT: pushq %r15246; CHECK-NEXT: .cfi_def_cfa_offset 24247; CHECK-NEXT: pushq %r14248; CHECK-NEXT: .cfi_def_cfa_offset 32249; CHECK-NEXT: pushq %r13250; CHECK-NEXT: .cfi_def_cfa_offset 40251; CHECK-NEXT: pushq %r12252; CHECK-NEXT: .cfi_def_cfa_offset 48253; CHECK-NEXT: pushq %rbx254; CHECK-NEXT: .cfi_def_cfa_offset 56255; CHECK-NEXT: .cfi_offset %rbx, -56256; CHECK-NEXT: .cfi_offset %r12, -48257; CHECK-NEXT: .cfi_offset %r13, -40258; CHECK-NEXT: .cfi_offset %r14, -32259; CHECK-NEXT: .cfi_offset %r15, -24260; CHECK-NEXT: .cfi_offset %rbp, -16261; CHECK-NEXT: movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill262; CHECK-NEXT: movq %rdi, %rax263; CHECK-NEXT: #APP264; CHECK-NEXT: nop265; CHECK-NEXT: #NO_APP266; CHECK-NEXT: crc32q {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Folded Reload267; CHECK-NEXT: popq %rbx268; CHECK-NEXT: .cfi_def_cfa_offset 48269; CHECK-NEXT: popq %r12270; CHECK-NEXT: .cfi_def_cfa_offset 40271; CHECK-NEXT: popq %r13272; CHECK-NEXT: .cfi_def_cfa_offset 32273; CHECK-NEXT: popq %r14274; CHECK-NEXT: .cfi_def_cfa_offset 24275; CHECK-NEXT: popq %r15276; CHECK-NEXT: .cfi_def_cfa_offset 16277; CHECK-NEXT: popq %rbp278; CHECK-NEXT: .cfi_def_cfa_offset 8279; CHECK-NEXT: retq280 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()281 %2 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %a0, i64 %a1)282 ret i64 %2283}284declare i64 @llvm.x86.sse42.crc32.64.64(i64, i64) nounwind285 286define <4 x i32> @stack_fold_movd_load(i32 %a0) {287; CHECK-LABEL: stack_fold_movd_load:288; CHECK: # %bb.0:289; CHECK-NEXT: pushq %rbp290; CHECK-NEXT: .cfi_def_cfa_offset 16291; CHECK-NEXT: pushq %r15292; CHECK-NEXT: .cfi_def_cfa_offset 24293; CHECK-NEXT: pushq %r14294; CHECK-NEXT: .cfi_def_cfa_offset 32295; CHECK-NEXT: pushq %r13296; CHECK-NEXT: .cfi_def_cfa_offset 40297; CHECK-NEXT: pushq %r12298; CHECK-NEXT: .cfi_def_cfa_offset 48299; CHECK-NEXT: pushq %rbx300; CHECK-NEXT: .cfi_def_cfa_offset 56301; CHECK-NEXT: .cfi_offset %rbx, -56302; CHECK-NEXT: .cfi_offset %r12, -48303; CHECK-NEXT: .cfi_offset %r13, -40304; CHECK-NEXT: .cfi_offset %r14, -32305; CHECK-NEXT: .cfi_offset %r15, -24306; CHECK-NEXT: .cfi_offset %rbp, -16307; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill308; CHECK-NEXT: #APP309; CHECK-NEXT: nop310; CHECK-NEXT: #NO_APP311; CHECK-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload312; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero313; CHECK-NEXT: pcmpeqd %xmm1, %xmm1314; CHECK-NEXT: psubd %xmm1, %xmm0315; CHECK-NEXT: popq %rbx316; CHECK-NEXT: .cfi_def_cfa_offset 48317; CHECK-NEXT: popq %r12318; CHECK-NEXT: .cfi_def_cfa_offset 40319; CHECK-NEXT: popq %r13320; CHECK-NEXT: .cfi_def_cfa_offset 32321; CHECK-NEXT: popq %r14322; CHECK-NEXT: .cfi_def_cfa_offset 24323; CHECK-NEXT: popq %r15324; CHECK-NEXT: .cfi_def_cfa_offset 16325; CHECK-NEXT: popq %rbp326; CHECK-NEXT: .cfi_def_cfa_offset 8327; CHECK-NEXT: retq328 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()329 %2 = insertelement <4 x i32> zeroinitializer, i32 %a0, i32 0330 ; add forces execution domain331 %3 = add <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>332 ret <4 x i32> %3333}334 335define i32 @stack_fold_movd_store(<4 x i32> %a0, <4 x i32> %a1) {336; CHECK-LABEL: stack_fold_movd_store:337; CHECK: # %bb.0:338; CHECK-NEXT: pushq %rbp339; CHECK-NEXT: .cfi_def_cfa_offset 16340; CHECK-NEXT: pushq %r15341; CHECK-NEXT: .cfi_def_cfa_offset 24342; CHECK-NEXT: pushq %r14343; CHECK-NEXT: .cfi_def_cfa_offset 32344; CHECK-NEXT: pushq %r13345; CHECK-NEXT: .cfi_def_cfa_offset 40346; CHECK-NEXT: pushq %r12347; CHECK-NEXT: .cfi_def_cfa_offset 48348; CHECK-NEXT: pushq %rbx349; CHECK-NEXT: .cfi_def_cfa_offset 56350; CHECK-NEXT: .cfi_offset %rbx, -56351; CHECK-NEXT: .cfi_offset %r12, -48352; CHECK-NEXT: .cfi_offset %r13, -40353; CHECK-NEXT: .cfi_offset %r14, -32354; CHECK-NEXT: .cfi_offset %r15, -24355; CHECK-NEXT: .cfi_offset %rbp, -16356; CHECK-NEXT: paddd %xmm1, %xmm0357; CHECK-NEXT: movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill358; CHECK-NEXT: #APP359; CHECK-NEXT: nop360; CHECK-NEXT: #NO_APP361; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload362; CHECK-NEXT: popq %rbx363; CHECK-NEXT: .cfi_def_cfa_offset 48364; CHECK-NEXT: popq %r12365; CHECK-NEXT: .cfi_def_cfa_offset 40366; CHECK-NEXT: popq %r13367; CHECK-NEXT: .cfi_def_cfa_offset 32368; CHECK-NEXT: popq %r14369; CHECK-NEXT: .cfi_def_cfa_offset 24370; CHECK-NEXT: popq %r15371; CHECK-NEXT: .cfi_def_cfa_offset 16372; CHECK-NEXT: popq %rbp373; CHECK-NEXT: .cfi_def_cfa_offset 8374; CHECK-NEXT: retq375 ; add forces execution domain376 %1 = add <4 x i32> %a0, %a1377 %2 = extractelement <4 x i32> %1, i32 0378 %3 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()379 ret i32 %2380}381 382define <2 x i64> @stack_fold_movq_load(<2 x i64> %a0) {383; CHECK-LABEL: stack_fold_movq_load:384; CHECK: # %bb.0:385; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill386; CHECK-NEXT: #APP387; CHECK-NEXT: nop388; CHECK-NEXT: #NO_APP389; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload390; CHECK-NEXT: # xmm0 = mem[0],zero391; CHECK-NEXT: pcmpeqd %xmm1, %xmm1392; CHECK-NEXT: psubq %xmm1, %xmm0393; CHECK-NEXT: retq394 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()395 %2 = shufflevector <2 x i64> %a0, <2 x i64> zeroinitializer, <2 x i32> <i32 0, i32 2>396 ; add forces execution domain397 %3 = add <2 x i64> %2, <i64 1, i64 1>398 ret <2 x i64> %3399}400 401define i64 @stack_fold_movq_store(<2 x i64> %a0, <2 x i64> %a1) {402; CHECK-LABEL: stack_fold_movq_store:403; CHECK: # %bb.0:404; CHECK-NEXT: pushq %rbp405; CHECK-NEXT: .cfi_def_cfa_offset 16406; CHECK-NEXT: pushq %r15407; CHECK-NEXT: .cfi_def_cfa_offset 24408; CHECK-NEXT: pushq %r14409; CHECK-NEXT: .cfi_def_cfa_offset 32410; CHECK-NEXT: pushq %r13411; CHECK-NEXT: .cfi_def_cfa_offset 40412; CHECK-NEXT: pushq %r12413; CHECK-NEXT: .cfi_def_cfa_offset 48414; CHECK-NEXT: pushq %rbx415; CHECK-NEXT: .cfi_def_cfa_offset 56416; CHECK-NEXT: .cfi_offset %rbx, -56417; CHECK-NEXT: .cfi_offset %r12, -48418; CHECK-NEXT: .cfi_offset %r13, -40419; CHECK-NEXT: .cfi_offset %r14, -32420; CHECK-NEXT: .cfi_offset %r15, -24421; CHECK-NEXT: .cfi_offset %rbp, -16422; CHECK-NEXT: paddq %xmm1, %xmm0423; CHECK-NEXT: movq %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill424; CHECK-NEXT: #APP425; CHECK-NEXT: nop426; CHECK-NEXT: #NO_APP427; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload428; CHECK-NEXT: popq %rbx429; CHECK-NEXT: .cfi_def_cfa_offset 48430; CHECK-NEXT: popq %r12431; CHECK-NEXT: .cfi_def_cfa_offset 40432; CHECK-NEXT: popq %r13433; CHECK-NEXT: .cfi_def_cfa_offset 32434; CHECK-NEXT: popq %r14435; CHECK-NEXT: .cfi_def_cfa_offset 24436; CHECK-NEXT: popq %r15437; CHECK-NEXT: .cfi_def_cfa_offset 16438; CHECK-NEXT: popq %rbp439; CHECK-NEXT: .cfi_def_cfa_offset 8440; CHECK-NEXT: retq441 ; add forces execution domain442 %1 = add <2 x i64> %a0, %a1443 %2 = extractelement <2 x i64> %1, i32 0444 %3 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()445 ret i64 %2446}447 448define <8 x i16> @stack_fold_mpsadbw(<16 x i8> %a0, <16 x i8> %a1) {449; CHECK-LABEL: stack_fold_mpsadbw:450; CHECK: # %bb.0:451; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill452; CHECK-NEXT: #APP453; CHECK-NEXT: nop454; CHECK-NEXT: #NO_APP455; CHECK-NEXT: mpsadbw $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload456; CHECK-NEXT: retq457 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()458 %2 = call <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8> %a0, <16 x i8> %a1, i8 7)459 ret <8 x i16> %2460}461declare <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8>, <16 x i8>, i8) nounwind readnone462 463define <16 x i8> @stack_fold_pabsb(<16 x i8> %a0) {464; CHECK-LABEL: stack_fold_pabsb:465; CHECK: # %bb.0:466; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill467; CHECK-NEXT: #APP468; CHECK-NEXT: nop469; CHECK-NEXT: #NO_APP470; CHECK-NEXT: pabsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload471; CHECK-NEXT: retq472 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()473 %2 = icmp sgt <16 x i8> %a0, zeroinitializer474 %3 = sub <16 x i8> zeroinitializer, %a0475 %4 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %3476 ret <16 x i8> %4477}478 479define <4 x i32> @stack_fold_pabsd(<4 x i32> %a0) {480; CHECK-LABEL: stack_fold_pabsd:481; CHECK: # %bb.0:482; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill483; CHECK-NEXT: #APP484; CHECK-NEXT: nop485; CHECK-NEXT: #NO_APP486; CHECK-NEXT: pabsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload487; CHECK-NEXT: retq488 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()489 %2 = icmp sgt <4 x i32> %a0, zeroinitializer490 %3 = sub <4 x i32> zeroinitializer, %a0491 %4 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %3492 ret <4 x i32> %4493}494 495define <8 x i16> @stack_fold_pabsw(<8 x i16> %a0) {496; CHECK-LABEL: stack_fold_pabsw:497; CHECK: # %bb.0:498; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill499; CHECK-NEXT: #APP500; CHECK-NEXT: nop501; CHECK-NEXT: #NO_APP502; CHECK-NEXT: pabsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload503; CHECK-NEXT: retq504 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()505 %2 = icmp sgt <8 x i16> %a0, zeroinitializer506 %3 = sub <8 x i16> zeroinitializer, %a0507 %4 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %3508 ret <8 x i16> %4509}510 511define <8 x i16> @stack_fold_packssdw(<4 x i32> %a0, <4 x i32> %a1) {512; CHECK-LABEL: stack_fold_packssdw:513; CHECK: # %bb.0:514; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill515; CHECK-NEXT: #APP516; CHECK-NEXT: nop517; CHECK-NEXT: #NO_APP518; CHECK-NEXT: packssdw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload519; CHECK-NEXT: retq520 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()521 %2 = call <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32> %a0, <4 x i32> %a1)522 ret <8 x i16> %2523}524declare <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32>, <4 x i32>) nounwind readnone525 526define <16 x i8> @stack_fold_packsswb(<8 x i16> %a0, <8 x i16> %a1) {527; CHECK-LABEL: stack_fold_packsswb:528; CHECK: # %bb.0:529; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill530; CHECK-NEXT: #APP531; CHECK-NEXT: nop532; CHECK-NEXT: #NO_APP533; CHECK-NEXT: packsswb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload534; CHECK-NEXT: retq535 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()536 %2 = call <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16> %a0, <8 x i16> %a1)537 ret <16 x i8> %2538}539declare <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16>, <8 x i16>) nounwind readnone540 541define <8 x i16> @stack_fold_packusdw(<4 x i32> %a0, <4 x i32> %a1) {542; CHECK-LABEL: stack_fold_packusdw:543; CHECK: # %bb.0:544; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill545; CHECK-NEXT: #APP546; CHECK-NEXT: nop547; CHECK-NEXT: #NO_APP548; CHECK-NEXT: packusdw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload549; CHECK-NEXT: retq550 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()551 %2 = call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %a0, <4 x i32> %a1)552 ret <8 x i16> %2553}554declare <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32>, <4 x i32>) nounwind readnone555 556define <16 x i8> @stack_fold_packuswb(<8 x i16> %a0, <8 x i16> %a1) {557; CHECK-LABEL: stack_fold_packuswb:558; CHECK: # %bb.0:559; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill560; CHECK-NEXT: #APP561; CHECK-NEXT: nop562; CHECK-NEXT: #NO_APP563; CHECK-NEXT: packuswb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload564; CHECK-NEXT: retq565 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()566 %2 = call <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16> %a0, <8 x i16> %a1)567 ret <16 x i8> %2568}569declare <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16>, <8 x i16>) nounwind readnone570 571define <16 x i8> @stack_fold_paddb(<16 x i8> %a0, <16 x i8> %a1) {572; CHECK-LABEL: stack_fold_paddb:573; CHECK: # %bb.0:574; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill575; CHECK-NEXT: #APP576; CHECK-NEXT: nop577; CHECK-NEXT: #NO_APP578; CHECK-NEXT: paddb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload579; CHECK-NEXT: retq580 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()581 %2 = add <16 x i8> %a0, %a1582 ret <16 x i8> %2583}584 585define <4 x i32> @stack_fold_paddd(<4 x i32> %a0, <4 x i32> %a1) {586; CHECK-LABEL: stack_fold_paddd:587; CHECK: # %bb.0:588; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill589; CHECK-NEXT: #APP590; CHECK-NEXT: nop591; CHECK-NEXT: #NO_APP592; CHECK-NEXT: paddd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload593; CHECK-NEXT: retq594 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()595 %2 = add <4 x i32> %a0, %a1596 ret <4 x i32> %2597}598 599define <2 x i64> @stack_fold_paddq(<2 x i64> %a0, <2 x i64> %a1) {600; CHECK-LABEL: stack_fold_paddq:601; CHECK: # %bb.0:602; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill603; CHECK-NEXT: #APP604; CHECK-NEXT: nop605; CHECK-NEXT: #NO_APP606; CHECK-NEXT: paddq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload607; CHECK-NEXT: retq608 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()609 %2 = add <2 x i64> %a0, %a1610 ret <2 x i64> %2611}612 613define <16 x i8> @stack_fold_paddsb(<16 x i8> %a0, <16 x i8> %a1) {614; CHECK-LABEL: stack_fold_paddsb:615; CHECK: # %bb.0:616; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill617; CHECK-NEXT: #APP618; CHECK-NEXT: nop619; CHECK-NEXT: #NO_APP620; CHECK-NEXT: paddsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload621; CHECK-NEXT: retq622 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()623 %2 = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %a0, <16 x i8> %a1)624 ret <16 x i8> %2625}626declare <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8>, <16 x i8>) nounwind readnone627 628define <8 x i16> @stack_fold_paddsw(<8 x i16> %a0, <8 x i16> %a1) {629; CHECK-LABEL: stack_fold_paddsw:630; CHECK: # %bb.0:631; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill632; CHECK-NEXT: #APP633; CHECK-NEXT: nop634; CHECK-NEXT: #NO_APP635; CHECK-NEXT: paddsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload636; CHECK-NEXT: retq637 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()638 %2 = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %a0, <8 x i16> %a1)639 ret <8 x i16> %2640}641declare <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16>, <8 x i16>) nounwind readnone642 643define <16 x i8> @stack_fold_paddusb(<16 x i8> %a0, <16 x i8> %a1) {644; CHECK-LABEL: stack_fold_paddusb:645; CHECK: # %bb.0:646; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill647; CHECK-NEXT: #APP648; CHECK-NEXT: nop649; CHECK-NEXT: #NO_APP650; CHECK-NEXT: paddusb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload651; CHECK-NEXT: retq652 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()653 %2 = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %a0, <16 x i8> %a1)654 ret <16 x i8> %2655}656declare <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8>, <16 x i8>) nounwind readnone657 658define <8 x i16> @stack_fold_paddusw(<8 x i16> %a0, <8 x i16> %a1) {659; CHECK-LABEL: stack_fold_paddusw:660; CHECK: # %bb.0:661; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill662; CHECK-NEXT: #APP663; CHECK-NEXT: nop664; CHECK-NEXT: #NO_APP665; CHECK-NEXT: paddusw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload666; CHECK-NEXT: retq667 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()668 %2 = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %a0, <8 x i16> %a1)669 ret <8 x i16> %2670}671declare <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16>, <8 x i16>) nounwind readnone672 673define <8 x i16> @stack_fold_paddw(<8 x i16> %a0, <8 x i16> %a1) {674; CHECK-LABEL: stack_fold_paddw:675; CHECK: # %bb.0:676; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill677; CHECK-NEXT: #APP678; CHECK-NEXT: nop679; CHECK-NEXT: #NO_APP680; CHECK-NEXT: paddw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload681; CHECK-NEXT: retq682 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()683 %2 = add <8 x i16> %a0, %a1684 ret <8 x i16> %2685}686 687define <16 x i8> @stack_fold_palignr(<16 x i8> %a0, <16 x i8> %a1) {688; CHECK-LABEL: stack_fold_palignr:689; CHECK: # %bb.0:690; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill691; CHECK-NEXT: #APP692; CHECK-NEXT: nop693; CHECK-NEXT: #NO_APP694; CHECK-NEXT: palignr $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload695; CHECK-NEXT: # xmm0 = mem[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm0[0]696; CHECK-NEXT: retq697 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()698 %2 = shufflevector <16 x i8> %a1, <16 x i8> %a0, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>699 ret <16 x i8> %2700}701 702define <16 x i8> @stack_fold_pand(<16 x i8> %a0, <16 x i8> %a1) {703; CHECK-LABEL: stack_fold_pand:704; CHECK: # %bb.0:705; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill706; CHECK-NEXT: #APP707; CHECK-NEXT: nop708; CHECK-NEXT: #NO_APP709; CHECK-NEXT: pand {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload710; CHECK-NEXT: pcmpeqd %xmm1, %xmm1711; CHECK-NEXT: psubb %xmm1, %xmm0712; CHECK-NEXT: retq713 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()714 %2 = and <16 x i8> %a0, %a1715 ; add forces execution domain716 %3 = add <16 x i8> %2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>717 ret <16 x i8> %3718}719 720define <16 x i8> @stack_fold_pandn(<16 x i8> %a0, <16 x i8> %a1) {721; CHECK-LABEL: stack_fold_pandn:722; CHECK: # %bb.0:723; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill724; CHECK-NEXT: #APP725; CHECK-NEXT: nop726; CHECK-NEXT: #NO_APP727; CHECK-NEXT: pandn {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload728; CHECK-NEXT: pcmpeqd %xmm1, %xmm1729; CHECK-NEXT: psubb %xmm1, %xmm0730; CHECK-NEXT: retq731 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()732 %2 = xor <16 x i8> %a0, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>733 %3 = and <16 x i8> %2, %a1734 ; add forces execution domain735 %4 = add <16 x i8> %3, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>736 ret <16 x i8> %4737}738 739define <16 x i8> @stack_fold_pavgb(<16 x i8> %a0, <16 x i8> %a1) {740; CHECK-LABEL: stack_fold_pavgb:741; CHECK: # %bb.0:742; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill743; CHECK-NEXT: #APP744; CHECK-NEXT: nop745; CHECK-NEXT: #NO_APP746; CHECK-NEXT: pavgb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload747; CHECK-NEXT: retq748 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()749 %2 = zext <16 x i8> %a0 to <16 x i16>750 %3 = zext <16 x i8> %a1 to <16 x i16>751 %4 = add <16 x i16> %2, %3752 %5 = add <16 x i16> %4, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>753 %6 = lshr <16 x i16> %5, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>754 %7 = trunc <16 x i16> %6 to <16 x i8>755 ret <16 x i8> %7756}757 758define <8 x i16> @stack_fold_pavgw(<8 x i16> %a0, <8 x i16> %a1) {759; CHECK-LABEL: stack_fold_pavgw:760; CHECK: # %bb.0:761; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill762; CHECK-NEXT: #APP763; CHECK-NEXT: nop764; CHECK-NEXT: #NO_APP765; CHECK-NEXT: pavgw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload766; CHECK-NEXT: retq767 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()768 %2 = zext <8 x i16> %a0 to <8 x i32>769 %3 = zext <8 x i16> %a1 to <8 x i32>770 %4 = add <8 x i32> %2, %3771 %5 = add <8 x i32> %4, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>772 %6 = lshr <8 x i32> %5, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>773 %7 = trunc <8 x i32> %6 to <8 x i16>774 ret <8 x i16> %7775}776 777define <16 x i8> @stack_fold_pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %c) {778; CHECK-LABEL: stack_fold_pblendvb:779; CHECK: # %bb.0:780; CHECK-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill781; CHECK-NEXT: movdqa %xmm1, %xmm2782; CHECK-NEXT: #APP783; CHECK-NEXT: nop784; CHECK-NEXT: #NO_APP785; CHECK-NEXT: pblendvb %xmm0, {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload786; CHECK-NEXT: movdqa %xmm2, %xmm0787; CHECK-NEXT: retq788 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()789 %2 = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %a1, <16 x i8> %c, <16 x i8> %a0)790 ret <16 x i8> %2791}792declare <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone793 794define <8 x i16> @stack_fold_pblendw(<8 x i16> %a0, <8 x i16> %a1) {795; CHECK-LABEL: stack_fold_pblendw:796; CHECK: # %bb.0:797; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill798; CHECK-NEXT: #APP799; CHECK-NEXT: nop800; CHECK-NEXT: #NO_APP801; CHECK-NEXT: pblendw $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload802; CHECK-NEXT: # xmm0 = mem[0,1,2],xmm0[3,4,5,6,7]803; CHECK-NEXT: retq804 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()805 %2 = shufflevector <8 x i16> %a0, <8 x i16> %a1, <8 x i32> <i32 8, i32 9, i32 10, i32 3, i32 4, i32 5, i32 6, i32 7>806 ret <8 x i16> %2807}808 809define <2 x i64> @stack_fold_pclmulqdq(<2 x i64> %a0, <2 x i64> %a1) {810; CHECK-LABEL: stack_fold_pclmulqdq:811; CHECK: # %bb.0:812; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill813; CHECK-NEXT: #APP814; CHECK-NEXT: nop815; CHECK-NEXT: #NO_APP816; CHECK-NEXT: pclmulqdq $0, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload817; CHECK-NEXT: retq818 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()819 %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 0)820 ret <2 x i64> %2821}822declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8) nounwind readnone823 824define <16 x i8> @stack_fold_pcmpeqb(<16 x i8> %a0, <16 x i8> %a1) {825; CHECK-LABEL: stack_fold_pcmpeqb:826; CHECK: # %bb.0:827; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill828; CHECK-NEXT: #APP829; CHECK-NEXT: nop830; CHECK-NEXT: #NO_APP831; CHECK-NEXT: pcmpeqb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload832; CHECK-NEXT: retq833 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()834 %2 = icmp eq <16 x i8> %a0, %a1835 %3 = sext <16 x i1> %2 to <16 x i8>836 ret <16 x i8> %3837}838 839define <4 x i32> @stack_fold_pcmpeqd(<4 x i32> %a0, <4 x i32> %a1) {840; CHECK-LABEL: stack_fold_pcmpeqd:841; CHECK: # %bb.0:842; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill843; CHECK-NEXT: #APP844; CHECK-NEXT: nop845; CHECK-NEXT: #NO_APP846; CHECK-NEXT: pcmpeqd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload847; CHECK-NEXT: retq848 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()849 %2 = icmp eq <4 x i32> %a0, %a1850 %3 = sext <4 x i1> %2 to <4 x i32>851 ret <4 x i32> %3852}853 854define <2 x i64> @stack_fold_pcmpeqq(<2 x i64> %a0, <2 x i64> %a1) {855; CHECK-LABEL: stack_fold_pcmpeqq:856; CHECK: # %bb.0:857; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill858; CHECK-NEXT: #APP859; CHECK-NEXT: nop860; CHECK-NEXT: #NO_APP861; CHECK-NEXT: pcmpeqq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload862; CHECK-NEXT: retq863 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()864 %2 = icmp eq <2 x i64> %a0, %a1865 %3 = sext <2 x i1> %2 to <2 x i64>866 ret <2 x i64> %3867}868 869define <8 x i16> @stack_fold_pcmpeqw(<8 x i16> %a0, <8 x i16> %a1) {870; CHECK-LABEL: stack_fold_pcmpeqw:871; CHECK: # %bb.0:872; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill873; CHECK-NEXT: #APP874; CHECK-NEXT: nop875; CHECK-NEXT: #NO_APP876; CHECK-NEXT: pcmpeqw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload877; CHECK-NEXT: retq878 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()879 %2 = icmp eq <8 x i16> %a0, %a1880 %3 = sext <8 x i1> %2 to <8 x i16>881 ret <8 x i16> %3882}883 884define i32 @stack_fold_pcmpestri(<16 x i8> %a0, <16 x i8> %a1) {885; CHECK-LABEL: stack_fold_pcmpestri:886; CHECK: # %bb.0:887; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill888; CHECK-NEXT: #APP889; CHECK-NEXT: nop890; CHECK-NEXT: #NO_APP891; CHECK-NEXT: movl $7, %eax892; CHECK-NEXT: movl $7, %edx893; CHECK-NEXT: pcmpestri $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload894; CHECK-NEXT: movl %ecx, %eax895; CHECK-NEXT: retq896 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{rax},~{flags}"()897 %2 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)898 ret i32 %2899}900declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone901 902define <16 x i8> @stack_fold_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1) {903; CHECK-LABEL: stack_fold_pcmpestrm:904; CHECK: # %bb.0:905; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill906; CHECK-NEXT: #APP907; CHECK-NEXT: nop908; CHECK-NEXT: #NO_APP909; CHECK-NEXT: movl $7, %eax910; CHECK-NEXT: movl $7, %edx911; CHECK-NEXT: pcmpestrm $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload912; CHECK-NEXT: retq913 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{rax},~{flags}"()914 %2 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)915 ret <16 x i8> %2916}917declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone918 919define <16 x i8> @stack_fold_pcmpgtb(<16 x i8> %a0, <16 x i8> %a1) {920; CHECK-LABEL: stack_fold_pcmpgtb:921; CHECK: # %bb.0:922; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill923; CHECK-NEXT: #APP924; CHECK-NEXT: nop925; CHECK-NEXT: #NO_APP926; CHECK-NEXT: pcmpgtb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload927; CHECK-NEXT: retq928 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()929 %2 = icmp sgt <16 x i8> %a0, %a1930 %3 = sext <16 x i1> %2 to <16 x i8>931 ret <16 x i8> %3932}933 934define <4 x i32> @stack_fold_pcmpgtd(<4 x i32> %a0, <4 x i32> %a1) {935; CHECK-LABEL: stack_fold_pcmpgtd:936; CHECK: # %bb.0:937; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill938; CHECK-NEXT: #APP939; CHECK-NEXT: nop940; CHECK-NEXT: #NO_APP941; CHECK-NEXT: pcmpgtd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload942; CHECK-NEXT: retq943 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()944 %2 = icmp sgt <4 x i32> %a0, %a1945 %3 = sext <4 x i1> %2 to <4 x i32>946 ret <4 x i32> %3947}948 949define <2 x i64> @stack_fold_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1) {950; CHECK-LABEL: stack_fold_pcmpgtq:951; CHECK: # %bb.0:952; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill953; CHECK-NEXT: #APP954; CHECK-NEXT: nop955; CHECK-NEXT: #NO_APP956; CHECK-NEXT: pcmpgtq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload957; CHECK-NEXT: retq958 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()959 %2 = icmp sgt <2 x i64> %a0, %a1960 %3 = sext <2 x i1> %2 to <2 x i64>961 ret <2 x i64> %3962}963 964define <8 x i16> @stack_fold_pcmpgtw(<8 x i16> %a0, <8 x i16> %a1) {965; CHECK-LABEL: stack_fold_pcmpgtw:966; CHECK: # %bb.0:967; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill968; CHECK-NEXT: #APP969; CHECK-NEXT: nop970; CHECK-NEXT: #NO_APP971; CHECK-NEXT: pcmpgtw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload972; CHECK-NEXT: retq973 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()974 %2 = icmp sgt <8 x i16> %a0, %a1975 %3 = sext <8 x i1> %2 to <8 x i16>976 ret <8 x i16> %3977}978 979define i32 @stack_fold_pcmpistri(<16 x i8> %a0, <16 x i8> %a1) {980; CHECK-LABEL: stack_fold_pcmpistri:981; CHECK: # %bb.0:982; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill983; CHECK-NEXT: #APP984; CHECK-NEXT: nop985; CHECK-NEXT: #NO_APP986; CHECK-NEXT: pcmpistri $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload987; CHECK-NEXT: movl %ecx, %eax988; CHECK-NEXT: retq989 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()990 %2 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7)991 ret i32 %2992}993declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone994 995define <16 x i8> @stack_fold_pcmpistrm(<16 x i8> %a0, <16 x i8> %a1) {996; CHECK-LABEL: stack_fold_pcmpistrm:997; CHECK: # %bb.0:998; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill999; CHECK-NEXT: #APP1000; CHECK-NEXT: nop1001; CHECK-NEXT: #NO_APP1002; CHECK-NEXT: pcmpistrm $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1003; CHECK-NEXT: retq1004 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1005 %2 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7)1006 ret <16 x i8> %21007}1008declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone1009 1010; TODO stack_fold_pextrb1011 1012; We can't naively fold pextrw as it only writes to a 16-bit memory location1013; even though it can store to a 32-bit register.1014define i16 @stack_fold_pextrw(<8 x i16> %a0) {1015; CHECK-LABEL: stack_fold_pextrw:1016; CHECK: # %bb.0: # %entry1017; CHECK-NEXT: pushq %rbp1018; CHECK-NEXT: .cfi_def_cfa_offset 161019; CHECK-NEXT: pushq %r151020; CHECK-NEXT: .cfi_def_cfa_offset 241021; CHECK-NEXT: pushq %r141022; CHECK-NEXT: .cfi_def_cfa_offset 321023; CHECK-NEXT: pushq %r131024; CHECK-NEXT: .cfi_def_cfa_offset 401025; CHECK-NEXT: pushq %r121026; CHECK-NEXT: .cfi_def_cfa_offset 481027; CHECK-NEXT: pushq %rbx1028; CHECK-NEXT: .cfi_def_cfa_offset 561029; CHECK-NEXT: .cfi_offset %rbx, -561030; CHECK-NEXT: .cfi_offset %r12, -481031; CHECK-NEXT: .cfi_offset %r13, -401032; CHECK-NEXT: .cfi_offset %r14, -321033; CHECK-NEXT: .cfi_offset %r15, -241034; CHECK-NEXT: .cfi_offset %rbp, -161035; CHECK-NEXT: pextrw $1, %xmm0, %eax1036; CHECK-NEXT: addl $2, %eax1037; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1038; CHECK-NEXT: #APP1039; CHECK-NEXT: nop1040; CHECK-NEXT: #NO_APP1041; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload1042; CHECK-NEXT: # kill: def $ax killed $ax killed $eax1043; CHECK-NEXT: popq %rbx1044; CHECK-NEXT: .cfi_def_cfa_offset 481045; CHECK-NEXT: popq %r121046; CHECK-NEXT: .cfi_def_cfa_offset 401047; CHECK-NEXT: popq %r131048; CHECK-NEXT: .cfi_def_cfa_offset 321049; CHECK-NEXT: popq %r141050; CHECK-NEXT: .cfi_def_cfa_offset 241051; CHECK-NEXT: popq %r151052; CHECK-NEXT: .cfi_def_cfa_offset 161053; CHECK-NEXT: popq %rbp1054; CHECK-NEXT: .cfi_def_cfa_offset 81055; CHECK-NEXT: retq1056entry:1057; add forces execution domain1058 %add = add <8 x i16> %a0, <i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>1059 %extract = extractelement <8 x i16> %add, i32 11060 %asm = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1061 ret i16 %extract1062}1063 1064define i32 @stack_fold_pextrd(<4 x i32> %a0, <4 x i32> %a1) {1065; CHECK-LABEL: stack_fold_pextrd:1066; CHECK: # %bb.0:1067; CHECK-NEXT: pushq %rbp1068; CHECK-NEXT: .cfi_def_cfa_offset 161069; CHECK-NEXT: pushq %r151070; CHECK-NEXT: .cfi_def_cfa_offset 241071; CHECK-NEXT: pushq %r141072; CHECK-NEXT: .cfi_def_cfa_offset 321073; CHECK-NEXT: pushq %r131074; CHECK-NEXT: .cfi_def_cfa_offset 401075; CHECK-NEXT: pushq %r121076; CHECK-NEXT: .cfi_def_cfa_offset 481077; CHECK-NEXT: pushq %rbx1078; CHECK-NEXT: .cfi_def_cfa_offset 561079; CHECK-NEXT: .cfi_offset %rbx, -561080; CHECK-NEXT: .cfi_offset %r12, -481081; CHECK-NEXT: .cfi_offset %r13, -401082; CHECK-NEXT: .cfi_offset %r14, -321083; CHECK-NEXT: .cfi_offset %r15, -241084; CHECK-NEXT: .cfi_offset %rbp, -161085; CHECK-NEXT: paddd %xmm1, %xmm01086; CHECK-NEXT: pextrd $1, %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1087; CHECK-NEXT: #APP1088; CHECK-NEXT: nop1089; CHECK-NEXT: #NO_APP1090; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload1091; CHECK-NEXT: popq %rbx1092; CHECK-NEXT: .cfi_def_cfa_offset 481093; CHECK-NEXT: popq %r121094; CHECK-NEXT: .cfi_def_cfa_offset 401095; CHECK-NEXT: popq %r131096; CHECK-NEXT: .cfi_def_cfa_offset 321097; CHECK-NEXT: popq %r141098; CHECK-NEXT: .cfi_def_cfa_offset 241099; CHECK-NEXT: popq %r151100; CHECK-NEXT: .cfi_def_cfa_offset 161101; CHECK-NEXT: popq %rbp1102; CHECK-NEXT: .cfi_def_cfa_offset 81103; CHECK-NEXT: retq1104 ; add forces execution domain1105 %1 = add <4 x i32> %a0, %a11106 %2 = extractelement <4 x i32> %1, i32 11107 %3 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1108 ret i32 %21109}1110 1111define i64 @stack_fold_pextrq(<2 x i64> %a0) {1112; CHECK-LABEL: stack_fold_pextrq:1113; CHECK: # %bb.0:1114; CHECK-NEXT: pushq %rbp1115; CHECK-NEXT: .cfi_def_cfa_offset 161116; CHECK-NEXT: pushq %r151117; CHECK-NEXT: .cfi_def_cfa_offset 241118; CHECK-NEXT: pushq %r141119; CHECK-NEXT: .cfi_def_cfa_offset 321120; CHECK-NEXT: pushq %r131121; CHECK-NEXT: .cfi_def_cfa_offset 401122; CHECK-NEXT: pushq %r121123; CHECK-NEXT: .cfi_def_cfa_offset 481124; CHECK-NEXT: pushq %rbx1125; CHECK-NEXT: .cfi_def_cfa_offset 561126; CHECK-NEXT: .cfi_offset %rbx, -561127; CHECK-NEXT: .cfi_offset %r12, -481128; CHECK-NEXT: .cfi_offset %r13, -401129; CHECK-NEXT: .cfi_offset %r14, -321130; CHECK-NEXT: .cfi_offset %r15, -241131; CHECK-NEXT: .cfi_offset %rbp, -161132; CHECK-NEXT: pextrq $1, %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill1133; CHECK-NEXT: #APP1134; CHECK-NEXT: nop1135; CHECK-NEXT: #NO_APP1136; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload1137; CHECK-NEXT: popq %rbx1138; CHECK-NEXT: .cfi_def_cfa_offset 481139; CHECK-NEXT: popq %r121140; CHECK-NEXT: .cfi_def_cfa_offset 401141; CHECK-NEXT: popq %r131142; CHECK-NEXT: .cfi_def_cfa_offset 321143; CHECK-NEXT: popq %r141144; CHECK-NEXT: .cfi_def_cfa_offset 241145; CHECK-NEXT: popq %r151146; CHECK-NEXT: .cfi_def_cfa_offset 161147; CHECK-NEXT: popq %rbp1148; CHECK-NEXT: .cfi_def_cfa_offset 81149; CHECK-NEXT: retq1150 %1 = extractelement <2 x i64> %a0, i32 11151 %2 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1152 ret i64 %11153}1154 1155define <4 x i32> @stack_fold_phaddd(<4 x i32> %a0, <4 x i32> %a1) {1156; CHECK-LABEL: stack_fold_phaddd:1157; CHECK: # %bb.0:1158; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1159; CHECK-NEXT: #APP1160; CHECK-NEXT: nop1161; CHECK-NEXT: #NO_APP1162; CHECK-NEXT: phaddd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1163; CHECK-NEXT: retq1164 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1165 %2 = call <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32> %a0, <4 x i32> %a1)1166 ret <4 x i32> %21167}1168declare <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32>, <4 x i32>) nounwind readnone1169 1170define <8 x i16> @stack_fold_phaddsw(<8 x i16> %a0, <8 x i16> %a1) {1171; CHECK-LABEL: stack_fold_phaddsw:1172; CHECK: # %bb.0:1173; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1174; CHECK-NEXT: #APP1175; CHECK-NEXT: nop1176; CHECK-NEXT: #NO_APP1177; CHECK-NEXT: phaddsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1178; CHECK-NEXT: retq1179 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1180 %2 = call <8 x i16> @llvm.x86.ssse3.phadd.sw.128(<8 x i16> %a0, <8 x i16> %a1)1181 ret <8 x i16> %21182}1183declare <8 x i16> @llvm.x86.ssse3.phadd.sw.128(<8 x i16>, <8 x i16>) nounwind readnone1184 1185define <8 x i16> @stack_fold_phaddw(<8 x i16> %a0, <8 x i16> %a1) {1186; CHECK-LABEL: stack_fold_phaddw:1187; CHECK: # %bb.0:1188; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1189; CHECK-NEXT: #APP1190; CHECK-NEXT: nop1191; CHECK-NEXT: #NO_APP1192; CHECK-NEXT: phaddw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1193; CHECK-NEXT: retq1194 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1195 %2 = call <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16> %a0, <8 x i16> %a1)1196 ret <8 x i16> %21197}1198declare <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16>, <8 x i16>) nounwind readnone1199 1200define <8 x i16> @stack_fold_phminposuw(<8 x i16> %a0) {1201; CHECK-LABEL: stack_fold_phminposuw:1202; CHECK: # %bb.0:1203; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1204; CHECK-NEXT: #APP1205; CHECK-NEXT: nop1206; CHECK-NEXT: #NO_APP1207; CHECK-NEXT: phminposuw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1208; CHECK-NEXT: retq1209 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1210 %2 = call <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16> %a0)1211 ret <8 x i16> %21212}1213declare <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16>) nounwind readnone1214 1215define <4 x i32> @stack_fold_phsubd(<4 x i32> %a0, <4 x i32> %a1) {1216; CHECK-LABEL: stack_fold_phsubd:1217; CHECK: # %bb.0:1218; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1219; CHECK-NEXT: #APP1220; CHECK-NEXT: nop1221; CHECK-NEXT: #NO_APP1222; CHECK-NEXT: phsubd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1223; CHECK-NEXT: retq1224 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1225 %2 = call <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32> %a0, <4 x i32> %a1)1226 ret <4 x i32> %21227}1228declare <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32>, <4 x i32>) nounwind readnone1229 1230define <8 x i16> @stack_fold_phsubsw(<8 x i16> %a0, <8 x i16> %a1) {1231; CHECK-LABEL: stack_fold_phsubsw:1232; CHECK: # %bb.0:1233; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1234; CHECK-NEXT: #APP1235; CHECK-NEXT: nop1236; CHECK-NEXT: #NO_APP1237; CHECK-NEXT: phsubsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1238; CHECK-NEXT: retq1239 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1240 %2 = call <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16> %a0, <8 x i16> %a1)1241 ret <8 x i16> %21242}1243declare <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16>, <8 x i16>) nounwind readnone1244 1245define <8 x i16> @stack_fold_phsubw(<8 x i16> %a0, <8 x i16> %a1) {1246; CHECK-LABEL: stack_fold_phsubw:1247; CHECK: # %bb.0:1248; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1249; CHECK-NEXT: #APP1250; CHECK-NEXT: nop1251; CHECK-NEXT: #NO_APP1252; CHECK-NEXT: phsubw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1253; CHECK-NEXT: retq1254 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1255 %2 = call <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16> %a0, <8 x i16> %a1)1256 ret <8 x i16> %21257}1258declare <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16>, <8 x i16>) nounwind readnone1259 1260define <16 x i8> @stack_fold_pinsrb(<16 x i8> %a0, i8 %a1) {1261; CHECK-LABEL: stack_fold_pinsrb:1262; CHECK: # %bb.0:1263; CHECK-NEXT: pushq %rbp1264; CHECK-NEXT: .cfi_def_cfa_offset 161265; CHECK-NEXT: pushq %r151266; CHECK-NEXT: .cfi_def_cfa_offset 241267; CHECK-NEXT: pushq %r141268; CHECK-NEXT: .cfi_def_cfa_offset 321269; CHECK-NEXT: pushq %r131270; CHECK-NEXT: .cfi_def_cfa_offset 401271; CHECK-NEXT: pushq %r121272; CHECK-NEXT: .cfi_def_cfa_offset 481273; CHECK-NEXT: pushq %rbx1274; CHECK-NEXT: .cfi_def_cfa_offset 561275; CHECK-NEXT: .cfi_offset %rbx, -561276; CHECK-NEXT: .cfi_offset %r12, -481277; CHECK-NEXT: .cfi_offset %r13, -401278; CHECK-NEXT: .cfi_offset %r14, -321279; CHECK-NEXT: .cfi_offset %r15, -241280; CHECK-NEXT: .cfi_offset %rbp, -161281; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1282; CHECK-NEXT: #APP1283; CHECK-NEXT: nop1284; CHECK-NEXT: #NO_APP1285; CHECK-NEXT: pinsrb $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1286; CHECK-NEXT: popq %rbx1287; CHECK-NEXT: .cfi_def_cfa_offset 481288; CHECK-NEXT: popq %r121289; CHECK-NEXT: .cfi_def_cfa_offset 401290; CHECK-NEXT: popq %r131291; CHECK-NEXT: .cfi_def_cfa_offset 321292; CHECK-NEXT: popq %r141293; CHECK-NEXT: .cfi_def_cfa_offset 241294; CHECK-NEXT: popq %r151295; CHECK-NEXT: .cfi_def_cfa_offset 161296; CHECK-NEXT: popq %rbp1297; CHECK-NEXT: .cfi_def_cfa_offset 81298; CHECK-NEXT: retq1299 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1300 %2 = insertelement <16 x i8> %a0, i8 %a1, i32 11301 ret <16 x i8> %21302}1303 1304define <4 x i32> @stack_fold_pinsrd(<4 x i32> %a0, i32 %a1) {1305; CHECK-LABEL: stack_fold_pinsrd:1306; CHECK: # %bb.0:1307; CHECK-NEXT: pushq %rbp1308; CHECK-NEXT: .cfi_def_cfa_offset 161309; CHECK-NEXT: pushq %r151310; CHECK-NEXT: .cfi_def_cfa_offset 241311; CHECK-NEXT: pushq %r141312; CHECK-NEXT: .cfi_def_cfa_offset 321313; CHECK-NEXT: pushq %r131314; CHECK-NEXT: .cfi_def_cfa_offset 401315; CHECK-NEXT: pushq %r121316; CHECK-NEXT: .cfi_def_cfa_offset 481317; CHECK-NEXT: pushq %rbx1318; CHECK-NEXT: .cfi_def_cfa_offset 561319; CHECK-NEXT: .cfi_offset %rbx, -561320; CHECK-NEXT: .cfi_offset %r12, -481321; CHECK-NEXT: .cfi_offset %r13, -401322; CHECK-NEXT: .cfi_offset %r14, -321323; CHECK-NEXT: .cfi_offset %r15, -241324; CHECK-NEXT: .cfi_offset %rbp, -161325; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1326; CHECK-NEXT: #APP1327; CHECK-NEXT: nop1328; CHECK-NEXT: #NO_APP1329; CHECK-NEXT: pinsrd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1330; CHECK-NEXT: popq %rbx1331; CHECK-NEXT: .cfi_def_cfa_offset 481332; CHECK-NEXT: popq %r121333; CHECK-NEXT: .cfi_def_cfa_offset 401334; CHECK-NEXT: popq %r131335; CHECK-NEXT: .cfi_def_cfa_offset 321336; CHECK-NEXT: popq %r141337; CHECK-NEXT: .cfi_def_cfa_offset 241338; CHECK-NEXT: popq %r151339; CHECK-NEXT: .cfi_def_cfa_offset 161340; CHECK-NEXT: popq %rbp1341; CHECK-NEXT: .cfi_def_cfa_offset 81342; CHECK-NEXT: retq1343 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1344 %2 = insertelement <4 x i32> %a0, i32 %a1, i32 11345 ret <4 x i32> %21346}1347 1348define <2 x i64> @stack_fold_pinsrq(<2 x i64> %a0, i64 %a1) {1349; CHECK-LABEL: stack_fold_pinsrq:1350; CHECK: # %bb.0:1351; CHECK-NEXT: pushq %rbp1352; CHECK-NEXT: .cfi_def_cfa_offset 161353; CHECK-NEXT: pushq %r151354; CHECK-NEXT: .cfi_def_cfa_offset 241355; CHECK-NEXT: pushq %r141356; CHECK-NEXT: .cfi_def_cfa_offset 321357; CHECK-NEXT: pushq %r131358; CHECK-NEXT: .cfi_def_cfa_offset 401359; CHECK-NEXT: pushq %r121360; CHECK-NEXT: .cfi_def_cfa_offset 481361; CHECK-NEXT: pushq %rbx1362; CHECK-NEXT: .cfi_def_cfa_offset 561363; CHECK-NEXT: .cfi_offset %rbx, -561364; CHECK-NEXT: .cfi_offset %r12, -481365; CHECK-NEXT: .cfi_offset %r13, -401366; CHECK-NEXT: .cfi_offset %r14, -321367; CHECK-NEXT: .cfi_offset %r15, -241368; CHECK-NEXT: .cfi_offset %rbp, -161369; CHECK-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1370; CHECK-NEXT: #APP1371; CHECK-NEXT: nop1372; CHECK-NEXT: #NO_APP1373; CHECK-NEXT: pinsrq $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload1374; CHECK-NEXT: popq %rbx1375; CHECK-NEXT: .cfi_def_cfa_offset 481376; CHECK-NEXT: popq %r121377; CHECK-NEXT: .cfi_def_cfa_offset 401378; CHECK-NEXT: popq %r131379; CHECK-NEXT: .cfi_def_cfa_offset 321380; CHECK-NEXT: popq %r141381; CHECK-NEXT: .cfi_def_cfa_offset 241382; CHECK-NEXT: popq %r151383; CHECK-NEXT: .cfi_def_cfa_offset 161384; CHECK-NEXT: popq %rbp1385; CHECK-NEXT: .cfi_def_cfa_offset 81386; CHECK-NEXT: retq1387 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1388 %2 = insertelement <2 x i64> %a0, i64 %a1, i32 11389 ret <2 x i64> %21390}1391 1392define <8 x i16> @stack_fold_pinsrw(<8 x i16> %a0, i16 %a1) {1393; CHECK-LABEL: stack_fold_pinsrw:1394; CHECK: # %bb.0:1395; CHECK-NEXT: pushq %rbp1396; CHECK-NEXT: .cfi_def_cfa_offset 161397; CHECK-NEXT: pushq %r151398; CHECK-NEXT: .cfi_def_cfa_offset 241399; CHECK-NEXT: pushq %r141400; CHECK-NEXT: .cfi_def_cfa_offset 321401; CHECK-NEXT: pushq %r131402; CHECK-NEXT: .cfi_def_cfa_offset 401403; CHECK-NEXT: pushq %r121404; CHECK-NEXT: .cfi_def_cfa_offset 481405; CHECK-NEXT: pushq %rbx1406; CHECK-NEXT: .cfi_def_cfa_offset 561407; CHECK-NEXT: .cfi_offset %rbx, -561408; CHECK-NEXT: .cfi_offset %r12, -481409; CHECK-NEXT: .cfi_offset %r13, -401410; CHECK-NEXT: .cfi_offset %r14, -321411; CHECK-NEXT: .cfi_offset %r15, -241412; CHECK-NEXT: .cfi_offset %rbp, -161413; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1414; CHECK-NEXT: #APP1415; CHECK-NEXT: nop1416; CHECK-NEXT: #NO_APP1417; CHECK-NEXT: pinsrw $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1418; CHECK-NEXT: popq %rbx1419; CHECK-NEXT: .cfi_def_cfa_offset 481420; CHECK-NEXT: popq %r121421; CHECK-NEXT: .cfi_def_cfa_offset 401422; CHECK-NEXT: popq %r131423; CHECK-NEXT: .cfi_def_cfa_offset 321424; CHECK-NEXT: popq %r141425; CHECK-NEXT: .cfi_def_cfa_offset 241426; CHECK-NEXT: popq %r151427; CHECK-NEXT: .cfi_def_cfa_offset 161428; CHECK-NEXT: popq %rbp1429; CHECK-NEXT: .cfi_def_cfa_offset 81430; CHECK-NEXT: retq1431 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1432 %2 = insertelement <8 x i16> %a0, i16 %a1, i32 11433 ret <8 x i16> %21434}1435 1436define <8 x i16> @stack_fold_pmaddubsw(<16 x i8> %a0, <16 x i8> %a1) {1437; CHECK-LABEL: stack_fold_pmaddubsw:1438; CHECK: # %bb.0:1439; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1440; CHECK-NEXT: #APP1441; CHECK-NEXT: nop1442; CHECK-NEXT: #NO_APP1443; CHECK-NEXT: pmaddubsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1444; CHECK-NEXT: retq1445 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1446 %2 = call <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8> %a0, <16 x i8> %a1)1447 ret <8 x i16> %21448}1449declare <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8>, <16 x i8>) nounwind readnone1450 1451define <4 x i32> @stack_fold_pmaddwd(<8 x i16> %a0, <8 x i16> %a1) {1452; CHECK-LABEL: stack_fold_pmaddwd:1453; CHECK: # %bb.0:1454; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1455; CHECK-NEXT: #APP1456; CHECK-NEXT: nop1457; CHECK-NEXT: #NO_APP1458; CHECK-NEXT: pmaddwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1459; CHECK-NEXT: retq1460 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1461 %2 = call <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16> %a0, <8 x i16> %a1)1462 ret <4 x i32> %21463}1464declare <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16>, <8 x i16>) nounwind readnone1465 1466define <16 x i8> @stack_fold_pmaxsb(<16 x i8> %a0, <16 x i8> %a1) {1467; CHECK-LABEL: stack_fold_pmaxsb:1468; CHECK: # %bb.0:1469; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1470; CHECK-NEXT: #APP1471; CHECK-NEXT: nop1472; CHECK-NEXT: #NO_APP1473; CHECK-NEXT: pmaxsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1474; CHECK-NEXT: retq1475 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1476 %2 = icmp sgt <16 x i8> %a0, %a11477 %3 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %a11478 ret <16 x i8> %31479}1480 1481define <4 x i32> @stack_fold_pmaxsd(<4 x i32> %a0, <4 x i32> %a1) {1482; CHECK-LABEL: stack_fold_pmaxsd:1483; CHECK: # %bb.0:1484; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1485; CHECK-NEXT: #APP1486; CHECK-NEXT: nop1487; CHECK-NEXT: #NO_APP1488; CHECK-NEXT: pmaxsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1489; CHECK-NEXT: retq1490 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1491 %2 = icmp sgt <4 x i32> %a0, %a11492 %3 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %a11493 ret <4 x i32> %31494}1495 1496define <8 x i16> @stack_fold_pmaxsw(<8 x i16> %a0, <8 x i16> %a1) {1497; CHECK-LABEL: stack_fold_pmaxsw:1498; CHECK: # %bb.0:1499; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1500; CHECK-NEXT: #APP1501; CHECK-NEXT: nop1502; CHECK-NEXT: #NO_APP1503; CHECK-NEXT: pmaxsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1504; CHECK-NEXT: retq1505 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1506 %2 = icmp sgt <8 x i16> %a0, %a11507 %3 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %a11508 ret <8 x i16> %31509}1510 1511define <16 x i8> @stack_fold_pmaxub(<16 x i8> %a0, <16 x i8> %a1) {1512; CHECK-LABEL: stack_fold_pmaxub:1513; CHECK: # %bb.0:1514; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1515; CHECK-NEXT: #APP1516; CHECK-NEXT: nop1517; CHECK-NEXT: #NO_APP1518; CHECK-NEXT: pmaxub {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1519; CHECK-NEXT: retq1520 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1521 %2 = icmp ugt <16 x i8> %a0, %a11522 %3 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %a11523 ret <16 x i8> %31524}1525 1526define <4 x i32> @stack_fold_pmaxud(<4 x i32> %a0, <4 x i32> %a1) {1527; CHECK-LABEL: stack_fold_pmaxud:1528; CHECK: # %bb.0:1529; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1530; CHECK-NEXT: #APP1531; CHECK-NEXT: nop1532; CHECK-NEXT: #NO_APP1533; CHECK-NEXT: pmaxud {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1534; CHECK-NEXT: retq1535 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1536 %2 = icmp ugt <4 x i32> %a0, %a11537 %3 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %a11538 ret <4 x i32> %31539}1540 1541define <8 x i16> @stack_fold_pmaxuw(<8 x i16> %a0, <8 x i16> %a1) {1542; CHECK-LABEL: stack_fold_pmaxuw:1543; CHECK: # %bb.0:1544; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1545; CHECK-NEXT: #APP1546; CHECK-NEXT: nop1547; CHECK-NEXT: #NO_APP1548; CHECK-NEXT: pmaxuw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1549; CHECK-NEXT: retq1550 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1551 %2 = icmp ugt <8 x i16> %a0, %a11552 %3 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %a11553 ret <8 x i16> %31554}1555 1556define <16 x i8> @stack_fold_pminsb(<16 x i8> %a0, <16 x i8> %a1) {1557; CHECK-LABEL: stack_fold_pminsb:1558; CHECK: # %bb.0:1559; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1560; CHECK-NEXT: #APP1561; CHECK-NEXT: nop1562; CHECK-NEXT: #NO_APP1563; CHECK-NEXT: pminsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1564; CHECK-NEXT: retq1565 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1566 %2 = icmp slt <16 x i8> %a0, %a11567 %3 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %a11568 ret <16 x i8> %31569}1570 1571define <4 x i32> @stack_fold_pminsd(<4 x i32> %a0, <4 x i32> %a1) {1572; CHECK-LABEL: stack_fold_pminsd:1573; CHECK: # %bb.0:1574; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1575; CHECK-NEXT: #APP1576; CHECK-NEXT: nop1577; CHECK-NEXT: #NO_APP1578; CHECK-NEXT: pminsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1579; CHECK-NEXT: retq1580 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1581 %2 = icmp slt <4 x i32> %a0, %a11582 %3 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %a11583 ret <4 x i32> %31584}1585 1586define <8 x i16> @stack_fold_pminsw(<8 x i16> %a0, <8 x i16> %a1) {1587; CHECK-LABEL: stack_fold_pminsw:1588; CHECK: # %bb.0:1589; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1590; CHECK-NEXT: #APP1591; CHECK-NEXT: nop1592; CHECK-NEXT: #NO_APP1593; CHECK-NEXT: pminsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1594; CHECK-NEXT: retq1595 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1596 %2 = icmp slt <8 x i16> %a0, %a11597 %3 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %a11598 ret <8 x i16> %31599}1600 1601define <16 x i8> @stack_fold_pminub(<16 x i8> %a0, <16 x i8> %a1) {1602; CHECK-LABEL: stack_fold_pminub:1603; CHECK: # %bb.0:1604; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1605; CHECK-NEXT: #APP1606; CHECK-NEXT: nop1607; CHECK-NEXT: #NO_APP1608; CHECK-NEXT: pminub {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1609; CHECK-NEXT: retq1610 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1611 %2 = icmp ult <16 x i8> %a0, %a11612 %3 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %a11613 ret <16 x i8> %31614}1615 1616define <4 x i32> @stack_fold_pminud(<4 x i32> %a0, <4 x i32> %a1) {1617; CHECK-LABEL: stack_fold_pminud:1618; CHECK: # %bb.0:1619; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1620; CHECK-NEXT: #APP1621; CHECK-NEXT: nop1622; CHECK-NEXT: #NO_APP1623; CHECK-NEXT: pminud {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1624; CHECK-NEXT: retq1625 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1626 %2 = icmp ult <4 x i32> %a0, %a11627 %3 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %a11628 ret <4 x i32> %31629}1630 1631define <8 x i16> @stack_fold_pminuw(<8 x i16> %a0, <8 x i16> %a1) {1632; CHECK-LABEL: stack_fold_pminuw:1633; CHECK: # %bb.0:1634; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1635; CHECK-NEXT: #APP1636; CHECK-NEXT: nop1637; CHECK-NEXT: #NO_APP1638; CHECK-NEXT: pminuw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1639; CHECK-NEXT: retq1640 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1641 %2 = icmp ult <8 x i16> %a0, %a11642 %3 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %a11643 ret <8 x i16> %31644}1645 1646define <4 x i32> @stack_fold_pmovsxbd(<16 x i8> %a0) {1647; CHECK-LABEL: stack_fold_pmovsxbd:1648; CHECK: # %bb.0:1649; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1650; CHECK-NEXT: #APP1651; CHECK-NEXT: nop1652; CHECK-NEXT: #NO_APP1653; CHECK-NEXT: pmovsxbd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1654; CHECK-NEXT: retq1655 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1656 %2 = shufflevector <16 x i8> %a0, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1657 %3 = sext <4 x i8> %2 to <4 x i32>1658 ret <4 x i32> %31659}1660 1661define <2 x i64> @stack_fold_pmovsxbq(<16 x i8> %a0) {1662; CHECK-LABEL: stack_fold_pmovsxbq:1663; CHECK: # %bb.0:1664; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1665; CHECK-NEXT: #APP1666; CHECK-NEXT: nop1667; CHECK-NEXT: #NO_APP1668; CHECK-NEXT: pmovsxbq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1669; CHECK-NEXT: retq1670 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1671 %2 = shufflevector <16 x i8> %a0, <16 x i8> undef, <2 x i32> <i32 0, i32 1>1672 %3 = sext <2 x i8> %2 to <2 x i64>1673 ret <2 x i64> %31674}1675 1676define <8 x i16> @stack_fold_pmovsxbw(<16 x i8> %a0) {1677; CHECK-LABEL: stack_fold_pmovsxbw:1678; CHECK: # %bb.0:1679; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1680; CHECK-NEXT: #APP1681; CHECK-NEXT: nop1682; CHECK-NEXT: #NO_APP1683; CHECK-NEXT: pmovsxbw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1684; CHECK-NEXT: retq1685 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1686 %2 = shufflevector <16 x i8> %a0, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1687 %3 = sext <8 x i8> %2 to <8 x i16>1688 ret <8 x i16> %31689}1690 1691define <2 x i64> @stack_fold_pmovsxdq(<4 x i32> %a0) {1692; CHECK-LABEL: stack_fold_pmovsxdq:1693; CHECK: # %bb.0:1694; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1695; CHECK-NEXT: #APP1696; CHECK-NEXT: nop1697; CHECK-NEXT: #NO_APP1698; CHECK-NEXT: pmovsxdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1699; CHECK-NEXT: retq1700 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1701 %2 = shufflevector <4 x i32> %a0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>1702 %3 = sext <2 x i32> %2 to <2 x i64>1703 ret <2 x i64> %31704}1705 1706define <4 x i32> @stack_fold_pmovsxwd(<8 x i16> %a0) {1707; CHECK-LABEL: stack_fold_pmovsxwd:1708; CHECK: # %bb.0:1709; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1710; CHECK-NEXT: #APP1711; CHECK-NEXT: nop1712; CHECK-NEXT: #NO_APP1713; CHECK-NEXT: pmovsxwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1714; CHECK-NEXT: retq1715 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1716 %2 = shufflevector <8 x i16> %a0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1717 %3 = sext <4 x i16> %2 to <4 x i32>1718 ret <4 x i32> %31719}1720 1721define <2 x i64> @stack_fold_pmovsxwq(<8 x i16> %a0) {1722; CHECK-LABEL: stack_fold_pmovsxwq:1723; CHECK: # %bb.0:1724; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1725; CHECK-NEXT: #APP1726; CHECK-NEXT: nop1727; CHECK-NEXT: #NO_APP1728; CHECK-NEXT: pmovsxwq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1729; CHECK-NEXT: retq1730 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1731 %2 = shufflevector <8 x i16> %a0, <8 x i16> undef, <2 x i32> <i32 0, i32 1>1732 %3 = sext <2 x i16> %2 to <2 x i64>1733 ret <2 x i64> %31734}1735 1736define <4 x i32> @stack_fold_pmovzxbd(<16 x i8> %a0) {1737; CHECK-LABEL: stack_fold_pmovzxbd:1738; CHECK: # %bb.0:1739; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1740; CHECK-NEXT: #APP1741; CHECK-NEXT: nop1742; CHECK-NEXT: #NO_APP1743; CHECK-NEXT: pmovzxbd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1744; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1745; CHECK-NEXT: retq1746 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1747 %2 = shufflevector <16 x i8> %a0, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 16, i32 17, i32 18, i32 1, i32 19, i32 20, i32 21, i32 2, i32 22, i32 23, i32 24, i32 3, i32 25, i32 26, i32 27>1748 %3 = bitcast <16 x i8> %2 to <4 x i32>1749 ret <4 x i32> %31750}1751 1752define <2 x i64> @stack_fold_pmovzxbq(<16 x i8> %a0) {1753; CHECK-LABEL: stack_fold_pmovzxbq:1754; CHECK: # %bb.0:1755; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1756; CHECK-NEXT: #APP1757; CHECK-NEXT: nop1758; CHECK-NEXT: #NO_APP1759; CHECK-NEXT: pmovzxbq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1760; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero1761; CHECK-NEXT: retq1762 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1763 %2 = shufflevector <16 x i8> %a0, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 1, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28>1764 %3 = bitcast <16 x i8> %2 to <2 x i64>1765 ret <2 x i64> %31766}1767 1768define <8 x i16> @stack_fold_pmovzxbw(<16 x i8> %a0) {1769; CHECK-LABEL: stack_fold_pmovzxbw:1770; CHECK: # %bb.0:1771; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1772; CHECK-NEXT: #APP1773; CHECK-NEXT: nop1774; CHECK-NEXT: #NO_APP1775; CHECK-NEXT: pmovzxbw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1776; CHECK-NEXT: # xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1777; CHECK-NEXT: retq1778 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1779 %2 = shufflevector <16 x i8> %a0, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>1780 %3 = bitcast <16 x i8> %2 to <8 x i16>1781 ret <8 x i16> %31782}1783 1784define <2 x i64> @stack_fold_pmovzxdq(<4 x i32> %a0) {1785; CHECK-LABEL: stack_fold_pmovzxdq:1786; CHECK: # %bb.0:1787; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1788; CHECK-NEXT: #APP1789; CHECK-NEXT: nop1790; CHECK-NEXT: #NO_APP1791; CHECK-NEXT: pmovzxdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1792; CHECK-NEXT: # xmm0 = mem[0],zero,mem[1],zero1793; CHECK-NEXT: retq1794 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1795 %2 = shufflevector <4 x i32> %a0, <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 4, i32 1, i32 5>1796 %3 = bitcast <4 x i32> %2 to <2 x i64>1797 ret <2 x i64> %31798}1799 1800define <4 x i32> @stack_fold_pmovzxwd(<8 x i16> %a0) {1801; CHECK-LABEL: stack_fold_pmovzxwd:1802; CHECK: # %bb.0:1803; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1804; CHECK-NEXT: #APP1805; CHECK-NEXT: nop1806; CHECK-NEXT: #NO_APP1807; CHECK-NEXT: pmovzxwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1808; CHECK-NEXT: # xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1809; CHECK-NEXT: retq1810 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1811 %2 = shufflevector <8 x i16> %a0, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>1812 %3 = bitcast <8 x i16> %2 to <4 x i32>1813 ret <4 x i32> %31814}1815 1816define <2 x i64> @stack_fold_pmovzxwq(<8 x i16> %a0) {1817; CHECK-LABEL: stack_fold_pmovzxwq:1818; CHECK: # %bb.0:1819; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1820; CHECK-NEXT: #APP1821; CHECK-NEXT: nop1822; CHECK-NEXT: #NO_APP1823; CHECK-NEXT: pmovzxwq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1824; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero1825; CHECK-NEXT: retq1826 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1827 %2 = shufflevector <8 x i16> %a0, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 9, i32 10, i32 1, i32 11, i32 12, i32 13>1828 %3 = bitcast <8 x i16> %2 to <2 x i64>1829 ret <2 x i64> %31830}1831 1832define <2 x i64> @stack_fold_pmuldq(<4 x i32> %a0, <4 x i32> %a1) {1833; CHECK-LABEL: stack_fold_pmuldq:1834; CHECK: # %bb.0:1835; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1836; CHECK-NEXT: #APP1837; CHECK-NEXT: nop1838; CHECK-NEXT: #NO_APP1839; CHECK-NEXT: pmuldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1840; CHECK-NEXT: retq1841 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1842 %2 = bitcast <4 x i32> %a0 to <2 x i64>1843 %3 = bitcast <4 x i32> %a1 to <2 x i64>1844 %4 = shl <2 x i64> %2, <i64 32, i64 32>1845 %5 = ashr <2 x i64> %4, <i64 32, i64 32>1846 %6 = shl <2 x i64> %3, <i64 32, i64 32>1847 %7 = ashr <2 x i64> %6, <i64 32, i64 32>1848 %8 = mul <2 x i64> %5, %71849 ret <2 x i64> %81850}1851 1852define <8 x i16> @stack_fold_pmulhrsw(<8 x i16> %a0, <8 x i16> %a1) {1853; CHECK-LABEL: stack_fold_pmulhrsw:1854; CHECK: # %bb.0:1855; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1856; CHECK-NEXT: #APP1857; CHECK-NEXT: nop1858; CHECK-NEXT: #NO_APP1859; CHECK-NEXT: pmulhrsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1860; CHECK-NEXT: retq1861 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1862 %2 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> %a0, <8 x i16> %a1)1863 ret <8 x i16> %21864}1865declare <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16>, <8 x i16>) nounwind readnone1866 1867define <8 x i16> @stack_fold_pmulhuw(<8 x i16> %a0, <8 x i16> %a1) {1868; CHECK-LABEL: stack_fold_pmulhuw:1869; CHECK: # %bb.0:1870; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1871; CHECK-NEXT: #APP1872; CHECK-NEXT: nop1873; CHECK-NEXT: #NO_APP1874; CHECK-NEXT: pmulhuw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1875; CHECK-NEXT: retq1876 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1877 %2 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %a0, <8 x i16> %a1)1878 ret <8 x i16> %21879}1880declare <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16>, <8 x i16>) nounwind readnone1881 1882define <8 x i16> @stack_fold_pmulhw(<8 x i16> %a0, <8 x i16> %a1) {1883; CHECK-LABEL: stack_fold_pmulhw:1884; CHECK: # %bb.0:1885; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1886; CHECK-NEXT: #APP1887; CHECK-NEXT: nop1888; CHECK-NEXT: #NO_APP1889; CHECK-NEXT: pmulhw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1890; CHECK-NEXT: retq1891 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1892 %2 = call <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16> %a0, <8 x i16> %a1)1893 ret <8 x i16> %21894}1895declare <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16>, <8 x i16>) nounwind readnone1896 1897define <4 x i32> @stack_fold_pmulld(<4 x i32> %a0, <4 x i32> %a1) {1898; CHECK-LABEL: stack_fold_pmulld:1899; CHECK: # %bb.0:1900; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1901; CHECK-NEXT: #APP1902; CHECK-NEXT: nop1903; CHECK-NEXT: #NO_APP1904; CHECK-NEXT: pmulld {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1905; CHECK-NEXT: retq1906 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1907 %2 = mul <4 x i32> %a0, %a11908 ret <4 x i32> %21909}1910 1911define <8 x i16> @stack_fold_pmullw(<8 x i16> %a0, <8 x i16> %a1) {1912; CHECK-LABEL: stack_fold_pmullw:1913; CHECK: # %bb.0:1914; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1915; CHECK-NEXT: #APP1916; CHECK-NEXT: nop1917; CHECK-NEXT: #NO_APP1918; CHECK-NEXT: pmullw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1919; CHECK-NEXT: retq1920 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1921 %2 = mul <8 x i16> %a0, %a11922 ret <8 x i16> %21923}1924 1925define <2 x i64> @stack_fold_pmuludq(<4 x i32> %a0, <4 x i32> %a1) {1926; CHECK-LABEL: stack_fold_pmuludq:1927; CHECK: # %bb.0:1928; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1929; CHECK-NEXT: #APP1930; CHECK-NEXT: nop1931; CHECK-NEXT: #NO_APP1932; CHECK-NEXT: pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1933; CHECK-NEXT: retq1934 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1935 %2 = bitcast <4 x i32> %a0 to <2 x i64>1936 %3 = bitcast <4 x i32> %a1 to <2 x i64>1937 %4 = and <2 x i64> %2, <i64 4294967295, i64 4294967295>1938 %5 = and <2 x i64> %3, <i64 4294967295, i64 4294967295>1939 %6 = mul <2 x i64> %4, %51940 ret <2 x i64> %61941}1942 1943define <16 x i8> @stack_fold_por(<16 x i8> %a0, <16 x i8> %a1) {1944; CHECK-LABEL: stack_fold_por:1945; CHECK: # %bb.0:1946; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1947; CHECK-NEXT: #APP1948; CHECK-NEXT: nop1949; CHECK-NEXT: #NO_APP1950; CHECK-NEXT: por {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1951; CHECK-NEXT: pcmpeqd %xmm1, %xmm11952; CHECK-NEXT: psubb %xmm1, %xmm01953; CHECK-NEXT: retq1954 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1955 %2 = or <16 x i8> %a0, %a11956 ; add forces execution domain1957 %3 = add <16 x i8> %2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>1958 ret <16 x i8> %31959}1960 1961define <2 x i64> @stack_fold_psadbw(<16 x i8> %a0, <16 x i8> %a1) {1962; CHECK-LABEL: stack_fold_psadbw:1963; CHECK: # %bb.0:1964; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1965; CHECK-NEXT: #APP1966; CHECK-NEXT: nop1967; CHECK-NEXT: #NO_APP1968; CHECK-NEXT: psadbw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1969; CHECK-NEXT: retq1970 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1971 %2 = call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> %a0, <16 x i8> %a1)1972 ret <2 x i64> %21973}1974declare <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8>, <16 x i8>) nounwind readnone1975 1976define <16 x i8> @stack_fold_pshufb(<16 x i8> %a0, <16 x i8> %a1) {1977; CHECK-LABEL: stack_fold_pshufb:1978; CHECK: # %bb.0:1979; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1980; CHECK-NEXT: #APP1981; CHECK-NEXT: nop1982; CHECK-NEXT: #NO_APP1983; CHECK-NEXT: pshufb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1984; CHECK-NEXT: retq1985 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1986 %2 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> %a1)1987 ret <16 x i8> %21988}1989declare <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8>, <16 x i8>) nounwind readnone1990 1991define <4 x i32> @stack_fold_pshufd(<4 x i32> %a0) {1992; CHECK-LABEL: stack_fold_pshufd:1993; CHECK: # %bb.0:1994; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1995; CHECK-NEXT: #APP1996; CHECK-NEXT: nop1997; CHECK-NEXT: #NO_APP1998; CHECK-NEXT: pshufd $27, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1999; CHECK-NEXT: # xmm0 = mem[3,2,1,0]2000; CHECK-NEXT: retq2001 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2002 %2 = shufflevector <4 x i32> %a0, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>2003 ret <4 x i32> %22004}2005 2006define <8 x i16> @stack_fold_pshufhw(<8 x i16> %a0) {2007; CHECK-LABEL: stack_fold_pshufhw:2008; CHECK: # %bb.0:2009; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2010; CHECK-NEXT: #APP2011; CHECK-NEXT: nop2012; CHECK-NEXT: #NO_APP2013; CHECK-NEXT: pshufhw $11, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2014; CHECK-NEXT: # xmm0 = mem[0,1,2,3,7,6,4,4]2015; CHECK-NEXT: retq2016 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2017 %2 = shufflevector <8 x i16> %a0, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 4, i32 4>2018 ret <8 x i16> %22019}2020 2021define <8 x i16> @stack_fold_pshuflw(<8 x i16> %a0) {2022; CHECK-LABEL: stack_fold_pshuflw:2023; CHECK: # %bb.0:2024; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2025; CHECK-NEXT: #APP2026; CHECK-NEXT: nop2027; CHECK-NEXT: #NO_APP2028; CHECK-NEXT: pshuflw $27, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2029; CHECK-NEXT: # xmm0 = mem[3,2,1,0,4,5,6,7]2030; CHECK-NEXT: retq2031 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2032 %2 = shufflevector <8 x i16> %a0, <8 x i16> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>2033 ret <8 x i16> %22034}2035 2036define <16 x i8> @stack_fold_psignb(<16 x i8> %a0, <16 x i8> %a1) {2037; CHECK-LABEL: stack_fold_psignb:2038; CHECK: # %bb.0:2039; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2040; CHECK-NEXT: #APP2041; CHECK-NEXT: nop2042; CHECK-NEXT: #NO_APP2043; CHECK-NEXT: psignb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2044; CHECK-NEXT: retq2045 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2046 %2 = call <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8> %a0, <16 x i8> %a1)2047 ret <16 x i8> %22048}2049declare <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8>, <16 x i8>) nounwind readnone2050 2051define <4 x i32> @stack_fold_psignd(<4 x i32> %a0, <4 x i32> %a1) {2052; CHECK-LABEL: stack_fold_psignd:2053; CHECK: # %bb.0:2054; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2055; CHECK-NEXT: #APP2056; CHECK-NEXT: nop2057; CHECK-NEXT: #NO_APP2058; CHECK-NEXT: psignd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2059; CHECK-NEXT: retq2060 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2061 %2 = call <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32> %a0, <4 x i32> %a1)2062 ret <4 x i32> %22063}2064declare <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32>, <4 x i32>) nounwind readnone2065 2066define <8 x i16> @stack_fold_psignw(<8 x i16> %a0, <8 x i16> %a1) {2067; CHECK-LABEL: stack_fold_psignw:2068; CHECK: # %bb.0:2069; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2070; CHECK-NEXT: #APP2071; CHECK-NEXT: nop2072; CHECK-NEXT: #NO_APP2073; CHECK-NEXT: psignw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2074; CHECK-NEXT: retq2075 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2076 %2 = call <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16> %a0, <8 x i16> %a1)2077 ret <8 x i16> %22078}2079declare <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16>, <8 x i16>) nounwind readnone2080 2081define <4 x i32> @stack_fold_pslld(<4 x i32> %a0, <4 x i32> %a1) {2082; CHECK-LABEL: stack_fold_pslld:2083; CHECK: # %bb.0:2084; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2085; CHECK-NEXT: #APP2086; CHECK-NEXT: nop2087; CHECK-NEXT: #NO_APP2088; CHECK-NEXT: pslld {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2089; CHECK-NEXT: retq2090 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2091 %2 = call <4 x i32> @llvm.x86.sse2.psll.d(<4 x i32> %a0, <4 x i32> %a1)2092 ret <4 x i32> %22093}2094declare <4 x i32> @llvm.x86.sse2.psll.d(<4 x i32>, <4 x i32>) nounwind readnone2095 2096define <2 x i64> @stack_fold_psllq(<2 x i64> %a0, <2 x i64> %a1) {2097; CHECK-LABEL: stack_fold_psllq:2098; CHECK: # %bb.0:2099; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2100; CHECK-NEXT: #APP2101; CHECK-NEXT: nop2102; CHECK-NEXT: #NO_APP2103; CHECK-NEXT: psllq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2104; CHECK-NEXT: retq2105 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2106 %2 = call <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64> %a0, <2 x i64> %a1)2107 ret <2 x i64> %22108}2109declare <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64>, <2 x i64>) nounwind readnone2110 2111define <8 x i16> @stack_fold_psllw(<8 x i16> %a0, <8 x i16> %a1) {2112; CHECK-LABEL: stack_fold_psllw:2113; CHECK: # %bb.0:2114; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2115; CHECK-NEXT: #APP2116; CHECK-NEXT: nop2117; CHECK-NEXT: #NO_APP2118; CHECK-NEXT: psllw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2119; CHECK-NEXT: retq2120 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2121 %2 = call <8 x i16> @llvm.x86.sse2.psll.w(<8 x i16> %a0, <8 x i16> %a1)2122 ret <8 x i16> %22123}2124declare <8 x i16> @llvm.x86.sse2.psll.w(<8 x i16>, <8 x i16>) nounwind readnone2125 2126define <4 x i32> @stack_fold_psrad(<4 x i32> %a0, <4 x i32> %a1) {2127; CHECK-LABEL: stack_fold_psrad:2128; CHECK: # %bb.0:2129; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2130; CHECK-NEXT: #APP2131; CHECK-NEXT: nop2132; CHECK-NEXT: #NO_APP2133; CHECK-NEXT: psrad {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2134; CHECK-NEXT: retq2135 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2136 %2 = call <4 x i32> @llvm.x86.sse2.psra.d(<4 x i32> %a0, <4 x i32> %a1)2137 ret <4 x i32> %22138}2139declare <4 x i32> @llvm.x86.sse2.psra.d(<4 x i32>, <4 x i32>) nounwind readnone2140 2141define <8 x i16> @stack_fold_psraw(<8 x i16> %a0, <8 x i16> %a1) {2142; CHECK-LABEL: stack_fold_psraw:2143; CHECK: # %bb.0:2144; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2145; CHECK-NEXT: #APP2146; CHECK-NEXT: nop2147; CHECK-NEXT: #NO_APP2148; CHECK-NEXT: psraw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2149; CHECK-NEXT: retq2150 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2151 %2 = call <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16> %a0, <8 x i16> %a1)2152 ret <8 x i16> %22153}2154declare <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16>, <8 x i16>) nounwind readnone2155 2156define <4 x i32> @stack_fold_psrld(<4 x i32> %a0, <4 x i32> %a1) {2157; CHECK-LABEL: stack_fold_psrld:2158; CHECK: # %bb.0:2159; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2160; CHECK-NEXT: #APP2161; CHECK-NEXT: nop2162; CHECK-NEXT: #NO_APP2163; CHECK-NEXT: psrld {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2164; CHECK-NEXT: retq2165 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2166 %2 = call <4 x i32> @llvm.x86.sse2.psrl.d(<4 x i32> %a0, <4 x i32> %a1)2167 ret <4 x i32> %22168}2169declare <4 x i32> @llvm.x86.sse2.psrl.d(<4 x i32>, <4 x i32>) nounwind readnone2170 2171define <2 x i64> @stack_fold_psrlq(<2 x i64> %a0, <2 x i64> %a1) {2172; CHECK-LABEL: stack_fold_psrlq:2173; CHECK: # %bb.0:2174; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2175; CHECK-NEXT: #APP2176; CHECK-NEXT: nop2177; CHECK-NEXT: #NO_APP2178; CHECK-NEXT: psrlq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2179; CHECK-NEXT: retq2180 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2181 %2 = call <2 x i64> @llvm.x86.sse2.psrl.q(<2 x i64> %a0, <2 x i64> %a1)2182 ret <2 x i64> %22183}2184declare <2 x i64> @llvm.x86.sse2.psrl.q(<2 x i64>, <2 x i64>) nounwind readnone2185 2186define <8 x i16> @stack_fold_psrlw(<8 x i16> %a0, <8 x i16> %a1) {2187; CHECK-LABEL: stack_fold_psrlw:2188; CHECK: # %bb.0:2189; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2190; CHECK-NEXT: #APP2191; CHECK-NEXT: nop2192; CHECK-NEXT: #NO_APP2193; CHECK-NEXT: psrlw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2194; CHECK-NEXT: retq2195 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2196 %2 = call <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16> %a0, <8 x i16> %a1)2197 ret <8 x i16> %22198}2199declare <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16>, <8 x i16>) nounwind readnone2200 2201define <16 x i8> @stack_fold_psubb(<16 x i8> %a0, <16 x i8> %a1) {2202; CHECK-LABEL: stack_fold_psubb:2203; CHECK: # %bb.0:2204; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2205; CHECK-NEXT: #APP2206; CHECK-NEXT: nop2207; CHECK-NEXT: #NO_APP2208; CHECK-NEXT: psubb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2209; CHECK-NEXT: retq2210 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2211 %2 = sub <16 x i8> %a0, %a12212 ret <16 x i8> %22213}2214 2215define <4 x i32> @stack_fold_psubd(<4 x i32> %a0, <4 x i32> %a1) {2216; CHECK-LABEL: stack_fold_psubd:2217; CHECK: # %bb.0:2218; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2219; CHECK-NEXT: #APP2220; CHECK-NEXT: nop2221; CHECK-NEXT: #NO_APP2222; CHECK-NEXT: psubd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2223; CHECK-NEXT: retq2224 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2225 %2 = sub <4 x i32> %a0, %a12226 ret <4 x i32> %22227}2228 2229define <2 x i64> @stack_fold_psubq(<2 x i64> %a0, <2 x i64> %a1) {2230; CHECK-LABEL: stack_fold_psubq:2231; CHECK: # %bb.0:2232; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2233; CHECK-NEXT: #APP2234; CHECK-NEXT: nop2235; CHECK-NEXT: #NO_APP2236; CHECK-NEXT: psubq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2237; CHECK-NEXT: retq2238 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2239 %2 = sub <2 x i64> %a0, %a12240 ret <2 x i64> %22241}2242 2243define <16 x i8> @stack_fold_psubsb(<16 x i8> %a0, <16 x i8> %a1) {2244; CHECK-LABEL: stack_fold_psubsb:2245; CHECK: # %bb.0:2246; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2247; CHECK-NEXT: #APP2248; CHECK-NEXT: nop2249; CHECK-NEXT: #NO_APP2250; CHECK-NEXT: psubsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2251; CHECK-NEXT: retq2252 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2253 %2 = call <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8> %a0, <16 x i8> %a1)2254 ret <16 x i8> %22255}2256declare <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8>, <16 x i8>) nounwind readnone2257 2258define <8 x i16> @stack_fold_psubsw(<8 x i16> %a0, <8 x i16> %a1) {2259; CHECK-LABEL: stack_fold_psubsw:2260; CHECK: # %bb.0:2261; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2262; CHECK-NEXT: #APP2263; CHECK-NEXT: nop2264; CHECK-NEXT: #NO_APP2265; CHECK-NEXT: psubsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2266; CHECK-NEXT: retq2267 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2268 %2 = call <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16> %a0, <8 x i16> %a1)2269 ret <8 x i16> %22270}2271declare <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16>, <8 x i16>) nounwind readnone2272 2273define <16 x i8> @stack_fold_psubusb(<16 x i8> %a0, <16 x i8> %a1) {2274; CHECK-LABEL: stack_fold_psubusb:2275; CHECK: # %bb.0:2276; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2277; CHECK-NEXT: #APP2278; CHECK-NEXT: nop2279; CHECK-NEXT: #NO_APP2280; CHECK-NEXT: psubusb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2281; CHECK-NEXT: retq2282 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2283 %2 = call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %a0, <16 x i8> %a1)2284 ret <16 x i8> %22285}2286declare <16 x i8> @llvm.usub.sat.v16i8(<16 x i8>, <16 x i8>) nounwind readnone2287 2288define <8 x i16> @stack_fold_psubusw(<8 x i16> %a0, <8 x i16> %a1) {2289; CHECK-LABEL: stack_fold_psubusw:2290; CHECK: # %bb.0:2291; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2292; CHECK-NEXT: #APP2293; CHECK-NEXT: nop2294; CHECK-NEXT: #NO_APP2295; CHECK-NEXT: psubusw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2296; CHECK-NEXT: retq2297 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2298 %2 = call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %a0, <8 x i16> %a1)2299 ret <8 x i16> %22300}2301declare <8 x i16> @llvm.usub.sat.v8i16(<8 x i16>, <8 x i16>) nounwind readnone2302 2303define <8 x i16> @stack_fold_psubw(<8 x i16> %a0, <8 x i16> %a1) {2304; CHECK-LABEL: stack_fold_psubw:2305; CHECK: # %bb.0:2306; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2307; CHECK-NEXT: #APP2308; CHECK-NEXT: nop2309; CHECK-NEXT: #NO_APP2310; CHECK-NEXT: psubw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2311; CHECK-NEXT: retq2312 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2313 %2 = sub <8 x i16> %a0, %a12314 ret <8 x i16> %22315}2316 2317define i32 @stack_fold_ptest(<2 x i64> %a0, <2 x i64> %a1) {2318; CHECK-LABEL: stack_fold_ptest:2319; CHECK: # %bb.0:2320; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2321; CHECK-NEXT: #APP2322; CHECK-NEXT: nop2323; CHECK-NEXT: #NO_APP2324; CHECK-NEXT: xorl %eax, %eax2325; CHECK-NEXT: ptest {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2326; CHECK-NEXT: setb %al2327; CHECK-NEXT: retq2328 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2329 %2 = call i32 @llvm.x86.sse41.ptestc(<2 x i64> %a0, <2 x i64> %a1)2330 ret i32 %22331}2332declare i32 @llvm.x86.sse41.ptestc(<2 x i64>, <2 x i64>) nounwind readnone2333 2334define <16 x i8> @stack_fold_punpckhbw(<16 x i8> %a0, <16 x i8> %a1) {2335; CHECK-LABEL: stack_fold_punpckhbw:2336; CHECK: # %bb.0:2337; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2338; CHECK-NEXT: #APP2339; CHECK-NEXT: nop2340; CHECK-NEXT: #NO_APP2341; CHECK-NEXT: punpckhbw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2342; CHECK-NEXT: # xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15]2343; CHECK-NEXT: retq2344 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2345 %2 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>2346 ret <16 x i8> %22347}2348 2349define <4 x i32> @stack_fold_punpckhdq(<4 x i32> %a0, <4 x i32> %a1) {2350; CHECK-LABEL: stack_fold_punpckhdq:2351; CHECK: # %bb.0:2352; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2353; CHECK-NEXT: #APP2354; CHECK-NEXT: nop2355; CHECK-NEXT: #NO_APP2356; CHECK-NEXT: punpckhdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2357; CHECK-NEXT: # xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]2358; CHECK-NEXT: pcmpeqd %xmm1, %xmm12359; CHECK-NEXT: psubd %xmm1, %xmm02360; CHECK-NEXT: retq2361 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2362 %2 = shufflevector <4 x i32> %a0, <4 x i32> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>2363 ; add forces execution domain2364 %3 = add <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>2365 ret <4 x i32> %32366}2367 2368define <2 x i64> @stack_fold_punpckhqdq(<2 x i64> %a0, <2 x i64> %a1) {2369; CHECK-LABEL: stack_fold_punpckhqdq:2370; CHECK: # %bb.0:2371; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2372; CHECK-NEXT: #APP2373; CHECK-NEXT: nop2374; CHECK-NEXT: #NO_APP2375; CHECK-NEXT: punpckhqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2376; CHECK-NEXT: # xmm0 = xmm0[1],mem[1]2377; CHECK-NEXT: pcmpeqd %xmm1, %xmm12378; CHECK-NEXT: psubq %xmm1, %xmm02379; CHECK-NEXT: retq2380 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2381 %2 = shufflevector <2 x i64> %a0, <2 x i64> %a1, <2 x i32> <i32 1, i32 3>2382 ; add forces execution domain2383 %3 = add <2 x i64> %2, <i64 1, i64 1>2384 ret <2 x i64> %32385}2386 2387define <8 x i16> @stack_fold_punpckhwd(<8 x i16> %a0, <8 x i16> %a1) {2388; CHECK-LABEL: stack_fold_punpckhwd:2389; CHECK: # %bb.0:2390; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2391; CHECK-NEXT: #APP2392; CHECK-NEXT: nop2393; CHECK-NEXT: #NO_APP2394; CHECK-NEXT: punpckhwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2395; CHECK-NEXT: # xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7]2396; CHECK-NEXT: retq2397 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2398 %2 = shufflevector <8 x i16> %a0, <8 x i16> %a1, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>2399 ret <8 x i16> %22400}2401 2402define <16 x i8> @stack_fold_punpcklbw(<16 x i8> %a0, <16 x i8> %a1) {2403; CHECK-LABEL: stack_fold_punpcklbw:2404; CHECK: # %bb.0:2405; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2406; CHECK-NEXT: #APP2407; CHECK-NEXT: nop2408; CHECK-NEXT: #NO_APP2409; CHECK-NEXT: punpcklbw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2410; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7]2411; CHECK-NEXT: retq2412 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2413 %2 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>2414 ret <16 x i8> %22415}2416 2417define <4 x i32> @stack_fold_punpckldq(<4 x i32> %a0, <4 x i32> %a1) {2418; CHECK-LABEL: stack_fold_punpckldq:2419; CHECK: # %bb.0:2420; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2421; CHECK-NEXT: #APP2422; CHECK-NEXT: nop2423; CHECK-NEXT: #NO_APP2424; CHECK-NEXT: punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2425; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2426; CHECK-NEXT: pcmpeqd %xmm1, %xmm12427; CHECK-NEXT: psubd %xmm1, %xmm02428; CHECK-NEXT: retq2429 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2430 %2 = shufflevector <4 x i32> %a0, <4 x i32> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>2431 ; add forces execution domain2432 %3 = add <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>2433 ret <4 x i32> %32434}2435 2436define <2 x i64> @stack_fold_punpcklqdq(<2 x i64> %a0, <2 x i64> %a1) {2437; CHECK-LABEL: stack_fold_punpcklqdq:2438; CHECK: # %bb.0:2439; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2440; CHECK-NEXT: #APP2441; CHECK-NEXT: nop2442; CHECK-NEXT: #NO_APP2443; CHECK-NEXT: punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2444; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]2445; CHECK-NEXT: pcmpeqd %xmm1, %xmm12446; CHECK-NEXT: psubq %xmm1, %xmm02447; CHECK-NEXT: retq2448 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2449 %2 = shufflevector <2 x i64> %a0, <2 x i64> %a1, <2 x i32> <i32 0, i32 2>2450 ; add forces execution domain2451 %3 = add <2 x i64> %2, <i64 1, i64 1>2452 ret <2 x i64> %32453}2454 2455define <8 x i16> @stack_fold_punpcklwd(<8 x i16> %a0, <8 x i16> %a1) {2456; CHECK-LABEL: stack_fold_punpcklwd:2457; CHECK: # %bb.0:2458; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2459; CHECK-NEXT: #APP2460; CHECK-NEXT: nop2461; CHECK-NEXT: #NO_APP2462; CHECK-NEXT: punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2463; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2464; CHECK-NEXT: retq2465 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2466 %2 = shufflevector <8 x i16> %a0, <8 x i16> %a1, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>2467 ret <8 x i16> %22468}2469 2470define <16 x i8> @stack_fold_pxor(<16 x i8> %a0, <16 x i8> %a1) {2471; CHECK-LABEL: stack_fold_pxor:2472; CHECK: # %bb.0:2473; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2474; CHECK-NEXT: #APP2475; CHECK-NEXT: nop2476; CHECK-NEXT: #NO_APP2477; CHECK-NEXT: pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2478; CHECK-NEXT: pcmpeqd %xmm1, %xmm12479; CHECK-NEXT: psubb %xmm1, %xmm02480; CHECK-NEXT: retq2481 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2482 %2 = xor <16 x i8> %a0, %a12483 ; add forces execution domain2484 %3 = add <16 x i8> %2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>2485 ret <16 x i8> %32486}2487