brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.8 KiB · b7d950e Raw
261 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=sapphirerapids -verify-machineinstrs | FileCheck %s3 4define <8 x i64> @foo_reg_512(<8 x i64> %0, <8 x i64> %1, <8 x i64> %2, <8 x i64> %3, <8 x i64> %4, <8 x i64> %5) {5; CHECK-LABEL: foo_reg_512:6; CHECK:       # %bb.0:7; CHECK-NEXT:    vpdpwssd %zmm2, %zmm1, %zmm08; CHECK-NEXT:    vpmaddwd %zmm3, %zmm1, %zmm29; CHECK-NEXT:    vpaddd %zmm2, %zmm0, %zmm010; CHECK-NEXT:    vpmaddwd %zmm4, %zmm1, %zmm211; CHECK-NEXT:    vpaddd %zmm2, %zmm0, %zmm012; CHECK-NEXT:    vpmaddwd %zmm5, %zmm1, %zmm113; CHECK-NEXT:    vpaddd %zmm1, %zmm0, %zmm014; CHECK-NEXT:    retq15  %7 = bitcast <8 x i64> %0 to <16 x i32>16  %8 = bitcast <8 x i64> %1 to <16 x i32>17  %9 = bitcast <8 x i64> %2 to <16 x i32>18  %10 = tail call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %7, <16 x i32> %8, <16 x i32> %9)19  %11 = bitcast <8 x i64> %3 to <16 x i32>20  %12 = tail call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %10, <16 x i32> %8, <16 x i32> %11)21  %13 = bitcast <8 x i64> %4 to <16 x i32>22  %14 = tail call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %12, <16 x i32> %8, <16 x i32> %13)23  %15 = bitcast <8 x i64> %5 to <16 x i32>24  %16 = tail call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %14, <16 x i32> %8, <16 x i32> %15)25  %17 = bitcast <16 x i32> %16 to <8 x i64>26  ret <8 x i64> %1727}28 29; __m512i foo(int cnt, __m512i c, __m512i b, __m512i *p) {30;31;     for (int i = 0; i < cnt; ++i) {32;         __m512i a = p[i];33;         __m512i m = _mm512_madd_epi16(b, a);34;         c = _mm512_add_epi32(m, c);35;     }36;37;     return c;38; }39define <8 x i64> @foo_512(i32 %0, <8 x i64> %1, <8 x i64> %2, ptr %3) {40; CHECK-LABEL: foo_512:41; CHECK:       # %bb.0:42; CHECK-NEXT:    testl %edi, %edi43; CHECK-NEXT:    jle .LBB1_644; CHECK-NEXT:  # %bb.1:45; CHECK-NEXT:    movl %edi, %edx46; CHECK-NEXT:    movl %edx, %eax47; CHECK-NEXT:    andl $3, %eax48; CHECK-NEXT:    cmpl $4, %edi49; CHECK-NEXT:    jae .LBB1_750; CHECK-NEXT:  # %bb.2:51; CHECK-NEXT:    xorl %ecx, %ecx52; CHECK-NEXT:    jmp .LBB1_353; CHECK-NEXT:  .LBB1_7:54; CHECK-NEXT:    andl $-4, %edx55; CHECK-NEXT:    leaq 192(%rsi), %rdi56; CHECK-NEXT:    xorl %ecx, %ecx57; CHECK-NEXT:    .p2align 458; CHECK-NEXT:  .LBB1_8: # =>This Inner Loop Header: Depth=159; CHECK-NEXT:    vpdpwssd -192(%rdi), %zmm1, %zmm060; CHECK-NEXT:    vpmaddwd -128(%rdi), %zmm1, %zmm261; CHECK-NEXT:    vpaddd %zmm2, %zmm0, %zmm062; CHECK-NEXT:    vpmaddwd -64(%rdi), %zmm1, %zmm263; CHECK-NEXT:    vpaddd %zmm2, %zmm0, %zmm064; CHECK-NEXT:    vpmaddwd (%rdi), %zmm1, %zmm265; CHECK-NEXT:    vpaddd %zmm2, %zmm0, %zmm066; CHECK-NEXT:    addq $4, %rcx67; CHECK-NEXT:    addq $256, %rdi # imm = 0x10068; CHECK-NEXT:    cmpq %rcx, %rdx69; CHECK-NEXT:    jne .LBB1_870; CHECK-NEXT:  .LBB1_3:71; CHECK-NEXT:    testq %rax, %rax72; CHECK-NEXT:    je .LBB1_673; CHECK-NEXT:  # %bb.4: # %.preheader74; CHECK-NEXT:    shlq $6, %rcx75; CHECK-NEXT:    addq %rcx, %rsi76; CHECK-NEXT:    shll $6, %eax77; CHECK-NEXT:    xorl %ecx, %ecx78; CHECK-NEXT:    .p2align 479; CHECK-NEXT:  .LBB1_5: # =>This Inner Loop Header: Depth=180; CHECK-NEXT:    vpdpwssd (%rsi,%rcx), %zmm1, %zmm081; CHECK-NEXT:    addq $64, %rcx82; CHECK-NEXT:    cmpq %rcx, %rax83; CHECK-NEXT:    jne .LBB1_584; CHECK-NEXT:  .LBB1_6:85; CHECK-NEXT:    retq86  %5 = icmp sgt i32 %0, 087  br i1 %5, label %6, label %3388 896:                                                ; preds = %490  %7 = bitcast <8 x i64> %2 to <32 x i16>91  %8 = bitcast <8 x i64> %1 to <16 x i32>92  %9 = zext i32 %0 to i6493  %10 = and i64 %9, 394  %11 = icmp ult i32 %0, 495  br i1 %11, label %14, label %1296 9712:                                               ; preds = %698  %13 = and i64 %9, 429496729299  br label %35100 10114:                                               ; preds = %35, %6102  %15 = phi <16 x i32> [ undef, %6 ], [ %57, %35 ]103  %16 = phi i64 [ 0, %6 ], [ %58, %35 ]104  %17 = phi <16 x i32> [ %8, %6 ], [ %57, %35 ]105  %18 = icmp eq i64 %10, 0106  br i1 %18, label %30, label %19107 10819:                                               ; preds = %14, %19109  %20 = phi i64 [ %27, %19 ], [ %16, %14 ]110  %21 = phi <16 x i32> [ %26, %19 ], [ %17, %14 ]111  %22 = phi i64 [ %28, %19 ], [ 0, %14 ]112  %23 = getelementptr inbounds <8 x i64>, ptr %3, i64 %20113  %24 = load <32 x i16>, ptr %23, align 64114  %25 = tail call <16 x i32> @llvm.x86.avx512.pmaddw.d.512(<32 x i16> %7, <32 x i16> %24)115  %26 = add <16 x i32> %25, %21116  %27 = add nuw nsw i64 %20, 1117  %28 = add i64 %22, 1118  %29 = icmp eq i64 %28, %10119  br i1 %29, label %30, label %19120 12130:                                               ; preds = %19, %14122  %31 = phi <16 x i32> [ %15, %14 ], [ %26, %19 ]123  %32 = bitcast <16 x i32> %31 to <8 x i64>124  br label %33125 12633:                                               ; preds = %30, %4127  %34 = phi <8 x i64> [ %32, %30 ], [ %1, %4 ]128  ret <8 x i64> %34129 13035:                                               ; preds = %35, %12131  %36 = phi i64 [ 0, %12 ], [ %58, %35 ]132  %37 = phi <16 x i32> [ %8, %12 ], [ %57, %35 ]133  %38 = phi i64 [ 0, %12 ], [ %59, %35 ]134  %39 = getelementptr inbounds <8 x i64>, ptr %3, i64 %36135  %40 = load <32 x i16>, ptr %39, align 64136  %41 = tail call <16 x i32> @llvm.x86.avx512.pmaddw.d.512(<32 x i16> %7, <32 x i16> %40)137  %42 = add <16 x i32> %41, %37138  %43 = or disjoint i64 %36, 1139  %44 = getelementptr inbounds <8 x i64>, ptr %3, i64 %43140  %45 = load <32 x i16>, ptr %44, align 64141  %46 = tail call <16 x i32> @llvm.x86.avx512.pmaddw.d.512(<32 x i16> %7, <32 x i16> %45)142  %47 = add <16 x i32> %46, %42143  %48 = or disjoint i64 %36, 2144  %49 = getelementptr inbounds <8 x i64>, ptr %3, i64 %48145  %50 = load <32 x i16>, ptr %49, align 64146  %51 = tail call <16 x i32> @llvm.x86.avx512.pmaddw.d.512(<32 x i16> %7, <32 x i16> %50)147  %52 = add <16 x i32> %51, %47148  %53 = or disjoint i64 %36, 3149  %54 = getelementptr inbounds <8 x i64>, ptr %3, i64 %53150  %55 = load <32 x i16>, ptr %54, align 64151  %56 = tail call <16 x i32> @llvm.x86.avx512.pmaddw.d.512(<32 x i16> %7, <32 x i16> %55)152  %57 = add <16 x i32> %56, %52153  %58 = add nuw nsw i64 %36, 4154  %59 = add i64 %38, 4155  %60 = icmp eq i64 %59, %13156  br i1 %60, label %14, label %35157}158 159; void bar(int cnt, __m512i *c, __m512i b, __m512i *p) {160;     for (int i = 0; i < cnt; ++i) {161;         __m512i a = p[i];162;         c[i] = _mm512_dpwssd_epi32(c[i], b, a);163;     }164; }165define void @bar_512(i32 %0, ptr %1, <8 x i64> %2, ptr %3) {166; CHECK-LABEL: bar_512:167; CHECK:       # %bb.0:168; CHECK-NEXT:    testl %edi, %edi169; CHECK-NEXT:    jle .LBB2_5170; CHECK-NEXT:  # %bb.1:171; CHECK-NEXT:    movl %edi, %eax172; CHECK-NEXT:    cmpl $1, %edi173; CHECK-NEXT:    jne .LBB2_6174; CHECK-NEXT:  # %bb.2:175; CHECK-NEXT:    xorl %ecx, %ecx176; CHECK-NEXT:    jmp .LBB2_3177; CHECK-NEXT:  .LBB2_6:178; CHECK-NEXT:    movl %eax, %edi179; CHECK-NEXT:    andl $-2, %edi180; CHECK-NEXT:    movl $64, %r8d181; CHECK-NEXT:    xorl %ecx, %ecx182; CHECK-NEXT:    .p2align 4183; CHECK-NEXT:  .LBB2_7: # =>This Inner Loop Header: Depth=1184; CHECK-NEXT:    vmovdqa64 (%rsi,%r8), %zmm1185; CHECK-NEXT:    vpmaddwd -64(%rdx,%r8), %zmm0, %zmm2186; CHECK-NEXT:    vpaddd -64(%rsi,%r8), %zmm2, %zmm2187; CHECK-NEXT:    vmovdqa64 %zmm2, -64(%rsi,%r8)188; CHECK-NEXT:    vpmaddwd (%rdx,%r8), %zmm0, %zmm2189; CHECK-NEXT:    vpaddd %zmm2, %zmm1, %zmm1190; CHECK-NEXT:    vmovdqa64 %zmm1, (%rsi,%r8)191; CHECK-NEXT:    addq $2, %rcx192; CHECK-NEXT:    subq $-128, %r8193; CHECK-NEXT:    cmpq %rcx, %rdi194; CHECK-NEXT:    jne .LBB2_7195; CHECK-NEXT:  .LBB2_3:196; CHECK-NEXT:    testb $1, %al197; CHECK-NEXT:    je .LBB2_5198; CHECK-NEXT:  # %bb.4:199; CHECK-NEXT:    shlq $6, %rcx200; CHECK-NEXT:    vpmaddwd (%rdx,%rcx), %zmm0, %zmm0201; CHECK-NEXT:    vpaddd (%rsi,%rcx), %zmm0, %zmm0202; CHECK-NEXT:    vmovdqa64 %zmm0, (%rsi,%rcx)203; CHECK-NEXT:  .LBB2_5:204; CHECK-NEXT:    vzeroupper205; CHECK-NEXT:    retq206  %5 = icmp sgt i32 %0, 0207  br i1 %5, label %6, label %22208 2096:                                                ; preds = %4210  %7 = bitcast <8 x i64> %2 to <16 x i32>211  %8 = zext i32 %0 to i64212  %9 = and i64 %8, 1213  %10 = icmp eq i32 %0, 1214  br i1 %10, label %13, label %11215 21611:                                               ; preds = %6217  %12 = and i64 %8, 4294967294218  br label %23219 22013:                                               ; preds = %23, %6221  %14 = phi i64 [ 0, %6 ], [ %37, %23 ]222  %15 = icmp eq i64 %9, 0223  br i1 %15, label %22, label %16224 22516:                                               ; preds = %13226  %17 = getelementptr inbounds <8 x i64>, ptr %3, i64 %14227  %18 = load <16 x i32>, ptr %17, align 64228  %19 = getelementptr inbounds <8 x i64>, ptr %1, i64 %14229  %20 = load <16 x i32>, ptr %19, align 64230  %21 = tail call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %20, <16 x i32> %7, <16 x i32> %18)231  store <16 x i32> %21, ptr %19, align 64232  br label %22233 23422:                                               ; preds = %16, %13, %4235  ret void236 23723:                                               ; preds = %23, %11238  %24 = phi i64 [ 0, %11 ], [ %37, %23 ]239  %25 = phi i64 [ 0, %11 ], [ %38, %23 ]240  %26 = getelementptr inbounds <8 x i64>, ptr %3, i64 %24241  %27 = load <16 x i32>, ptr %26, align 64242  %28 = getelementptr inbounds <8 x i64>, ptr %1, i64 %24243  %29 = load <16 x i32>, ptr %28, align 64244  %30 = tail call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %29, <16 x i32> %7, <16 x i32> %27)245  store <16 x i32> %30, ptr %28, align 64246  %31 = or disjoint i64 %24, 1247  %32 = getelementptr inbounds <8 x i64>, ptr %3, i64 %31248  %33 = load <16 x i32>, ptr %32, align 64249  %34 = getelementptr inbounds <8 x i64>, ptr %1, i64 %31250  %35 = load <16 x i32>, ptr %34, align 64251  %36 = tail call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %35, <16 x i32> %7, <16 x i32> %33)252  store <16 x i32> %36, ptr %34, align 64253  %37 = add nuw nsw i64 %24, 2254  %38 = add i64 %25, 2255  %39 = icmp eq i64 %38, %12256  br i1 %39, label %13, label %23257}258 259declare <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32>, <16 x i32>, <16 x i32>) #3260declare <16 x i32> @llvm.x86.avx512.pmaddw.d.512(<32 x i16>, <32 x i16>) #3261