[llvm] ad2a48e - [Test] Commit test for PR61923

Max Kazantsev via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 4 01:27:33 PDT 2023


Author: Max Kazantsev
Date: 2023-04-04T15:27:24+07:00
New Revision: ad2a48eaedac24c4b92a91ae8ac9c46037b61102

URL: https://github.com/llvm/llvm-project/commit/ad2a48eaedac24c4b92a91ae8ac9c46037b61102
DIFF: https://github.com/llvm/llvm-project/commit/ad2a48eaedac24c4b92a91ae8ac9c46037b61102.diff

LOG: [Test] Commit test for PR61923

We see increased number of assembly instructions after patch
24780e13e5be1501e34330148137a10fa9965166 for this test. See details
at https://github.com/llvm/llvm-project/issues/61923.

Added: 
    llvm/test/CodeGen/X86/pr61923.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/pr61923.ll b/llvm/test/CodeGen/X86/pr61923.ll
new file mode 100644
index 000000000000..aff972daa82d
--- /dev/null
+++ b/llvm/test/CodeGen/X86/pr61923.ll
@@ -0,0 +1,68 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
+; RUN: llc -mtriple=x86_64-unknown-linux-gnu  -mattr=+avx < %s -o - | FileCheck %s
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+; FIXME: Regressed test from https://github.com/llvm/llvm-project/issues/61923
+define void @test_loop(ptr align 1 %src, ptr align 1 %dest, i32 %len) {
+; CHECK-LABEL: test_loop:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    cmpl $32, %edx
+; CHECK-NEXT:    jb .LBB0_4
+; CHECK-NEXT:  # %bb.1: # %memcmp.loop.preheader
+; CHECK-NEXT:    movl %edx, %eax
+; CHECK-NEXT:    andl $-32, %eax
+; CHECK-NEXT:    xorl %ecx, %ecx
+; CHECK-NEXT:    .p2align 4, 0x90
+; CHECK-NEXT:  .LBB0_2: # %memcmp.loop
+; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
+; CHECK-NEXT:    vmovdqu (%rsi,%rcx), %xmm0
+; CHECK-NEXT:    vmovdqu 16(%rsi,%rcx), %xmm1
+; CHECK-NEXT:    vpcmpeqb (%rdi,%rcx), %xmm0, %xmm0
+; CHECK-NEXT:    vpmovmskb %xmm0, %edx
+; CHECK-NEXT:    vpcmpeqb 16(%rdi,%rcx), %xmm1, %xmm0
+; CHECK-NEXT:    vpmovmskb %xmm0, %r8d
+; CHECK-NEXT:    shll $16, %r8d
+; CHECK-NEXT:    orl %edx, %r8d
+; CHECK-NEXT:    cmpl $-1, %r8d
+; CHECK-NEXT:    jne .LBB0_4
+; CHECK-NEXT:  # %bb.3: # %memcmp.loop.latch
+; CHECK-NEXT:    # in Loop: Header=BB0_2 Depth=1
+; CHECK-NEXT:    addq $32, %rcx
+; CHECK-NEXT:    cmpq %rax, %rcx
+; CHECK-NEXT:    jb .LBB0_2
+; CHECK-NEXT:  .LBB0_4: # %done
+; CHECK-NEXT:    retq
+entry:
+  %len.wide = zext i32 %len to i64
+  %elements.len = lshr i64 %len.wide, 0
+  %loop.entry.cond = icmp uge i64 %elements.len, 32
+  br i1 %loop.entry.cond, label %memcmp.loop.preheader, label %done
+
+memcmp.loop.preheader:                            ; preds = %entry
+  %memcmp.loop.iters = lshr i64 %elements.len, 5
+  %memcmp.loop.elements = shl i64 %memcmp.loop.iters, 5
+  br label %memcmp.loop
+
+memcmp.loop:                                      ; preds = %memcmp.loop.latch, %memcmp.loop.preheader
+  %vector.index = phi i64 [ 0, %memcmp.loop.preheader ], [ %vector.index.next, %memcmp.loop.latch ]
+  %left.vector_start_ptr = getelementptr inbounds i8, ptr %dest, i64 %vector.index
+  %right.vector_start_ptr = getelementptr inbounds i8, ptr %src, i64 %vector.index
+  %left.vector = load <32 x i8>, ptr %left.vector_start_ptr, align 1
+  %right.vector = load <32 x i8>, ptr %right.vector_start_ptr, align 1
+  %vec.cmp = icmp eq <32 x i8> %left.vector, %right.vector
+  %vec.cmp.reduced = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %vec.cmp)
+  br i1 %vec.cmp.reduced, label %memcmp.loop.latch, label %done
+
+memcmp.loop.latch:                                ; preds = %memcmp.loop
+  %vector.index.next = add i64 %vector.index, 32
+  %loop.continue = icmp ult i64 %vector.index.next, %memcmp.loop.elements
+  br i1 %loop.continue, label %memcmp.loop, label %done
+
+done:
+  ret void
+}
+
+; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
+declare i1 @llvm.vector.reduce.and.v32i1(<32 x i1>) #2


        


More information about the llvm-commits mailing list