brintos

brintos / llvm-project-archived public Read only

0
0
Text · 93.1 KiB · 46fd1ab Raw
2087 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=+avx,+aes,+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:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill16; CHECK-NEXT:    #APP17; CHECK-NEXT:    nop18; CHECK-NEXT:    #NO_APP19; CHECK-NEXT:    vaesdec {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill31; CHECK-NEXT:    #APP32; CHECK-NEXT:    nop33; CHECK-NEXT:    #NO_APP34; CHECK-NEXT:    vaesdeclast {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill46; CHECK-NEXT:    #APP47; CHECK-NEXT:    nop48; CHECK-NEXT:    #NO_APP49; CHECK-NEXT:    vaesenc {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill61; CHECK-NEXT:    #APP62; CHECK-NEXT:    nop63; CHECK-NEXT:    #NO_APP64; CHECK-NEXT:    vaesenclast {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill76; CHECK-NEXT:    #APP77; CHECK-NEXT:    nop78; CHECK-NEXT:    #NO_APP79; CHECK-NEXT:    vaesimc {{[-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:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill91; CHECK-NEXT:    #APP92; CHECK-NEXT:    nop93; CHECK-NEXT:    #NO_APP94; CHECK-NEXT:    vaeskeygenassist $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 <4 x i32> @stack_fold_movd_load(i32 %a0) {103; CHECK-LABEL: stack_fold_movd_load: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 %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill124; CHECK-NEXT:    #APP125; CHECK-NEXT:    nop126; CHECK-NEXT:    #NO_APP127; CHECK-NEXT:    vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload128; CHECK-NEXT:    # xmm0 = mem[0],zero,zero,zero129; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1130; CHECK-NEXT:    vpsubd %xmm1, %xmm0, %xmm0131; CHECK-NEXT:    popq %rbx132; CHECK-NEXT:    .cfi_def_cfa_offset 48133; CHECK-NEXT:    popq %r12134; CHECK-NEXT:    .cfi_def_cfa_offset 40135; CHECK-NEXT:    popq %r13136; CHECK-NEXT:    .cfi_def_cfa_offset 32137; CHECK-NEXT:    popq %r14138; CHECK-NEXT:    .cfi_def_cfa_offset 24139; CHECK-NEXT:    popq %r15140; CHECK-NEXT:    .cfi_def_cfa_offset 16141; CHECK-NEXT:    popq %rbp142; CHECK-NEXT:    .cfi_def_cfa_offset 8143; CHECK-NEXT:    retq144  %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}"()145  %2 = insertelement <4 x i32> zeroinitializer, i32 %a0, i32 0146  ; add forces execution domain147  %3 = add <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>148  ret <4 x i32> %3149}150 151define i32 @stack_fold_movd_store(<4 x i32> %a0, <4 x i32> %a1) {152; CHECK-LABEL: stack_fold_movd_store:153; CHECK:       # %bb.0:154; CHECK-NEXT:    pushq %rbp155; CHECK-NEXT:    .cfi_def_cfa_offset 16156; CHECK-NEXT:    pushq %r15157; CHECK-NEXT:    .cfi_def_cfa_offset 24158; CHECK-NEXT:    pushq %r14159; CHECK-NEXT:    .cfi_def_cfa_offset 32160; CHECK-NEXT:    pushq %r13161; CHECK-NEXT:    .cfi_def_cfa_offset 40162; CHECK-NEXT:    pushq %r12163; CHECK-NEXT:    .cfi_def_cfa_offset 48164; CHECK-NEXT:    pushq %rbx165; CHECK-NEXT:    .cfi_def_cfa_offset 56166; CHECK-NEXT:    .cfi_offset %rbx, -56167; CHECK-NEXT:    .cfi_offset %r12, -48168; CHECK-NEXT:    .cfi_offset %r13, -40169; CHECK-NEXT:    .cfi_offset %r14, -32170; CHECK-NEXT:    .cfi_offset %r15, -24171; CHECK-NEXT:    .cfi_offset %rbp, -16172; CHECK-NEXT:    vpaddd %xmm1, %xmm0, %xmm0173; CHECK-NEXT:    vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill174; CHECK-NEXT:    #APP175; CHECK-NEXT:    nop176; CHECK-NEXT:    #NO_APP177; CHECK-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload178; CHECK-NEXT:    popq %rbx179; CHECK-NEXT:    .cfi_def_cfa_offset 48180; CHECK-NEXT:    popq %r12181; CHECK-NEXT:    .cfi_def_cfa_offset 40182; CHECK-NEXT:    popq %r13183; CHECK-NEXT:    .cfi_def_cfa_offset 32184; CHECK-NEXT:    popq %r14185; CHECK-NEXT:    .cfi_def_cfa_offset 24186; CHECK-NEXT:    popq %r15187; CHECK-NEXT:    .cfi_def_cfa_offset 16188; CHECK-NEXT:    popq %rbp189; CHECK-NEXT:    .cfi_def_cfa_offset 8190; CHECK-NEXT:    retq191  ; add forces execution domain192  %1 = add <4 x i32> %a0, %a1193  %2 = extractelement <4 x i32> %1, i32 0194  %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}"()195  ret i32 %2196}197 198define <2 x i64> @stack_fold_movq_load(<2 x i64> %a0) {199; CHECK-LABEL: stack_fold_movq_load:200; CHECK:       # %bb.0:201; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill202; CHECK-NEXT:    #APP203; CHECK-NEXT:    nop204; CHECK-NEXT:    #NO_APP205; CHECK-NEXT:    vmovq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload206; CHECK-NEXT:    # xmm0 = mem[0],zero207; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1208; CHECK-NEXT:    vpsubq %xmm1, %xmm0, %xmm0209; CHECK-NEXT:    retq210  %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}"()211  %2 = shufflevector <2 x i64> %a0, <2 x i64> zeroinitializer, <2 x i32> <i32 0, i32 2>212  ; add forces execution domain213  %3 = add <2 x i64> %2, <i64 1, i64 1>214  ret <2 x i64> %3215}216 217define i64 @stack_fold_movq_store(<2 x i64> %a0, <2 x i64> %a1) {218; CHECK-LABEL: stack_fold_movq_store:219; CHECK:       # %bb.0:220; CHECK-NEXT:    pushq %rbp221; CHECK-NEXT:    .cfi_def_cfa_offset 16222; CHECK-NEXT:    pushq %r15223; CHECK-NEXT:    .cfi_def_cfa_offset 24224; CHECK-NEXT:    pushq %r14225; CHECK-NEXT:    .cfi_def_cfa_offset 32226; CHECK-NEXT:    pushq %r13227; CHECK-NEXT:    .cfi_def_cfa_offset 40228; CHECK-NEXT:    pushq %r12229; CHECK-NEXT:    .cfi_def_cfa_offset 48230; CHECK-NEXT:    pushq %rbx231; CHECK-NEXT:    .cfi_def_cfa_offset 56232; CHECK-NEXT:    .cfi_offset %rbx, -56233; CHECK-NEXT:    .cfi_offset %r12, -48234; CHECK-NEXT:    .cfi_offset %r13, -40235; CHECK-NEXT:    .cfi_offset %r14, -32236; CHECK-NEXT:    .cfi_offset %r15, -24237; CHECK-NEXT:    .cfi_offset %rbp, -16238; CHECK-NEXT:    vpaddq %xmm1, %xmm0, %xmm0239; CHECK-NEXT:    vmovq %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill240; CHECK-NEXT:    #APP241; CHECK-NEXT:    nop242; CHECK-NEXT:    #NO_APP243; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload244; CHECK-NEXT:    popq %rbx245; CHECK-NEXT:    .cfi_def_cfa_offset 48246; CHECK-NEXT:    popq %r12247; CHECK-NEXT:    .cfi_def_cfa_offset 40248; CHECK-NEXT:    popq %r13249; CHECK-NEXT:    .cfi_def_cfa_offset 32250; CHECK-NEXT:    popq %r14251; CHECK-NEXT:    .cfi_def_cfa_offset 24252; CHECK-NEXT:    popq %r15253; CHECK-NEXT:    .cfi_def_cfa_offset 16254; CHECK-NEXT:    popq %rbp255; CHECK-NEXT:    .cfi_def_cfa_offset 8256; CHECK-NEXT:    retq257  ; add forces execution domain258  %1 = add <2 x i64> %a0, %a1259  %2 = extractelement <2 x i64> %1, i32 0260  %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}"()261  ret i64 %2262}263 264define <8 x i16> @stack_fold_mpsadbw(<16 x i8> %a0, <16 x i8> %a1) {265; CHECK-LABEL: stack_fold_mpsadbw:266; CHECK:       # %bb.0:267; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill268; CHECK-NEXT:    #APP269; CHECK-NEXT:    nop270; CHECK-NEXT:    #NO_APP271; CHECK-NEXT:    vmpsadbw $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload272; CHECK-NEXT:    retq273  %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}"()274  %2 = call <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8> %a0, <16 x i8> %a1, i8 7)275  ret <8 x i16> %2276}277declare <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8>, <16 x i8>, i8) nounwind readnone278 279define <16 x i8> @stack_fold_pabsb(<16 x i8> %a0) {280; CHECK-LABEL: stack_fold_pabsb:281; CHECK:       # %bb.0:282; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill283; CHECK-NEXT:    #APP284; CHECK-NEXT:    nop285; CHECK-NEXT:    #NO_APP286; CHECK-NEXT:    vpabsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload287; CHECK-NEXT:    retq288  %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}"()289  %2 = icmp sgt <16 x i8> %a0, zeroinitializer290  %3 = sub <16 x i8> zeroinitializer, %a0291  %4 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %3292  ret <16 x i8> %4293}294 295define <4 x i32> @stack_fold_pabsd(<4 x i32> %a0) {296; CHECK-LABEL: stack_fold_pabsd:297; CHECK:       # %bb.0:298; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill299; CHECK-NEXT:    #APP300; CHECK-NEXT:    nop301; CHECK-NEXT:    #NO_APP302; CHECK-NEXT:    vpabsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload303; CHECK-NEXT:    retq304  %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}"()305  %2 = icmp sgt <4 x i32> %a0, zeroinitializer306  %3 = sub <4 x i32> zeroinitializer, %a0307  %4 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %3308  ret <4 x i32> %4309}310 311define <8 x i16> @stack_fold_pabsw(<8 x i16> %a0) {312; CHECK-LABEL: stack_fold_pabsw:313; CHECK:       # %bb.0:314; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill315; CHECK-NEXT:    #APP316; CHECK-NEXT:    nop317; CHECK-NEXT:    #NO_APP318; CHECK-NEXT:    vpabsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload319; CHECK-NEXT:    retq320  %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}"()321  %2 = icmp sgt <8 x i16> %a0, zeroinitializer322  %3 = sub <8 x i16> zeroinitializer, %a0323  %4 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %3324  ret <8 x i16> %4325}326 327define <8 x i16> @stack_fold_packssdw(<4 x i32> %a0, <4 x i32> %a1) {328; CHECK-LABEL: stack_fold_packssdw:329; CHECK:       # %bb.0:330; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill331; CHECK-NEXT:    #APP332; CHECK-NEXT:    nop333; CHECK-NEXT:    #NO_APP334; CHECK-NEXT:    vpackssdw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload335; CHECK-NEXT:    retq336  %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}"()337  %2 = call <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32> %a0, <4 x i32> %a1)338  ret <8 x i16> %2339}340declare <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32>, <4 x i32>) nounwind readnone341 342define <16 x i8> @stack_fold_packsswb(<8 x i16> %a0, <8 x i16> %a1) {343; CHECK-LABEL: stack_fold_packsswb:344; CHECK:       # %bb.0:345; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill346; CHECK-NEXT:    #APP347; CHECK-NEXT:    nop348; CHECK-NEXT:    #NO_APP349; CHECK-NEXT:    vpacksswb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload350; CHECK-NEXT:    retq351  %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}"()352  %2 = call <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16> %a0, <8 x i16> %a1)353  ret <16 x i8> %2354}355declare <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16>, <8 x i16>) nounwind readnone356 357define <8 x i16> @stack_fold_packusdw(<4 x i32> %a0, <4 x i32> %a1) {358; CHECK-LABEL: stack_fold_packusdw:359; CHECK:       # %bb.0:360; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill361; CHECK-NEXT:    #APP362; CHECK-NEXT:    nop363; CHECK-NEXT:    #NO_APP364; CHECK-NEXT:    vpackusdw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload365; CHECK-NEXT:    retq366  %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}"()367  %2 = call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %a0, <4 x i32> %a1)368  ret <8 x i16> %2369}370declare <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32>, <4 x i32>) nounwind readnone371 372define <16 x i8> @stack_fold_packuswb(<8 x i16> %a0, <8 x i16> %a1) {373; CHECK-LABEL: stack_fold_packuswb:374; CHECK:       # %bb.0:375; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill376; CHECK-NEXT:    #APP377; CHECK-NEXT:    nop378; CHECK-NEXT:    #NO_APP379; CHECK-NEXT:    vpackuswb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload380; CHECK-NEXT:    retq381  %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}"()382  %2 = call <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16> %a0, <8 x i16> %a1)383  ret <16 x i8> %2384}385declare <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16>, <8 x i16>) nounwind readnone386 387define <16 x i8> @stack_fold_paddb(<16 x i8> %a0, <16 x i8> %a1) {388; CHECK-LABEL: stack_fold_paddb:389; CHECK:       # %bb.0:390; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill391; CHECK-NEXT:    #APP392; CHECK-NEXT:    nop393; CHECK-NEXT:    #NO_APP394; CHECK-NEXT:    vpaddb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload395; CHECK-NEXT:    retq396  %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}"()397  %2 = add <16 x i8> %a0, %a1398  ret <16 x i8> %2399}400 401define <4 x i32> @stack_fold_paddd(<4 x i32> %a0, <4 x i32> %a1) {402; CHECK-LABEL: stack_fold_paddd:403; CHECK:       # %bb.0:404; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill405; CHECK-NEXT:    #APP406; CHECK-NEXT:    nop407; CHECK-NEXT:    #NO_APP408; CHECK-NEXT:    vpaddd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload409; CHECK-NEXT:    retq410  %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}"()411  %2 = add <4 x i32> %a0, %a1412  ret <4 x i32> %2413}414 415define <2 x i64> @stack_fold_paddq(<2 x i64> %a0, <2 x i64> %a1) {416; CHECK-LABEL: stack_fold_paddq:417; CHECK:       # %bb.0:418; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill419; CHECK-NEXT:    #APP420; CHECK-NEXT:    nop421; CHECK-NEXT:    #NO_APP422; CHECK-NEXT:    vpaddq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload423; CHECK-NEXT:    retq424  %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}"()425  %2 = add <2 x i64> %a0, %a1426  ret <2 x i64> %2427}428 429define <16 x i8> @stack_fold_paddsb(<16 x i8> %a0, <16 x i8> %a1) {430; CHECK-LABEL: stack_fold_paddsb:431; CHECK:       # %bb.0:432; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill433; CHECK-NEXT:    #APP434; CHECK-NEXT:    nop435; CHECK-NEXT:    #NO_APP436; CHECK-NEXT:    vpaddsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload437; CHECK-NEXT:    retq438  %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}"()439  %2 = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %a0, <16 x i8> %a1)440  ret <16 x i8> %2441}442declare <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8>, <16 x i8>) nounwind readnone443 444define <8 x i16> @stack_fold_paddsw(<8 x i16> %a0, <8 x i16> %a1) {445; CHECK-LABEL: stack_fold_paddsw:446; CHECK:       # %bb.0:447; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill448; CHECK-NEXT:    #APP449; CHECK-NEXT:    nop450; CHECK-NEXT:    #NO_APP451; CHECK-NEXT:    vpaddsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload452; CHECK-NEXT:    retq453  %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}"()454  %2 = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %a0, <8 x i16> %a1)455  ret <8 x i16> %2456}457declare <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16>, <8 x i16>) nounwind readnone458 459define <16 x i8> @stack_fold_paddusb(<16 x i8> %a0, <16 x i8> %a1) {460; CHECK-LABEL: stack_fold_paddusb:461; CHECK:       # %bb.0:462; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill463; CHECK-NEXT:    #APP464; CHECK-NEXT:    nop465; CHECK-NEXT:    #NO_APP466; CHECK-NEXT:    vpaddusb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload467; CHECK-NEXT:    retq468  %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}"()469  %2 = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %a0, <16 x i8> %a1)470  ret <16 x i8> %2471}472declare <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8>, <16 x i8>) nounwind readnone473 474define <8 x i16> @stack_fold_paddusw(<8 x i16> %a0, <8 x i16> %a1) {475; CHECK-LABEL: stack_fold_paddusw:476; CHECK:       # %bb.0:477; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill478; CHECK-NEXT:    #APP479; CHECK-NEXT:    nop480; CHECK-NEXT:    #NO_APP481; CHECK-NEXT:    vpaddusw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload482; CHECK-NEXT:    retq483  %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}"()484  %2 = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %a0, <8 x i16> %a1)485  ret <8 x i16> %2486}487declare <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16>, <8 x i16>) nounwind readnone488 489define <8 x i16> @stack_fold_paddw(<8 x i16> %a0, <8 x i16> %a1) {490; CHECK-LABEL: stack_fold_paddw:491; CHECK:       # %bb.0:492; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill493; CHECK-NEXT:    #APP494; CHECK-NEXT:    nop495; CHECK-NEXT:    #NO_APP496; CHECK-NEXT:    vpaddw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload497; CHECK-NEXT:    retq498  %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}"()499  %2 = add <8 x i16> %a0, %a1500  ret <8 x i16> %2501}502 503define <16 x i8> @stack_fold_palignr(<16 x i8> %a0, <16 x i8> %a1) {504; CHECK-LABEL: stack_fold_palignr:505; CHECK:       # %bb.0:506; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill507; CHECK-NEXT:    #APP508; CHECK-NEXT:    nop509; CHECK-NEXT:    #NO_APP510; CHECK-NEXT:    vpalignr $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload511; CHECK-NEXT:    # xmm0 = mem[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm0[0]512; CHECK-NEXT:    retq513  %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}"()514  %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>515  ret <16 x i8> %2516}517 518define <16 x i8> @stack_fold_pand(<16 x i8> %a0, <16 x i8> %a1) {519; CHECK-LABEL: stack_fold_pand:520; CHECK:       # %bb.0:521; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill522; CHECK-NEXT:    #APP523; CHECK-NEXT:    nop524; CHECK-NEXT:    #NO_APP525; CHECK-NEXT:    vpand {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload526; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1527; CHECK-NEXT:    vpsubb %xmm1, %xmm0, %xmm0528; CHECK-NEXT:    retq529  %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}"()530  %2 = and <16 x i8> %a0, %a1531  ; add forces execution domain532  %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>533  ret <16 x i8> %3534}535 536define <16 x i8> @stack_fold_pandn(<16 x i8> %a0, <16 x i8> %a1) {537; CHECK-LABEL: stack_fold_pandn:538; CHECK:       # %bb.0:539; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill540; CHECK-NEXT:    #APP541; CHECK-NEXT:    nop542; CHECK-NEXT:    #NO_APP543; CHECK-NEXT:    vpandn {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload544; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1545; CHECK-NEXT:    vpsubb %xmm1, %xmm0, %xmm0546; CHECK-NEXT:    retq547  %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}"()548  %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>549  %3 = and <16 x i8> %2, %a1550  ; add forces execution domain551  %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>552  ret <16 x i8> %4553}554 555define <16 x i8> @stack_fold_pavgb(<16 x i8> %a0, <16 x i8> %a1) {556; CHECK-LABEL: stack_fold_pavgb:557; CHECK:       # %bb.0:558; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill559; CHECK-NEXT:    #APP560; CHECK-NEXT:    nop561; CHECK-NEXT:    #NO_APP562; CHECK-NEXT:    vpavgb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload563; CHECK-NEXT:    retq564  %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}"()565  %2 = zext <16 x i8> %a0 to <16 x i16>566  %3 = zext <16 x i8> %a1 to <16 x i16>567  %4 = add <16 x i16> %2, %3568  %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>569  %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>570  %7 = trunc <16 x i16> %6 to <16 x i8>571  ret <16 x i8> %7572}573 574define <8 x i16> @stack_fold_pavgw(<8 x i16> %a0, <8 x i16> %a1) {575; CHECK-LABEL: stack_fold_pavgw:576; CHECK:       # %bb.0:577; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill578; CHECK-NEXT:    #APP579; CHECK-NEXT:    nop580; CHECK-NEXT:    #NO_APP581; CHECK-NEXT:    vpavgw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload582; CHECK-NEXT:    retq583  %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}"()584  %2 = zext <8 x i16> %a0 to <8 x i32>585  %3 = zext <8 x i16> %a1 to <8 x i32>586  %4 = add <8 x i32> %2, %3587  %5 = add <8 x i32> %4, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>588  %6 = lshr <8 x i32> %5, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>589  %7 = trunc <8 x i32> %6 to <8 x i16>590  ret <8 x i16> %7591}592 593define <16 x i8> @stack_fold_pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %c) {594; CHECK-LABEL: stack_fold_pblendvb:595; CHECK:       # %bb.0:596; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill597; CHECK-NEXT:    #APP598; CHECK-NEXT:    nop599; CHECK-NEXT:    #NO_APP600; CHECK-NEXT:    vpblendvb %xmm0, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload601; CHECK-NEXT:    retq602  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()603  %2 = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %a1, <16 x i8> %c, <16 x i8> %a0)604  ret <16 x i8> %2605}606declare <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone607 608define <8 x i16> @stack_fold_pblendw(<8 x i16> %a0, <8 x i16> %a1) {609; CHECK-LABEL: stack_fold_pblendw:610; CHECK:       # %bb.0:611; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill612; CHECK-NEXT:    #APP613; CHECK-NEXT:    nop614; CHECK-NEXT:    #NO_APP615; CHECK-NEXT:    vpblendw $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload616; CHECK-NEXT:    # xmm0 = mem[0,1,2],xmm0[3,4,5,6,7]617; CHECK-NEXT:    retq618  %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}"()619  %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>620  ret <8 x i16> %2621}622 623define <2 x i64> @stack_fold_pclmulqdq(<2 x i64> %a0, <2 x i64> %a1) {624; CHECK-LABEL: stack_fold_pclmulqdq:625; CHECK:       # %bb.0:626; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill627; CHECK-NEXT:    #APP628; CHECK-NEXT:    nop629; CHECK-NEXT:    #NO_APP630; CHECK-NEXT:    vpclmulqdq $0, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload631; CHECK-NEXT:    retq632  %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}"()633  %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 0)634  ret <2 x i64> %2635}636declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8) nounwind readnone637 638define <16 x i8> @stack_fold_pcmpeqb(<16 x i8> %a0, <16 x i8> %a1) {639; CHECK-LABEL: stack_fold_pcmpeqb:640; CHECK:       # %bb.0:641; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill642; CHECK-NEXT:    #APP643; CHECK-NEXT:    nop644; CHECK-NEXT:    #NO_APP645; CHECK-NEXT:    vpcmpeqb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload646; CHECK-NEXT:    retq647  %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}"()648  %2 = icmp eq <16 x i8> %a0, %a1649  %3 = sext <16 x i1> %2 to <16 x i8>650  ret <16 x i8> %3651}652 653define <4 x i32> @stack_fold_pcmpeqd(<4 x i32> %a0, <4 x i32> %a1) {654; CHECK-LABEL: stack_fold_pcmpeqd:655; CHECK:       # %bb.0:656; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill657; CHECK-NEXT:    #APP658; CHECK-NEXT:    nop659; CHECK-NEXT:    #NO_APP660; CHECK-NEXT:    vpcmpeqd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload661; CHECK-NEXT:    retq662  %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}"()663  %2 = icmp eq <4 x i32> %a0, %a1664  %3 = sext <4 x i1> %2 to <4 x i32>665  ret <4 x i32> %3666}667 668define <2 x i64> @stack_fold_pcmpeqq(<2 x i64> %a0, <2 x i64> %a1) {669; CHECK-LABEL: stack_fold_pcmpeqq:670; CHECK:       # %bb.0:671; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill672; CHECK-NEXT:    #APP673; CHECK-NEXT:    nop674; CHECK-NEXT:    #NO_APP675; CHECK-NEXT:    vpcmpeqq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload676; CHECK-NEXT:    retq677  %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}"()678  %2 = icmp eq <2 x i64> %a0, %a1679  %3 = sext <2 x i1> %2 to <2 x i64>680  ret <2 x i64> %3681}682 683define <8 x i16> @stack_fold_pcmpeqw(<8 x i16> %a0, <8 x i16> %a1) {684; CHECK-LABEL: stack_fold_pcmpeqw:685; CHECK:       # %bb.0:686; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill687; CHECK-NEXT:    #APP688; CHECK-NEXT:    nop689; CHECK-NEXT:    #NO_APP690; CHECK-NEXT:    vpcmpeqw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload691; CHECK-NEXT:    retq692  %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}"()693  %2 = icmp eq <8 x i16> %a0, %a1694  %3 = sext <8 x i1> %2 to <8 x i16>695  ret <8 x i16> %3696}697 698define i32 @stack_fold_pcmpestri(<16 x i8> %a0, <16 x i8> %a1) {699; CHECK-LABEL: stack_fold_pcmpestri:700; CHECK:       # %bb.0:701; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill702; CHECK-NEXT:    #APP703; CHECK-NEXT:    nop704; CHECK-NEXT:    #NO_APP705; CHECK-NEXT:    movl $7, %eax706; CHECK-NEXT:    movl $7, %edx707; CHECK-NEXT:    vpcmpestri $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload708; CHECK-NEXT:    movl %ecx, %eax709; CHECK-NEXT:    retq710  %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}"()711  %2 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)712  ret i32 %2713}714declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone715 716define <16 x i8> @stack_fold_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1) {717; CHECK-LABEL: stack_fold_pcmpestrm:718; CHECK:       # %bb.0:719; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill720; CHECK-NEXT:    #APP721; CHECK-NEXT:    nop722; CHECK-NEXT:    #NO_APP723; CHECK-NEXT:    movl $7, %eax724; CHECK-NEXT:    movl $7, %edx725; CHECK-NEXT:    vpcmpestrm $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload726; CHECK-NEXT:    retq727  %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}"()728  %2 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)729  ret <16 x i8> %2730}731declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone732 733define <16 x i8> @stack_fold_pcmpgtb(<16 x i8> %a0, <16 x i8> %a1) {734; CHECK-LABEL: stack_fold_pcmpgtb:735; CHECK:       # %bb.0:736; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill737; CHECK-NEXT:    #APP738; CHECK-NEXT:    nop739; CHECK-NEXT:    #NO_APP740; CHECK-NEXT:    vpcmpgtb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload741; CHECK-NEXT:    retq742  %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}"()743  %2 = icmp sgt <16 x i8> %a0, %a1744  %3 = sext <16 x i1> %2 to <16 x i8>745  ret <16 x i8> %3746}747 748define <4 x i32> @stack_fold_pcmpgtd(<4 x i32> %a0, <4 x i32> %a1) {749; CHECK-LABEL: stack_fold_pcmpgtd:750; CHECK:       # %bb.0:751; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill752; CHECK-NEXT:    #APP753; CHECK-NEXT:    nop754; CHECK-NEXT:    #NO_APP755; CHECK-NEXT:    vpcmpgtd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload756; CHECK-NEXT:    retq757  %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}"()758  %2 = icmp sgt <4 x i32> %a0, %a1759  %3 = sext <4 x i1> %2 to <4 x i32>760  ret <4 x i32> %3761}762 763define <2 x i64> @stack_fold_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1) {764; CHECK-LABEL: stack_fold_pcmpgtq:765; CHECK:       # %bb.0:766; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill767; CHECK-NEXT:    #APP768; CHECK-NEXT:    nop769; CHECK-NEXT:    #NO_APP770; CHECK-NEXT:    vpcmpgtq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload771; CHECK-NEXT:    retq772  %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}"()773  %2 = icmp sgt <2 x i64> %a0, %a1774  %3 = sext <2 x i1> %2 to <2 x i64>775  ret <2 x i64> %3776}777 778define <8 x i16> @stack_fold_pcmpgtw(<8 x i16> %a0, <8 x i16> %a1) {779; CHECK-LABEL: stack_fold_pcmpgtw:780; CHECK:       # %bb.0:781; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill782; CHECK-NEXT:    #APP783; CHECK-NEXT:    nop784; CHECK-NEXT:    #NO_APP785; CHECK-NEXT:    vpcmpgtw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload786; CHECK-NEXT:    retq787  %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}"()788  %2 = icmp sgt <8 x i16> %a0, %a1789  %3 = sext <8 x i1> %2 to <8 x i16>790  ret <8 x i16> %3791}792 793define i32 @stack_fold_pcmpistri(<16 x i8> %a0, <16 x i8> %a1) {794; CHECK-LABEL: stack_fold_pcmpistri:795; CHECK:       # %bb.0:796; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill797; CHECK-NEXT:    #APP798; CHECK-NEXT:    nop799; CHECK-NEXT:    #NO_APP800; CHECK-NEXT:    vpcmpistri $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload801; CHECK-NEXT:    movl %ecx, %eax802; CHECK-NEXT:    retq803  %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}"()804  %2 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7)805  ret i32 %2806}807declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone808 809define <16 x i8> @stack_fold_pcmpistrm(<16 x i8> %a0, <16 x i8> %a1) {810; CHECK-LABEL: stack_fold_pcmpistrm:811; CHECK:       # %bb.0:812; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill813; CHECK-NEXT:    #APP814; CHECK-NEXT:    nop815; CHECK-NEXT:    #NO_APP816; CHECK-NEXT:    vpcmpistrm $7, {{[-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 <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7)820  ret <16 x i8> %2821}822declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone823 824; TODO stack_fold_pextrb825 826define i32 @stack_fold_pextrd(<4 x i32> %a0, <4 x i32> %a1) {827; CHECK-LABEL: stack_fold_pextrd:828; CHECK:       # %bb.0:829; CHECK-NEXT:    pushq %rbp830; CHECK-NEXT:    .cfi_def_cfa_offset 16831; CHECK-NEXT:    pushq %r15832; CHECK-NEXT:    .cfi_def_cfa_offset 24833; CHECK-NEXT:    pushq %r14834; CHECK-NEXT:    .cfi_def_cfa_offset 32835; CHECK-NEXT:    pushq %r13836; CHECK-NEXT:    .cfi_def_cfa_offset 40837; CHECK-NEXT:    pushq %r12838; CHECK-NEXT:    .cfi_def_cfa_offset 48839; CHECK-NEXT:    pushq %rbx840; CHECK-NEXT:    .cfi_def_cfa_offset 56841; CHECK-NEXT:    .cfi_offset %rbx, -56842; CHECK-NEXT:    .cfi_offset %r12, -48843; CHECK-NEXT:    .cfi_offset %r13, -40844; CHECK-NEXT:    .cfi_offset %r14, -32845; CHECK-NEXT:    .cfi_offset %r15, -24846; CHECK-NEXT:    .cfi_offset %rbp, -16847; CHECK-NEXT:    vpaddd %xmm1, %xmm0, %xmm0848; CHECK-NEXT:    vpextrd $1, %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill849; CHECK-NEXT:    #APP850; CHECK-NEXT:    nop851; CHECK-NEXT:    #NO_APP852; CHECK-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload853; CHECK-NEXT:    popq %rbx854; CHECK-NEXT:    .cfi_def_cfa_offset 48855; CHECK-NEXT:    popq %r12856; CHECK-NEXT:    .cfi_def_cfa_offset 40857; CHECK-NEXT:    popq %r13858; CHECK-NEXT:    .cfi_def_cfa_offset 32859; CHECK-NEXT:    popq %r14860; CHECK-NEXT:    .cfi_def_cfa_offset 24861; CHECK-NEXT:    popq %r15862; CHECK-NEXT:    .cfi_def_cfa_offset 16863; CHECK-NEXT:    popq %rbp864; CHECK-NEXT:    .cfi_def_cfa_offset 8865; CHECK-NEXT:    retq866  ; add forces execution domain867  %1 = add <4 x i32> %a0, %a1868  %2 = extractelement <4 x i32> %1, i32 1869  %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}"()870  ret i32 %2871}872 873define i64 @stack_fold_pextrq(<2 x i64> %a0) {874; CHECK-LABEL: stack_fold_pextrq:875; CHECK:       # %bb.0:876; CHECK-NEXT:    pushq %rbp877; CHECK-NEXT:    .cfi_def_cfa_offset 16878; CHECK-NEXT:    pushq %r15879; CHECK-NEXT:    .cfi_def_cfa_offset 24880; CHECK-NEXT:    pushq %r14881; CHECK-NEXT:    .cfi_def_cfa_offset 32882; CHECK-NEXT:    pushq %r13883; CHECK-NEXT:    .cfi_def_cfa_offset 40884; CHECK-NEXT:    pushq %r12885; CHECK-NEXT:    .cfi_def_cfa_offset 48886; CHECK-NEXT:    pushq %rbx887; CHECK-NEXT:    .cfi_def_cfa_offset 56888; CHECK-NEXT:    .cfi_offset %rbx, -56889; CHECK-NEXT:    .cfi_offset %r12, -48890; CHECK-NEXT:    .cfi_offset %r13, -40891; CHECK-NEXT:    .cfi_offset %r14, -32892; CHECK-NEXT:    .cfi_offset %r15, -24893; CHECK-NEXT:    .cfi_offset %rbp, -16894; CHECK-NEXT:    vpextrq $1, %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill895; CHECK-NEXT:    #APP896; CHECK-NEXT:    nop897; CHECK-NEXT:    #NO_APP898; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload899; CHECK-NEXT:    popq %rbx900; CHECK-NEXT:    .cfi_def_cfa_offset 48901; CHECK-NEXT:    popq %r12902; CHECK-NEXT:    .cfi_def_cfa_offset 40903; CHECK-NEXT:    popq %r13904; CHECK-NEXT:    .cfi_def_cfa_offset 32905; CHECK-NEXT:    popq %r14906; CHECK-NEXT:    .cfi_def_cfa_offset 24907; CHECK-NEXT:    popq %r15908; CHECK-NEXT:    .cfi_def_cfa_offset 16909; CHECK-NEXT:    popq %rbp910; CHECK-NEXT:    .cfi_def_cfa_offset 8911; CHECK-NEXT:    retq912  %1 = extractelement <2 x i64> %a0, i32 1913  %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}"()914  ret i64 %1915}916 917; TODO stack_fold_pextrw918 919define <4 x i32> @stack_fold_phaddd(<4 x i32> %a0, <4 x i32> %a1) {920; CHECK-LABEL: stack_fold_phaddd:921; CHECK:       # %bb.0:922; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill923; CHECK-NEXT:    #APP924; CHECK-NEXT:    nop925; CHECK-NEXT:    #NO_APP926; CHECK-NEXT:    vphaddd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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 = call <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32> %a0, <4 x i32> %a1)930  ret <4 x i32> %2931}932declare <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32>, <4 x i32>) nounwind readnone933 934define <8 x i16> @stack_fold_phaddsw(<8 x i16> %a0, <8 x i16> %a1) {935; CHECK-LABEL: stack_fold_phaddsw:936; CHECK:       # %bb.0:937; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill938; CHECK-NEXT:    #APP939; CHECK-NEXT:    nop940; CHECK-NEXT:    #NO_APP941; CHECK-NEXT:    vphaddsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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 = call <8 x i16> @llvm.x86.ssse3.phadd.sw.128(<8 x i16> %a0, <8 x i16> %a1)945  ret <8 x i16> %2946}947declare <8 x i16> @llvm.x86.ssse3.phadd.sw.128(<8 x i16>, <8 x i16>) nounwind readnone948 949define <8 x i16> @stack_fold_phaddw(<8 x i16> %a0, <8 x i16> %a1) {950; CHECK-LABEL: stack_fold_phaddw:951; CHECK:       # %bb.0:952; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill953; CHECK-NEXT:    #APP954; CHECK-NEXT:    nop955; CHECK-NEXT:    #NO_APP956; CHECK-NEXT:    vphaddw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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 = call <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16> %a0, <8 x i16> %a1)960  ret <8 x i16> %2961}962declare <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16>, <8 x i16>) nounwind readnone963 964define <8 x i16> @stack_fold_phminposuw(<8 x i16> %a0) {965; CHECK-LABEL: stack_fold_phminposuw:966; CHECK:       # %bb.0:967; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill968; CHECK-NEXT:    #APP969; CHECK-NEXT:    nop970; CHECK-NEXT:    #NO_APP971; CHECK-NEXT:    vphminposuw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload972; CHECK-NEXT:    retq973  %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}"()974  %2 = call <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16> %a0)975  ret <8 x i16> %2976}977declare <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16>) nounwind readnone978 979define <4 x i32> @stack_fold_phsubd(<4 x i32> %a0, <4 x i32> %a1) {980; CHECK-LABEL: stack_fold_phsubd:981; CHECK:       # %bb.0:982; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill983; CHECK-NEXT:    #APP984; CHECK-NEXT:    nop985; CHECK-NEXT:    #NO_APP986; CHECK-NEXT:    vphsubd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload987; CHECK-NEXT:    retq988  %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}"()989  %2 = call <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32> %a0, <4 x i32> %a1)990  ret <4 x i32> %2991}992declare <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32>, <4 x i32>) nounwind readnone993 994define <8 x i16> @stack_fold_phsubsw(<8 x i16> %a0, <8 x i16> %a1) {995; CHECK-LABEL: stack_fold_phsubsw:996; CHECK:       # %bb.0:997; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill998; CHECK-NEXT:    #APP999; CHECK-NEXT:    nop1000; CHECK-NEXT:    #NO_APP1001; CHECK-NEXT:    vphsubsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1002; CHECK-NEXT:    retq1003  %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}"()1004  %2 = call <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16> %a0, <8 x i16> %a1)1005  ret <8 x i16> %21006}1007declare <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16>, <8 x i16>) nounwind readnone1008 1009define <8 x i16> @stack_fold_phsubw(<8 x i16> %a0, <8 x i16> %a1) {1010; CHECK-LABEL: stack_fold_phsubw:1011; CHECK:       # %bb.0:1012; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1013; CHECK-NEXT:    #APP1014; CHECK-NEXT:    nop1015; CHECK-NEXT:    #NO_APP1016; CHECK-NEXT:    vphsubw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1017; CHECK-NEXT:    retq1018  %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}"()1019  %2 = call <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16> %a0, <8 x i16> %a1)1020  ret <8 x i16> %21021}1022declare <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16>, <8 x i16>) nounwind readnone1023 1024define <16 x i8> @stack_fold_pinsrb(<16 x i8> %a0, i8 %a1) {1025; CHECK-LABEL: stack_fold_pinsrb:1026; CHECK:       # %bb.0:1027; CHECK-NEXT:    pushq %rbp1028; CHECK-NEXT:    .cfi_def_cfa_offset 161029; CHECK-NEXT:    pushq %r151030; CHECK-NEXT:    .cfi_def_cfa_offset 241031; CHECK-NEXT:    pushq %r141032; CHECK-NEXT:    .cfi_def_cfa_offset 321033; CHECK-NEXT:    pushq %r131034; CHECK-NEXT:    .cfi_def_cfa_offset 401035; CHECK-NEXT:    pushq %r121036; CHECK-NEXT:    .cfi_def_cfa_offset 481037; CHECK-NEXT:    pushq %rbx1038; CHECK-NEXT:    .cfi_def_cfa_offset 561039; CHECK-NEXT:    .cfi_offset %rbx, -561040; CHECK-NEXT:    .cfi_offset %r12, -481041; CHECK-NEXT:    .cfi_offset %r13, -401042; CHECK-NEXT:    .cfi_offset %r14, -321043; CHECK-NEXT:    .cfi_offset %r15, -241044; CHECK-NEXT:    .cfi_offset %rbp, -161045; CHECK-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1046; CHECK-NEXT:    #APP1047; CHECK-NEXT:    nop1048; CHECK-NEXT:    #NO_APP1049; CHECK-NEXT:    vpinsrb $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1050; CHECK-NEXT:    popq %rbx1051; CHECK-NEXT:    .cfi_def_cfa_offset 481052; CHECK-NEXT:    popq %r121053; CHECK-NEXT:    .cfi_def_cfa_offset 401054; CHECK-NEXT:    popq %r131055; CHECK-NEXT:    .cfi_def_cfa_offset 321056; CHECK-NEXT:    popq %r141057; CHECK-NEXT:    .cfi_def_cfa_offset 241058; CHECK-NEXT:    popq %r151059; CHECK-NEXT:    .cfi_def_cfa_offset 161060; CHECK-NEXT:    popq %rbp1061; CHECK-NEXT:    .cfi_def_cfa_offset 81062; CHECK-NEXT:    retq1063  %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}"()1064  %2 = insertelement <16 x i8> %a0, i8 %a1, i32 11065  ret <16 x i8> %21066}1067 1068define <4 x i32> @stack_fold_pinsrd(<4 x i32> %a0, i32 %a1) {1069; CHECK-LABEL: stack_fold_pinsrd:1070; CHECK:       # %bb.0:1071; CHECK-NEXT:    pushq %rbp1072; CHECK-NEXT:    .cfi_def_cfa_offset 161073; CHECK-NEXT:    pushq %r151074; CHECK-NEXT:    .cfi_def_cfa_offset 241075; CHECK-NEXT:    pushq %r141076; CHECK-NEXT:    .cfi_def_cfa_offset 321077; CHECK-NEXT:    pushq %r131078; CHECK-NEXT:    .cfi_def_cfa_offset 401079; CHECK-NEXT:    pushq %r121080; CHECK-NEXT:    .cfi_def_cfa_offset 481081; CHECK-NEXT:    pushq %rbx1082; CHECK-NEXT:    .cfi_def_cfa_offset 561083; CHECK-NEXT:    .cfi_offset %rbx, -561084; CHECK-NEXT:    .cfi_offset %r12, -481085; CHECK-NEXT:    .cfi_offset %r13, -401086; CHECK-NEXT:    .cfi_offset %r14, -321087; CHECK-NEXT:    .cfi_offset %r15, -241088; CHECK-NEXT:    .cfi_offset %rbp, -161089; CHECK-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1090; CHECK-NEXT:    #APP1091; CHECK-NEXT:    nop1092; CHECK-NEXT:    #NO_APP1093; CHECK-NEXT:    vpinsrd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1094; CHECK-NEXT:    popq %rbx1095; CHECK-NEXT:    .cfi_def_cfa_offset 481096; CHECK-NEXT:    popq %r121097; CHECK-NEXT:    .cfi_def_cfa_offset 401098; CHECK-NEXT:    popq %r131099; CHECK-NEXT:    .cfi_def_cfa_offset 321100; CHECK-NEXT:    popq %r141101; CHECK-NEXT:    .cfi_def_cfa_offset 241102; CHECK-NEXT:    popq %r151103; CHECK-NEXT:    .cfi_def_cfa_offset 161104; CHECK-NEXT:    popq %rbp1105; CHECK-NEXT:    .cfi_def_cfa_offset 81106; CHECK-NEXT:    retq1107  %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}"()1108  %2 = insertelement <4 x i32> %a0, i32 %a1, i32 11109  ret <4 x i32> %21110}1111 1112define <2 x i64> @stack_fold_pinsrq(<2 x i64> %a0, i64 %a1) {1113; CHECK-LABEL: stack_fold_pinsrq:1114; CHECK:       # %bb.0:1115; CHECK-NEXT:    pushq %rbp1116; CHECK-NEXT:    .cfi_def_cfa_offset 161117; CHECK-NEXT:    pushq %r151118; CHECK-NEXT:    .cfi_def_cfa_offset 241119; CHECK-NEXT:    pushq %r141120; CHECK-NEXT:    .cfi_def_cfa_offset 321121; CHECK-NEXT:    pushq %r131122; CHECK-NEXT:    .cfi_def_cfa_offset 401123; CHECK-NEXT:    pushq %r121124; CHECK-NEXT:    .cfi_def_cfa_offset 481125; CHECK-NEXT:    pushq %rbx1126; CHECK-NEXT:    .cfi_def_cfa_offset 561127; CHECK-NEXT:    .cfi_offset %rbx, -561128; CHECK-NEXT:    .cfi_offset %r12, -481129; CHECK-NEXT:    .cfi_offset %r13, -401130; CHECK-NEXT:    .cfi_offset %r14, -321131; CHECK-NEXT:    .cfi_offset %r15, -241132; CHECK-NEXT:    .cfi_offset %rbp, -161133; CHECK-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1134; CHECK-NEXT:    #APP1135; CHECK-NEXT:    nop1136; CHECK-NEXT:    #NO_APP1137; CHECK-NEXT:    vpinsrq $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload1138; CHECK-NEXT:    popq %rbx1139; CHECK-NEXT:    .cfi_def_cfa_offset 481140; CHECK-NEXT:    popq %r121141; CHECK-NEXT:    .cfi_def_cfa_offset 401142; CHECK-NEXT:    popq %r131143; CHECK-NEXT:    .cfi_def_cfa_offset 321144; CHECK-NEXT:    popq %r141145; CHECK-NEXT:    .cfi_def_cfa_offset 241146; CHECK-NEXT:    popq %r151147; CHECK-NEXT:    .cfi_def_cfa_offset 161148; CHECK-NEXT:    popq %rbp1149; CHECK-NEXT:    .cfi_def_cfa_offset 81150; CHECK-NEXT:    retq1151  %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}"()1152  %2 = insertelement <2 x i64> %a0, i64 %a1, i32 11153  ret <2 x i64> %21154}1155 1156define <8 x i16> @stack_fold_pinsrw(<8 x i16> %a0, i16 %a1) {1157; CHECK-LABEL: stack_fold_pinsrw:1158; CHECK:       # %bb.0:1159; CHECK-NEXT:    pushq %rbp1160; CHECK-NEXT:    .cfi_def_cfa_offset 161161; CHECK-NEXT:    pushq %r151162; CHECK-NEXT:    .cfi_def_cfa_offset 241163; CHECK-NEXT:    pushq %r141164; CHECK-NEXT:    .cfi_def_cfa_offset 321165; CHECK-NEXT:    pushq %r131166; CHECK-NEXT:    .cfi_def_cfa_offset 401167; CHECK-NEXT:    pushq %r121168; CHECK-NEXT:    .cfi_def_cfa_offset 481169; CHECK-NEXT:    pushq %rbx1170; CHECK-NEXT:    .cfi_def_cfa_offset 561171; CHECK-NEXT:    .cfi_offset %rbx, -561172; CHECK-NEXT:    .cfi_offset %r12, -481173; CHECK-NEXT:    .cfi_offset %r13, -401174; CHECK-NEXT:    .cfi_offset %r14, -321175; CHECK-NEXT:    .cfi_offset %r15, -241176; CHECK-NEXT:    .cfi_offset %rbp, -161177; CHECK-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1178; CHECK-NEXT:    #APP1179; CHECK-NEXT:    nop1180; CHECK-NEXT:    #NO_APP1181; CHECK-NEXT:    vpinsrw $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1182; CHECK-NEXT:    popq %rbx1183; CHECK-NEXT:    .cfi_def_cfa_offset 481184; CHECK-NEXT:    popq %r121185; CHECK-NEXT:    .cfi_def_cfa_offset 401186; CHECK-NEXT:    popq %r131187; CHECK-NEXT:    .cfi_def_cfa_offset 321188; CHECK-NEXT:    popq %r141189; CHECK-NEXT:    .cfi_def_cfa_offset 241190; CHECK-NEXT:    popq %r151191; CHECK-NEXT:    .cfi_def_cfa_offset 161192; CHECK-NEXT:    popq %rbp1193; CHECK-NEXT:    .cfi_def_cfa_offset 81194; CHECK-NEXT:    retq1195  %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}"()1196  %2 = insertelement <8 x i16> %a0, i16 %a1, i32 11197  ret <8 x i16> %21198}1199 1200define <8 x i16> @stack_fold_pmaddubsw(<16 x i8> %a0, <16 x i8> %a1) {1201; CHECK-LABEL: stack_fold_pmaddubsw:1202; CHECK:       # %bb.0:1203; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1204; CHECK-NEXT:    #APP1205; CHECK-NEXT:    nop1206; CHECK-NEXT:    #NO_APP1207; CHECK-NEXT:    vpmaddubsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1208; CHECK-NEXT:    retq1209  %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}"()1210  %2 = call <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8> %a0, <16 x i8> %a1)1211  ret <8 x i16> %21212}1213declare <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8>, <16 x i8>) nounwind readnone1214 1215define <4 x i32> @stack_fold_pmaddwd(<8 x i16> %a0, <8 x i16> %a1) {1216; CHECK-LABEL: stack_fold_pmaddwd:1217; CHECK:       # %bb.0:1218; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1219; CHECK-NEXT:    #APP1220; CHECK-NEXT:    nop1221; CHECK-NEXT:    #NO_APP1222; CHECK-NEXT:    vpmaddwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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.sse2.pmadd.wd(<8 x i16> %a0, <8 x i16> %a1)1226  ret <4 x i32> %21227}1228declare <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16>, <8 x i16>) nounwind readnone1229 1230define <16 x i8> @stack_fold_pmaxsb(<16 x i8> %a0, <16 x i8> %a1) {1231; CHECK-LABEL: stack_fold_pmaxsb:1232; CHECK:       # %bb.0:1233; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1234; CHECK-NEXT:    #APP1235; CHECK-NEXT:    nop1236; CHECK-NEXT:    #NO_APP1237; CHECK-NEXT:    vpmaxsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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 = icmp sgt <16 x i8> %a0, %a11241  %3 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %a11242  ret <16 x i8> %31243}1244 1245define <4 x i32> @stack_fold_pmaxsd(<4 x i32> %a0, <4 x i32> %a1) {1246; CHECK-LABEL: stack_fold_pmaxsd:1247; CHECK:       # %bb.0:1248; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1249; CHECK-NEXT:    #APP1250; CHECK-NEXT:    nop1251; CHECK-NEXT:    #NO_APP1252; CHECK-NEXT:    vpmaxsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %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 = icmp sgt <4 x i32> %a0, %a11256  %3 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %a11257  ret <4 x i32> %31258}1259 1260define <8 x i16> @stack_fold_pmaxsw(<8 x i16> %a0, <8 x i16> %a1) {1261; CHECK-LABEL: stack_fold_pmaxsw:1262; CHECK:       # %bb.0:1263; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1264; CHECK-NEXT:    #APP1265; CHECK-NEXT:    nop1266; CHECK-NEXT:    #NO_APP1267; CHECK-NEXT:    vpmaxsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1268; CHECK-NEXT:    retq1269  %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}"()1270  %2 = icmp sgt <8 x i16> %a0, %a11271  %3 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %a11272  ret <8 x i16> %31273}1274 1275define <16 x i8> @stack_fold_pmaxub(<16 x i8> %a0, <16 x i8> %a1) {1276; CHECK-LABEL: stack_fold_pmaxub:1277; CHECK:       # %bb.0:1278; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1279; CHECK-NEXT:    #APP1280; CHECK-NEXT:    nop1281; CHECK-NEXT:    #NO_APP1282; CHECK-NEXT:    vpmaxub {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1283; CHECK-NEXT:    retq1284  %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}"()1285  %2 = icmp ugt <16 x i8> %a0, %a11286  %3 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %a11287  ret <16 x i8> %31288}1289 1290define <4 x i32> @stack_fold_pmaxud(<4 x i32> %a0, <4 x i32> %a1) {1291; CHECK-LABEL: stack_fold_pmaxud:1292; CHECK:       # %bb.0:1293; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1294; CHECK-NEXT:    #APP1295; CHECK-NEXT:    nop1296; CHECK-NEXT:    #NO_APP1297; CHECK-NEXT:    vpmaxud {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1298; CHECK-NEXT:    retq1299  %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}"()1300  %2 = icmp ugt <4 x i32> %a0, %a11301  %3 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %a11302  ret <4 x i32> %31303}1304 1305define <8 x i16> @stack_fold_pmaxuw(<8 x i16> %a0, <8 x i16> %a1) {1306; CHECK-LABEL: stack_fold_pmaxuw:1307; CHECK:       # %bb.0:1308; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1309; CHECK-NEXT:    #APP1310; CHECK-NEXT:    nop1311; CHECK-NEXT:    #NO_APP1312; CHECK-NEXT:    vpmaxuw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1313; CHECK-NEXT:    retq1314  %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}"()1315  %2 = icmp ugt <8 x i16> %a0, %a11316  %3 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %a11317  ret <8 x i16> %31318}1319 1320define <16 x i8> @stack_fold_pminsb(<16 x i8> %a0, <16 x i8> %a1) {1321; CHECK-LABEL: stack_fold_pminsb:1322; CHECK:       # %bb.0:1323; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1324; CHECK-NEXT:    #APP1325; CHECK-NEXT:    nop1326; CHECK-NEXT:    #NO_APP1327; CHECK-NEXT:    vpminsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1328; CHECK-NEXT:    retq1329  %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}"()1330  %2 = icmp slt <16 x i8> %a0, %a11331  %3 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %a11332  ret <16 x i8> %31333}1334 1335define <4 x i32> @stack_fold_pminsd(<4 x i32> %a0, <4 x i32> %a1) {1336; CHECK-LABEL: stack_fold_pminsd:1337; CHECK:       # %bb.0:1338; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1339; CHECK-NEXT:    #APP1340; CHECK-NEXT:    nop1341; CHECK-NEXT:    #NO_APP1342; CHECK-NEXT:    vpminsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1343; CHECK-NEXT:    retq1344  %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}"()1345  %2 = icmp slt <4 x i32> %a0, %a11346  %3 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %a11347  ret <4 x i32> %31348}1349 1350define <8 x i16> @stack_fold_pminsw(<8 x i16> %a0, <8 x i16> %a1) {1351; CHECK-LABEL: stack_fold_pminsw:1352; CHECK:       # %bb.0:1353; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1354; CHECK-NEXT:    #APP1355; CHECK-NEXT:    nop1356; CHECK-NEXT:    #NO_APP1357; CHECK-NEXT:    vpminsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1358; CHECK-NEXT:    retq1359  %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}"()1360  %2 = icmp slt <8 x i16> %a0, %a11361  %3 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %a11362  ret <8 x i16> %31363}1364 1365define <16 x i8> @stack_fold_pminub(<16 x i8> %a0, <16 x i8> %a1) {1366; CHECK-LABEL: stack_fold_pminub:1367; CHECK:       # %bb.0:1368; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1369; CHECK-NEXT:    #APP1370; CHECK-NEXT:    nop1371; CHECK-NEXT:    #NO_APP1372; CHECK-NEXT:    vpminub {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1373; CHECK-NEXT:    retq1374  %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}"()1375  %2 = icmp ult <16 x i8> %a0, %a11376  %3 = select <16 x i1> %2, <16 x i8> %a0, <16 x i8> %a11377  ret <16 x i8> %31378}1379 1380define <4 x i32> @stack_fold_pminud(<4 x i32> %a0, <4 x i32> %a1) {1381; CHECK-LABEL: stack_fold_pminud:1382; CHECK:       # %bb.0:1383; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1384; CHECK-NEXT:    #APP1385; CHECK-NEXT:    nop1386; CHECK-NEXT:    #NO_APP1387; CHECK-NEXT:    vpminud {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1388; CHECK-NEXT:    retq1389  %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}"()1390  %2 = icmp ult <4 x i32> %a0, %a11391  %3 = select <4 x i1> %2, <4 x i32> %a0, <4 x i32> %a11392  ret <4 x i32> %31393}1394 1395define <8 x i16> @stack_fold_pminuw(<8 x i16> %a0, <8 x i16> %a1) {1396; CHECK-LABEL: stack_fold_pminuw:1397; CHECK:       # %bb.0:1398; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1399; CHECK-NEXT:    #APP1400; CHECK-NEXT:    nop1401; CHECK-NEXT:    #NO_APP1402; CHECK-NEXT:    vpminuw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1403; CHECK-NEXT:    retq1404  %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}"()1405  %2 = icmp ult <8 x i16> %a0, %a11406  %3 = select <8 x i1> %2, <8 x i16> %a0, <8 x i16> %a11407  ret <8 x i16> %31408}1409 1410define <2 x i64> @stack_fold_pmuldq(<4 x i32> %a0, <4 x i32> %a1) {1411; CHECK-LABEL: stack_fold_pmuldq:1412; CHECK:       # %bb.0:1413; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1414; CHECK-NEXT:    #APP1415; CHECK-NEXT:    nop1416; CHECK-NEXT:    #NO_APP1417; CHECK-NEXT:    vpmuldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1418; CHECK-NEXT:    retq1419  %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}"()1420  %2 = bitcast <4 x i32> %a0 to <2 x i64>1421  %3 = bitcast <4 x i32> %a1 to <2 x i64>1422  %4 = shl <2 x i64> %2, <i64 32, i64 32>1423  %5 = ashr <2 x i64> %4, <i64 32, i64 32>1424  %6 = shl <2 x i64> %3, <i64 32, i64 32>1425  %7 = ashr <2 x i64> %6, <i64 32, i64 32>1426  %8 = mul <2 x i64> %5, %71427  ret <2 x i64> %81428}1429 1430define <8 x i16> @stack_fold_pmulhrsw(<8 x i16> %a0, <8 x i16> %a1) {1431; CHECK-LABEL: stack_fold_pmulhrsw:1432; CHECK:       # %bb.0:1433; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1434; CHECK-NEXT:    #APP1435; CHECK-NEXT:    nop1436; CHECK-NEXT:    #NO_APP1437; CHECK-NEXT:    vpmulhrsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1438; CHECK-NEXT:    retq1439  %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}"()1440  %2 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> %a0, <8 x i16> %a1)1441  ret <8 x i16> %21442}1443declare <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16>, <8 x i16>) nounwind readnone1444 1445define <8 x i16> @stack_fold_pmulhuw(<8 x i16> %a0, <8 x i16> %a1) {1446; CHECK-LABEL: stack_fold_pmulhuw:1447; CHECK:       # %bb.0:1448; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1449; CHECK-NEXT:    #APP1450; CHECK-NEXT:    nop1451; CHECK-NEXT:    #NO_APP1452; CHECK-NEXT:    vpmulhuw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1453; CHECK-NEXT:    retq1454  %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}"()1455  %2 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %a0, <8 x i16> %a1)1456  ret <8 x i16> %21457}1458declare <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16>, <8 x i16>) nounwind readnone1459 1460define <8 x i16> @stack_fold_pmulhw(<8 x i16> %a0, <8 x i16> %a1) {1461; CHECK-LABEL: stack_fold_pmulhw:1462; CHECK:       # %bb.0:1463; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1464; CHECK-NEXT:    #APP1465; CHECK-NEXT:    nop1466; CHECK-NEXT:    #NO_APP1467; CHECK-NEXT:    vpmulhw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1468; CHECK-NEXT:    retq1469  %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}"()1470  %2 = call <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16> %a0, <8 x i16> %a1)1471  ret <8 x i16> %21472}1473declare <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16>, <8 x i16>) nounwind readnone1474 1475define <4 x i32> @stack_fold_pmulld(<4 x i32> %a0, <4 x i32> %a1) {1476; CHECK-LABEL: stack_fold_pmulld:1477; CHECK:       # %bb.0:1478; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1479; CHECK-NEXT:    #APP1480; CHECK-NEXT:    nop1481; CHECK-NEXT:    #NO_APP1482; CHECK-NEXT:    vpmulld {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1483; CHECK-NEXT:    retq1484  %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}"()1485  %2 = mul <4 x i32> %a0, %a11486  ret <4 x i32> %21487}1488 1489define <8 x i16> @stack_fold_pmullw(<8 x i16> %a0, <8 x i16> %a1) {1490; CHECK-LABEL: stack_fold_pmullw:1491; CHECK:       # %bb.0:1492; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1493; CHECK-NEXT:    #APP1494; CHECK-NEXT:    nop1495; CHECK-NEXT:    #NO_APP1496; CHECK-NEXT:    vpmullw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1497; CHECK-NEXT:    retq1498  %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}"()1499  %2 = mul <8 x i16> %a0, %a11500  ret <8 x i16> %21501}1502 1503define <2 x i64> @stack_fold_pmuludq(<4 x i32> %a0, <4 x i32> %a1) {1504; CHECK-LABEL: stack_fold_pmuludq:1505; CHECK:       # %bb.0:1506; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1507; CHECK-NEXT:    #APP1508; CHECK-NEXT:    nop1509; CHECK-NEXT:    #NO_APP1510; CHECK-NEXT:    vpmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1511; CHECK-NEXT:    retq1512  %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}"()1513  %2 = bitcast <4 x i32> %a0 to <2 x i64>1514  %3 = bitcast <4 x i32> %a1 to <2 x i64>1515  %4 = and <2 x i64> %2, <i64 4294967295, i64 4294967295>1516  %5 = and <2 x i64> %3, <i64 4294967295, i64 4294967295>1517  %6 = mul <2 x i64> %4, %51518  ret <2 x i64> %61519}1520 1521define <16 x i8> @stack_fold_por(<16 x i8> %a0, <16 x i8> %a1) {1522; CHECK-LABEL: stack_fold_por:1523; CHECK:       # %bb.0:1524; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1525; CHECK-NEXT:    #APP1526; CHECK-NEXT:    nop1527; CHECK-NEXT:    #NO_APP1528; CHECK-NEXT:    vpor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1529; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11530; CHECK-NEXT:    vpsubb %xmm1, %xmm0, %xmm01531; CHECK-NEXT:    retq1532  %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}"()1533  %2 = or <16 x i8> %a0, %a11534  ; add forces execution domain1535  %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>1536  ret <16 x i8> %31537}1538 1539define <2 x i64> @stack_fold_psadbw(<16 x i8> %a0, <16 x i8> %a1) {1540; CHECK-LABEL: stack_fold_psadbw:1541; CHECK:       # %bb.0:1542; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1543; CHECK-NEXT:    #APP1544; CHECK-NEXT:    nop1545; CHECK-NEXT:    #NO_APP1546; CHECK-NEXT:    vpsadbw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1547; CHECK-NEXT:    retq1548  %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}"()1549  %2 = call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> %a0, <16 x i8> %a1)1550  ret <2 x i64> %21551}1552declare <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8>, <16 x i8>) nounwind readnone1553 1554define <16 x i8> @stack_fold_pshufb(<16 x i8> %a0, <16 x i8> %a1) {1555; CHECK-LABEL: stack_fold_pshufb:1556; CHECK:       # %bb.0:1557; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1558; CHECK-NEXT:    #APP1559; CHECK-NEXT:    nop1560; CHECK-NEXT:    #NO_APP1561; CHECK-NEXT:    vpshufb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1562; CHECK-NEXT:    retq1563  %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}"()1564  %2 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> %a1)1565  ret <16 x i8> %21566}1567declare <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8>, <16 x i8>) nounwind readnone1568 1569define <4 x i32> @stack_fold_pshufd(<4 x i32> %a0) {1570; CHECK-LABEL: stack_fold_pshufd:1571; CHECK:       # %bb.0:1572; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1573; CHECK-NEXT:    #APP1574; CHECK-NEXT:    nop1575; CHECK-NEXT:    #NO_APP1576; CHECK-NEXT:    vpshufd $27, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1577; CHECK-NEXT:    # xmm0 = mem[3,2,1,0]1578; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11579; CHECK-NEXT:    vpsubd %xmm1, %xmm0, %xmm01580; CHECK-NEXT:    retq1581  %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}"()1582  %2 = shufflevector <4 x i32> %a0, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>1583  ; add forces execution domain1584  %3 = add <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>1585  ret <4 x i32> %31586}1587 1588define <8 x i16> @stack_fold_pshufhw(<8 x i16> %a0) {1589; CHECK-LABEL: stack_fold_pshufhw:1590; CHECK:       # %bb.0:1591; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1592; CHECK-NEXT:    #APP1593; CHECK-NEXT:    nop1594; CHECK-NEXT:    #NO_APP1595; CHECK-NEXT:    vpshufhw $11, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1596; CHECK-NEXT:    # xmm0 = mem[0,1,2,3,7,6,4,4]1597; CHECK-NEXT:    retq1598  %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}"()1599  %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>1600  ret <8 x i16> %21601}1602 1603define <8 x i16> @stack_fold_pshuflw(<8 x i16> %a0) {1604; CHECK-LABEL: stack_fold_pshuflw:1605; CHECK:       # %bb.0:1606; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1607; CHECK-NEXT:    #APP1608; CHECK-NEXT:    nop1609; CHECK-NEXT:    #NO_APP1610; CHECK-NEXT:    vpshuflw $27, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1611; CHECK-NEXT:    # xmm0 = mem[3,2,1,0,4,5,6,7]1612; CHECK-NEXT:    retq1613  %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}"()1614  %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>1615  ret <8 x i16> %21616}1617 1618define <16 x i8> @stack_fold_psignb(<16 x i8> %a0, <16 x i8> %a1) {1619; CHECK-LABEL: stack_fold_psignb:1620; CHECK:       # %bb.0:1621; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1622; CHECK-NEXT:    #APP1623; CHECK-NEXT:    nop1624; CHECK-NEXT:    #NO_APP1625; CHECK-NEXT:    vpsignb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1626; CHECK-NEXT:    retq1627  %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}"()1628  %2 = call <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8> %a0, <16 x i8> %a1)1629  ret <16 x i8> %21630}1631declare <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8>, <16 x i8>) nounwind readnone1632 1633define <4 x i32> @stack_fold_psignd(<4 x i32> %a0, <4 x i32> %a1) {1634; CHECK-LABEL: stack_fold_psignd:1635; CHECK:       # %bb.0:1636; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1637; CHECK-NEXT:    #APP1638; CHECK-NEXT:    nop1639; CHECK-NEXT:    #NO_APP1640; CHECK-NEXT:    vpsignd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1641; CHECK-NEXT:    retq1642  %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}"()1643  %2 = call <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32> %a0, <4 x i32> %a1)1644  ret <4 x i32> %21645}1646declare <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32>, <4 x i32>) nounwind readnone1647 1648define <8 x i16> @stack_fold_psignw(<8 x i16> %a0, <8 x i16> %a1) {1649; CHECK-LABEL: stack_fold_psignw:1650; CHECK:       # %bb.0:1651; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1652; CHECK-NEXT:    #APP1653; CHECK-NEXT:    nop1654; CHECK-NEXT:    #NO_APP1655; CHECK-NEXT:    vpsignw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1656; CHECK-NEXT:    retq1657  %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}"()1658  %2 = call <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16> %a0, <8 x i16> %a1)1659  ret <8 x i16> %21660}1661declare <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16>, <8 x i16>) nounwind readnone1662 1663define <4 x i32> @stack_fold_pslld(<4 x i32> %a0, <4 x i32> %a1) {1664; CHECK-LABEL: stack_fold_pslld:1665; CHECK:       # %bb.0:1666; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1667; CHECK-NEXT:    #APP1668; CHECK-NEXT:    nop1669; CHECK-NEXT:    #NO_APP1670; CHECK-NEXT:    vpslld {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1671; CHECK-NEXT:    retq1672  %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}"()1673  %2 = call <4 x i32> @llvm.x86.sse2.psll.d(<4 x i32> %a0, <4 x i32> %a1)1674  ret <4 x i32> %21675}1676declare <4 x i32> @llvm.x86.sse2.psll.d(<4 x i32>, <4 x i32>) nounwind readnone1677 1678define <2 x i64> @stack_fold_psllq(<2 x i64> %a0, <2 x i64> %a1) {1679; CHECK-LABEL: stack_fold_psllq:1680; CHECK:       # %bb.0:1681; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1682; CHECK-NEXT:    #APP1683; CHECK-NEXT:    nop1684; CHECK-NEXT:    #NO_APP1685; CHECK-NEXT:    vpsllq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1686; CHECK-NEXT:    retq1687  %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}"()1688  %2 = call <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64> %a0, <2 x i64> %a1)1689  ret <2 x i64> %21690}1691declare <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64>, <2 x i64>) nounwind readnone1692 1693define <8 x i16> @stack_fold_psllw(<8 x i16> %a0, <8 x i16> %a1) {1694; CHECK-LABEL: stack_fold_psllw:1695; CHECK:       # %bb.0:1696; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1697; CHECK-NEXT:    #APP1698; CHECK-NEXT:    nop1699; CHECK-NEXT:    #NO_APP1700; CHECK-NEXT:    vpsllw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1701; CHECK-NEXT:    retq1702  %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}"()1703  %2 = call <8 x i16> @llvm.x86.sse2.psll.w(<8 x i16> %a0, <8 x i16> %a1)1704  ret <8 x i16> %21705}1706declare <8 x i16> @llvm.x86.sse2.psll.w(<8 x i16>, <8 x i16>) nounwind readnone1707 1708define <4 x i32> @stack_fold_psrad(<4 x i32> %a0, <4 x i32> %a1) {1709; CHECK-LABEL: stack_fold_psrad:1710; CHECK:       # %bb.0:1711; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1712; CHECK-NEXT:    #APP1713; CHECK-NEXT:    nop1714; CHECK-NEXT:    #NO_APP1715; CHECK-NEXT:    vpsrad {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1716; CHECK-NEXT:    retq1717  %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}"()1718  %2 = call <4 x i32> @llvm.x86.sse2.psra.d(<4 x i32> %a0, <4 x i32> %a1)1719  ret <4 x i32> %21720}1721declare <4 x i32> @llvm.x86.sse2.psra.d(<4 x i32>, <4 x i32>) nounwind readnone1722 1723define <8 x i16> @stack_fold_psraw(<8 x i16> %a0, <8 x i16> %a1) {1724; CHECK-LABEL: stack_fold_psraw:1725; CHECK:       # %bb.0:1726; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1727; CHECK-NEXT:    #APP1728; CHECK-NEXT:    nop1729; CHECK-NEXT:    #NO_APP1730; CHECK-NEXT:    vpsraw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1731; CHECK-NEXT:    retq1732  %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}"()1733  %2 = call <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16> %a0, <8 x i16> %a1)1734  ret <8 x i16> %21735}1736declare <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16>, <8 x i16>) nounwind readnone1737 1738define <4 x i32> @stack_fold_psrld(<4 x i32> %a0, <4 x i32> %a1) {1739; CHECK-LABEL: stack_fold_psrld:1740; CHECK:       # %bb.0:1741; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1742; CHECK-NEXT:    #APP1743; CHECK-NEXT:    nop1744; CHECK-NEXT:    #NO_APP1745; CHECK-NEXT:    vpsrld {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1746; CHECK-NEXT:    retq1747  %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}"()1748  %2 = call <4 x i32> @llvm.x86.sse2.psrl.d(<4 x i32> %a0, <4 x i32> %a1)1749  ret <4 x i32> %21750}1751declare <4 x i32> @llvm.x86.sse2.psrl.d(<4 x i32>, <4 x i32>) nounwind readnone1752 1753define <2 x i64> @stack_fold_psrlq(<2 x i64> %a0, <2 x i64> %a1) {1754; CHECK-LABEL: stack_fold_psrlq:1755; CHECK:       # %bb.0:1756; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1757; CHECK-NEXT:    #APP1758; CHECK-NEXT:    nop1759; CHECK-NEXT:    #NO_APP1760; CHECK-NEXT:    vpsrlq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1761; CHECK-NEXT:    retq1762  %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}"()1763  %2 = call <2 x i64> @llvm.x86.sse2.psrl.q(<2 x i64> %a0, <2 x i64> %a1)1764  ret <2 x i64> %21765}1766declare <2 x i64> @llvm.x86.sse2.psrl.q(<2 x i64>, <2 x i64>) nounwind readnone1767 1768define <8 x i16> @stack_fold_psrlw(<8 x i16> %a0, <8 x i16> %a1) {1769; CHECK-LABEL: stack_fold_psrlw:1770; CHECK:       # %bb.0:1771; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1772; CHECK-NEXT:    #APP1773; CHECK-NEXT:    nop1774; CHECK-NEXT:    #NO_APP1775; CHECK-NEXT:    vpsrlw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1776; CHECK-NEXT:    retq1777  %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}"()1778  %2 = call <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16> %a0, <8 x i16> %a1)1779  ret <8 x i16> %21780}1781declare <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16>, <8 x i16>) nounwind readnone1782 1783define <16 x i8> @stack_fold_psubb(<16 x i8> %a0, <16 x i8> %a1) {1784; CHECK-LABEL: stack_fold_psubb:1785; CHECK:       # %bb.0:1786; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1787; CHECK-NEXT:    #APP1788; CHECK-NEXT:    nop1789; CHECK-NEXT:    #NO_APP1790; CHECK-NEXT:    vpsubb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1791; CHECK-NEXT:    retq1792  %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}"()1793  %2 = sub <16 x i8> %a0, %a11794  ret <16 x i8> %21795}1796 1797define <4 x i32> @stack_fold_psubd(<4 x i32> %a0, <4 x i32> %a1) {1798; CHECK-LABEL: stack_fold_psubd:1799; CHECK:       # %bb.0:1800; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1801; CHECK-NEXT:    #APP1802; CHECK-NEXT:    nop1803; CHECK-NEXT:    #NO_APP1804; CHECK-NEXT:    vpsubd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1805; CHECK-NEXT:    retq1806  %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}"()1807  %2 = sub <4 x i32> %a0, %a11808  ret <4 x i32> %21809}1810 1811define <2 x i64> @stack_fold_psubq(<2 x i64> %a0, <2 x i64> %a1) {1812; CHECK-LABEL: stack_fold_psubq:1813; CHECK:       # %bb.0:1814; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1815; CHECK-NEXT:    #APP1816; CHECK-NEXT:    nop1817; CHECK-NEXT:    #NO_APP1818; CHECK-NEXT:    vpsubq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1819; CHECK-NEXT:    retq1820  %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}"()1821  %2 = sub <2 x i64> %a0, %a11822  ret <2 x i64> %21823}1824 1825define <16 x i8> @stack_fold_psubsb(<16 x i8> %a0, <16 x i8> %a1) {1826; CHECK-LABEL: stack_fold_psubsb:1827; CHECK:       # %bb.0:1828; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1829; CHECK-NEXT:    #APP1830; CHECK-NEXT:    nop1831; CHECK-NEXT:    #NO_APP1832; CHECK-NEXT:    vpsubsb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1833; CHECK-NEXT:    retq1834  %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}"()1835  %2 = call <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8> %a0, <16 x i8> %a1)1836  ret <16 x i8> %21837}1838declare <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8>, <16 x i8>) nounwind readnone1839 1840define <8 x i16> @stack_fold_psubsw(<8 x i16> %a0, <8 x i16> %a1) {1841; CHECK-LABEL: stack_fold_psubsw:1842; CHECK:       # %bb.0:1843; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1844; CHECK-NEXT:    #APP1845; CHECK-NEXT:    nop1846; CHECK-NEXT:    #NO_APP1847; CHECK-NEXT:    vpsubsw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1848; CHECK-NEXT:    retq1849  %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}"()1850  %2 = call <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16> %a0, <8 x i16> %a1)1851  ret <8 x i16> %21852}1853declare <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16>, <8 x i16>) nounwind readnone1854 1855define <16 x i8> @stack_fold_psubusb(<16 x i8> %a0, <16 x i8> %a1) {1856; CHECK-LABEL: stack_fold_psubusb:1857; CHECK:       # %bb.0:1858; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1859; CHECK-NEXT:    #APP1860; CHECK-NEXT:    nop1861; CHECK-NEXT:    #NO_APP1862; CHECK-NEXT:    vpsubusb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1863; CHECK-NEXT:    retq1864  %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}"()1865  %2 = call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %a0, <16 x i8> %a1)1866  ret <16 x i8> %21867}1868declare <16 x i8> @llvm.usub.sat.v16i8(<16 x i8>, <16 x i8>) nounwind readnone1869 1870define <8 x i16> @stack_fold_psubusw(<8 x i16> %a0, <8 x i16> %a1) {1871; CHECK-LABEL: stack_fold_psubusw:1872; CHECK:       # %bb.0:1873; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1874; CHECK-NEXT:    #APP1875; CHECK-NEXT:    nop1876; CHECK-NEXT:    #NO_APP1877; CHECK-NEXT:    vpsubusw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1878; CHECK-NEXT:    retq1879  %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}"()1880  %2 = call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %a0, <8 x i16> %a1)1881  ret <8 x i16> %21882}1883declare <8 x i16> @llvm.usub.sat.v8i16(<8 x i16>, <8 x i16>) nounwind readnone1884 1885define <8 x i16> @stack_fold_psubw(<8 x i16> %a0, <8 x i16> %a1) {1886; CHECK-LABEL: stack_fold_psubw:1887; CHECK:       # %bb.0:1888; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1889; CHECK-NEXT:    #APP1890; CHECK-NEXT:    nop1891; CHECK-NEXT:    #NO_APP1892; CHECK-NEXT:    vpsubw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1893; CHECK-NEXT:    retq1894  %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}"()1895  %2 = sub <8 x i16> %a0, %a11896  ret <8 x i16> %21897}1898 1899define i32 @stack_fold_ptest(<2 x i64> %a0, <2 x i64> %a1) {1900; CHECK-LABEL: stack_fold_ptest:1901; CHECK:       # %bb.0:1902; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1903; CHECK-NEXT:    #APP1904; CHECK-NEXT:    nop1905; CHECK-NEXT:    #NO_APP1906; CHECK-NEXT:    xorl %eax, %eax1907; CHECK-NEXT:    vptest {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1908; CHECK-NEXT:    setb %al1909; CHECK-NEXT:    retq1910  %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}"()1911  %2 = call i32 @llvm.x86.sse41.ptestc(<2 x i64> %a0, <2 x i64> %a1)1912  ret i32 %21913}1914declare i32 @llvm.x86.sse41.ptestc(<2 x i64>, <2 x i64>) nounwind readnone1915 1916define i32 @stack_fold_ptest_ymm(<4 x i64> %a0, <4 x i64> %a1) {1917; CHECK-LABEL: stack_fold_ptest_ymm:1918; CHECK:       # %bb.0:1919; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1920; CHECK-NEXT:    #APP1921; CHECK-NEXT:    nop1922; CHECK-NEXT:    #NO_APP1923; CHECK-NEXT:    xorl %eax, %eax1924; CHECK-NEXT:    vptest {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload1925; CHECK-NEXT:    setb %al1926; CHECK-NEXT:    vzeroupper1927; CHECK-NEXT:    retq1928  %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}"()1929  %2 = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a0, <4 x i64> %a1)1930  ret i32 %21931}1932declare i32 @llvm.x86.avx.ptestc.256(<4 x i64>, <4 x i64>) nounwind readnone1933 1934define <16 x i8> @stack_fold_punpckhbw(<16 x i8> %a0, <16 x i8> %a1) {1935; CHECK-LABEL: stack_fold_punpckhbw:1936; CHECK:       # %bb.0:1937; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1938; CHECK-NEXT:    #APP1939; CHECK-NEXT:    nop1940; CHECK-NEXT:    #NO_APP1941; CHECK-NEXT:    vpunpckhbw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1942; 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]1943; CHECK-NEXT:    retq1944  %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}"()1945  %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>1946  ret <16 x i8> %21947}1948 1949define <4 x i32> @stack_fold_punpckhdq(<4 x i32> %a0, <4 x i32> %a1) {1950; CHECK-LABEL: stack_fold_punpckhdq:1951; CHECK:       # %bb.0:1952; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1953; CHECK-NEXT:    #APP1954; CHECK-NEXT:    nop1955; CHECK-NEXT:    #NO_APP1956; CHECK-NEXT:    vpunpckhdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1957; CHECK-NEXT:    # xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]1958; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11959; CHECK-NEXT:    vpsubd %xmm1, %xmm0, %xmm01960; CHECK-NEXT:    retq1961  %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}"()1962  %2 = shufflevector <4 x i32> %a0, <4 x i32> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1963  ; add forces execution domain1964  %3 = add <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>1965  ret <4 x i32> %31966}1967 1968define <2 x i64> @stack_fold_punpckhqdq(<2 x i64> %a0, <2 x i64> %a1) {1969; CHECK-LABEL: stack_fold_punpckhqdq:1970; CHECK:       # %bb.0:1971; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1972; CHECK-NEXT:    #APP1973; CHECK-NEXT:    nop1974; CHECK-NEXT:    #NO_APP1975; CHECK-NEXT:    vpunpckhqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1976; CHECK-NEXT:    # xmm0 = xmm0[1],mem[1]1977; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm11978; CHECK-NEXT:    vpsubq %xmm1, %xmm0, %xmm01979; CHECK-NEXT:    retq1980  %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}"()1981  %2 = shufflevector <2 x i64> %a0, <2 x i64> %a1, <2 x i32> <i32 1, i32 3>1982  ; add forces execution domain1983  %3 = add <2 x i64> %2, <i64 1, i64 1>1984  ret <2 x i64> %31985}1986 1987define <8 x i16> @stack_fold_punpckhwd(<8 x i16> %a0, <8 x i16> %a1) {1988; CHECK-LABEL: stack_fold_punpckhwd:1989; CHECK:       # %bb.0:1990; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1991; CHECK-NEXT:    #APP1992; CHECK-NEXT:    nop1993; CHECK-NEXT:    #NO_APP1994; CHECK-NEXT:    vpunpckhwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1995; CHECK-NEXT:    # xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7]1996; CHECK-NEXT:    retq1997  %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}"()1998  %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>1999  ret <8 x i16> %22000}2001 2002define <16 x i8> @stack_fold_punpcklbw(<16 x i8> %a0, <16 x i8> %a1) {2003; CHECK-LABEL: stack_fold_punpcklbw:2004; CHECK:       # %bb.0:2005; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2006; CHECK-NEXT:    #APP2007; CHECK-NEXT:    nop2008; CHECK-NEXT:    #NO_APP2009; CHECK-NEXT:    vpunpcklbw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2010; 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]2011; CHECK-NEXT:    retq2012  %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}"()2013  %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>2014  ret <16 x i8> %22015}2016 2017define <4 x i32> @stack_fold_punpckldq(<4 x i32> %a0, <4 x i32> %a1) {2018; CHECK-LABEL: stack_fold_punpckldq:2019; CHECK:       # %bb.0:2020; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2021; CHECK-NEXT:    #APP2022; CHECK-NEXT:    nop2023; CHECK-NEXT:    #NO_APP2024; CHECK-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2025; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2026; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm12027; CHECK-NEXT:    vpsubd %xmm1, %xmm0, %xmm02028; CHECK-NEXT:    retq2029  %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}"()2030  %2 = shufflevector <4 x i32> %a0, <4 x i32> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>2031  ; add forces execution domain2032  %3 = add <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>2033  ret <4 x i32> %32034}2035 2036define <2 x i64> @stack_fold_punpcklqdq(<2 x i64> %a0, <2 x i64> %a1) {2037; CHECK-LABEL: stack_fold_punpcklqdq:2038; CHECK:       # %bb.0:2039; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2040; CHECK-NEXT:    #APP2041; CHECK-NEXT:    nop2042; CHECK-NEXT:    #NO_APP2043; CHECK-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2044; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0]2045; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm12046; CHECK-NEXT:    vpsubq %xmm1, %xmm0, %xmm02047; CHECK-NEXT:    retq2048  %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}"()2049  %2 = shufflevector <2 x i64> %a0, <2 x i64> %a1, <2 x i32> <i32 0, i32 2>2050  ; add forces execution domain2051  %3 = add <2 x i64> %2, <i64 1, i64 1>2052  ret <2 x i64> %32053}2054 2055define <8 x i16> @stack_fold_punpcklwd(<8 x i16> %a0, <8 x i16> %a1) {2056; CHECK-LABEL: stack_fold_punpcklwd:2057; CHECK:       # %bb.0:2058; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2059; CHECK-NEXT:    #APP2060; CHECK-NEXT:    nop2061; CHECK-NEXT:    #NO_APP2062; CHECK-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2063; CHECK-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2064; CHECK-NEXT:    retq2065  %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}"()2066  %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>2067  ret <8 x i16> %22068}2069 2070define <16 x i8> @stack_fold_pxor(<16 x i8> %a0, <16 x i8> %a1) {2071; CHECK-LABEL: stack_fold_pxor:2072; CHECK:       # %bb.0:2073; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2074; CHECK-NEXT:    #APP2075; CHECK-NEXT:    nop2076; CHECK-NEXT:    #NO_APP2077; CHECK-NEXT:    vpxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2078; CHECK-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm12079; CHECK-NEXT:    vpsubb %xmm1, %xmm0, %xmm02080; CHECK-NEXT:    retq2081  %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}"()2082  %2 = xor <16 x i8> %a0, %a12083  ; add forces execution domain2084  %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>2085  ret <16 x i8> %32086}2087