brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.8 KiB · 9f2f1d5 Raw
154 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512vp2intersect -verify-machineinstrs | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vp2intersect -verify-machineinstrs | FileCheck %s --check-prefix=X644 5; Test with more than four live mask pairs6 7define void @test(<16 x i32> %a0, <16 x i32> %b0, <16 x i32> %a1, <16 x i32> %b1, <16 x i32> %a2, <16 x i32> %b2, <16 x i32> %a3, <16 x i32> %b3, <16 x i32> %a4, <16 x i32> %b4, ptr nocapture %m0, ptr nocapture %m1) nounwind {8; X86-LABEL: test:9; X86:       # %bb.0: # %entry10; X86-NEXT:    pushl %ebp11; X86-NEXT:    movl %esp, %ebp12; X86-NEXT:    pushl %edi13; X86-NEXT:    pushl %esi14; X86-NEXT:    andl $-64, %esp15; X86-NEXT:    subl $64, %esp16; X86-NEXT:    movl 456(%ebp), %esi17; X86-NEXT:    vmovdqa64 328(%ebp), %zmm318; X86-NEXT:    vmovdqa64 200(%ebp), %zmm419; X86-NEXT:    vmovdqa64 72(%ebp), %zmm520; X86-NEXT:    vp2intersectd %zmm1, %zmm0, %k021; X86-NEXT:    kmovw %k0, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill22; X86-NEXT:    kmovw %k1, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill23; X86-NEXT:    vp2intersectd 8(%ebp), %zmm2, %k024; X86-NEXT:    kmovw %k0, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill25; X86-NEXT:    kmovw %k1, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill26; X86-NEXT:    vp2intersectd 136(%ebp), %zmm5, %k027; X86-NEXT:    kmovw %k0, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill28; X86-NEXT:    kmovw %k1, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill29; X86-NEXT:    vp2intersectd 264(%ebp), %zmm4, %k030; X86-NEXT:    kmovw %k0, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill31; X86-NEXT:    kmovw %k1, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill32; X86-NEXT:    vp2intersectd 392(%ebp), %zmm3, %k033; X86-NEXT:    kmovw %k0, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill34; X86-NEXT:    kmovw %k1, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill35; X86-NEXT:    vzeroupper36; X86-NEXT:    calll dummy@PLT37; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k0 # 2-byte Reload38; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k1 # 2-byte Reload39; X86-NEXT:    kmovw %k0, %eax40; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k0 # 2-byte Reload41; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k1 # 2-byte Reload42; X86-NEXT:    kmovw %k0, %edx43; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k0 # 2-byte Reload44; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k1 # 2-byte Reload45; X86-NEXT:    kmovw %k0, %ecx46; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k0 # 2-byte Reload47; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k1 # 2-byte Reload48; X86-NEXT:    kmovw %k0, %edi49; X86-NEXT:    addl %edi, %eax50; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k2 # 2-byte Reload51; X86-NEXT:    kmovw {{[-0-9]+}}(%e{{[sb]}}p), %k3 # 2-byte Reload52; X86-NEXT:    kmovw %k2, %edi53; X86-NEXT:    addl %edx, %ecx54; X86-NEXT:    kmovw %k1, %edx55; X86-NEXT:    addl %edi, %edx56; X86-NEXT:    addl %edx, %eax57; X86-NEXT:    addl %ecx, %eax58; X86-NEXT:    movw %ax, (%esi)59; X86-NEXT:    leal -8(%ebp), %esp60; X86-NEXT:    popl %esi61; X86-NEXT:    popl %edi62; X86-NEXT:    popl %ebp63; X86-NEXT:    retl64;65; X64-LABEL: test:66; X64:       # %bb.0: # %entry67; X64-NEXT:    pushq %rbp68; X64-NEXT:    movq %rsp, %rbp69; X64-NEXT:    pushq %rbx70; X64-NEXT:    andq $-64, %rsp71; X64-NEXT:    subq $64, %rsp72; X64-NEXT:    movq %rdi, %rbx73; X64-NEXT:    vmovdqa64 16(%rbp), %zmm874; X64-NEXT:    vp2intersectd %zmm1, %zmm0, %k075; X64-NEXT:    kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill76; X64-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill77; X64-NEXT:    vp2intersectd %zmm3, %zmm2, %k078; X64-NEXT:    kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill79; X64-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill80; X64-NEXT:    vp2intersectd %zmm5, %zmm4, %k081; X64-NEXT:    kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill82; X64-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill83; X64-NEXT:    vp2intersectd %zmm7, %zmm6, %k084; X64-NEXT:    kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill85; X64-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill86; X64-NEXT:    vp2intersectd 80(%rbp), %zmm8, %k087; X64-NEXT:    kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill88; X64-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill89; X64-NEXT:    vzeroupper90; X64-NEXT:    callq dummy@PLT91; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload92; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 # 2-byte Reload93; X64-NEXT:    kmovw %k0, %eax94; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload95; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 # 2-byte Reload96; X64-NEXT:    kmovw %k0, %ecx97; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload98; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 # 2-byte Reload99; X64-NEXT:    kmovw %k0, %edx100; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload101; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 # 2-byte Reload102; X64-NEXT:    kmovw %k0, %esi103; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 2-byte Reload104; X64-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 # 2-byte Reload105; X64-NEXT:    kmovw %k0, %edi106; X64-NEXT:    kmovw %k1, %r8d107; X64-NEXT:    addl %edi, %eax108; X64-NEXT:    addl %ecx, %edx109; X64-NEXT:    addl %eax, %edx110; X64-NEXT:    addl %r8d, %edx111; X64-NEXT:    addl %esi, %edx112; X64-NEXT:    movw %dx, (%rbx)113; X64-NEXT:    leaq -8(%rbp), %rsp114; X64-NEXT:    popq %rbx115; X64-NEXT:    popq %rbp116; X64-NEXT:    retq117entry:118  %0 = call { <16 x i1>, <16 x i1> } @llvm.x86.avx512.vp2intersect.d.512(<16 x i32> %a0, <16 x i32> %b0)119  %1 = call { <16 x i1>, <16 x i1> } @llvm.x86.avx512.vp2intersect.d.512(<16 x i32> %a1, <16 x i32> %b1)120  %2 = call { <16 x i1>, <16 x i1> } @llvm.x86.avx512.vp2intersect.d.512(<16 x i32> %a2, <16 x i32> %b2)121  %3 = call { <16 x i1>, <16 x i1> } @llvm.x86.avx512.vp2intersect.d.512(<16 x i32> %a3, <16 x i32> %b3)122  %4 = call { <16 x i1>, <16 x i1> } @llvm.x86.avx512.vp2intersect.d.512(<16 x i32> %a4, <16 x i32> %b4)123 124  %5 = extractvalue { <16 x i1>, <16 x i1> } %0, 0125  %6 = extractvalue { <16 x i1>, <16 x i1> } %1, 0126  %7 = extractvalue { <16 x i1>, <16 x i1> } %2, 0127  %8 = extractvalue { <16 x i1>, <16 x i1> } %3, 0128  %9 = extractvalue { <16 x i1>, <16 x i1> } %4, 0129  %10 = extractvalue { <16 x i1>, <16 x i1> } %0, 1130  %11 = extractvalue { <16 x i1>, <16 x i1> } %1, 1131 132  call void @dummy()133 134  %12 = bitcast <16 x i1> %5 to i16135  %13 = bitcast <16 x i1> %6 to i16136  %14 = bitcast <16 x i1> %7 to i16137  %15 = bitcast <16 x i1> %8 to i16138  %16 = bitcast <16 x i1> %9 to i16139  %17 = bitcast <16 x i1> %10 to i16140  %18 = bitcast <16 x i1> %11 to i16141 142  %19 = add i16 %12, %13143  %20 = add i16 %14, %15144  %21 = add i16 %16, %17145  %22 = add i16 %19, %21146  %23 = add i16 %22, %20147 148  store i16 %23, ptr %m0, align 16149  ret void150}151 152declare { <16 x i1>, <16 x i1> } @llvm.x86.avx512.vp2intersect.d.512(<16 x i32>, <16 x i32>)153declare void @dummy()154