brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · f9290b9 Raw
64 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=x86_64-unknown-linux-gnu  -mattr=+avx < %s -o - | FileCheck %s3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-linux-gnu"6 7; Regressed test from https://github.com/llvm/llvm-project/issues/619238define void @test_loop(ptr align 1 %src, ptr align 1 %dest, i32 %len) {9; CHECK-LABEL: test_loop:10; CHECK:       # %bb.0: # %entry11; CHECK-NEXT:    cmpl $32, %edx12; CHECK-NEXT:    jb .LBB0_413; CHECK-NEXT:  # %bb.1: # %memcmp.loop.preheader14; CHECK-NEXT:    movl %edx, %eax15; CHECK-NEXT:    andl $-32, %eax16; CHECK-NEXT:    xorl %ecx, %ecx17; CHECK-NEXT:    .p2align 418; CHECK-NEXT:  .LBB0_2: # %memcmp.loop19; CHECK-NEXT:    # =>This Inner Loop Header: Depth=120; CHECK-NEXT:    vmovups (%rsi,%rcx), %ymm021; CHECK-NEXT:    vxorps (%rdi,%rcx), %ymm0, %ymm022; CHECK-NEXT:    vptest %ymm0, %ymm023; CHECK-NEXT:    jne .LBB0_424; CHECK-NEXT:  # %bb.3: # %memcmp.loop.latch25; CHECK-NEXT:    # in Loop: Header=BB0_2 Depth=126; CHECK-NEXT:    addq $32, %rcx27; CHECK-NEXT:    cmpq %rax, %rcx28; CHECK-NEXT:    jb .LBB0_229; CHECK-NEXT:  .LBB0_4: # %done30; CHECK-NEXT:    vzeroupper31; CHECK-NEXT:    retq32entry:33  %len.wide = zext i32 %len to i6434  %elements.len = lshr i64 %len.wide, 035  %loop.entry.cond = icmp uge i64 %elements.len, 3236  br i1 %loop.entry.cond, label %memcmp.loop.preheader, label %done37 38memcmp.loop.preheader:                            ; preds = %entry39  %memcmp.loop.iters = lshr i64 %elements.len, 540  %memcmp.loop.elements = shl i64 %memcmp.loop.iters, 541  br label %memcmp.loop42 43memcmp.loop:                                      ; preds = %memcmp.loop.latch, %memcmp.loop.preheader44  %vector.index = phi i64 [ 0, %memcmp.loop.preheader ], [ %vector.index.next, %memcmp.loop.latch ]45  %left.vector_start_ptr = getelementptr inbounds i8, ptr %dest, i64 %vector.index46  %right.vector_start_ptr = getelementptr inbounds i8, ptr %src, i64 %vector.index47  %left.vector = load <32 x i8>, ptr %left.vector_start_ptr, align 148  %right.vector = load <32 x i8>, ptr %right.vector_start_ptr, align 149  %vec.cmp = icmp eq <32 x i8> %left.vector, %right.vector50  %vec.cmp.reduced = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %vec.cmp)51  br i1 %vec.cmp.reduced, label %memcmp.loop.latch, label %done52 53memcmp.loop.latch:                                ; preds = %memcmp.loop54  %vector.index.next = add i64 %vector.index, 3255  %loop.continue = icmp ult i64 %vector.index.next, %memcmp.loop.elements56  br i1 %loop.continue, label %memcmp.loop, label %done57 58done:59  ret void60}61 62; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)63declare i1 @llvm.vector.reduce.and.v32i1(<32 x i1>) #264