blob: 9efd322e7417f1ac24b9d1d3a6754c106e70dc37 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -passes=slp-vectorizer -S -mtriple=aarch64-unknown-linux-gnu -mcpu=olympus < %s | FileCheck %s
define i64 @all_zero_3xi64(ptr %p, i64 %x) {
; CHECK-LABEL: define i64 @all_zero_3xi64(
; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P]], i64 8
; CHECK-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i64 16
; CHECK-NEXT: [[W0:%.*]] = load i64, ptr [[P]], align 8
; CHECK-NEXT: [[C0:%.*]] = icmp eq i64 [[W0]], 0
; CHECK-NEXT: [[W1:%.*]] = load i64, ptr [[P1]], align 8
; CHECK-NEXT: [[C1:%.*]] = icmp eq i64 [[W1]], 0
; CHECK-NEXT: [[AND0:%.*]] = select i1 [[C0]], i1 [[C1]], i1 false
; CHECK-NEXT: [[W2:%.*]] = load i64, ptr [[P2]], align 8
; CHECK-NEXT: [[C2:%.*]] = icmp eq i64 [[W2]], 0
; CHECK-NEXT: [[AND1:%.*]] = select i1 [[AND0]], i1 [[C2]], i1 false
; CHECK-NEXT: br i1 [[AND1]], label %[[EMPTY:.*]], label %[[COUNT:.*]]
; CHECK: [[EMPTY]]:
; CHECK-NEXT: ret i64 0
; CHECK: [[COUNT]]:
; CHECK-NEXT: [[N0:%.*]] = call i64 @llvm.ctpop.i64(i64 [[X]])
; CHECK-NEXT: [[N1:%.*]] = call i64 @llvm.ctpop.i64(i64 [[W0]])
; CHECK-NEXT: [[OR0:%.*]] = or i64 [[N0]], [[N1]]
; CHECK-NEXT: [[N2:%.*]] = call i64 @llvm.ctpop.i64(i64 [[X]])
; CHECK-NEXT: [[TMP4:%.*]] = or i64 [[OR0]], [[N2]]
; CHECK-NEXT: ret i64 [[TMP4]]
;
entry:
%p1 = getelementptr i8, ptr %p, i64 8
%p2 = getelementptr i8, ptr %p, i64 16
%w0 = load i64, ptr %p, align 8
%c0 = icmp eq i64 %w0, 0
%w1 = load i64, ptr %p1, align 8
%c1 = icmp eq i64 %w1, 0
%and0 = select i1 %c0, i1 %c1, i1 false
%w2 = load i64, ptr %p2, align 8
%c2 = icmp eq i64 %w2, 0
%and1 = select i1 %and0, i1 %c2, i1 false
br i1 %and1, label %empty, label %count
empty:
ret i64 0
count:
%n0 = call i64 @llvm.ctpop.i64(i64 %x)
%n1 = call i64 @llvm.ctpop.i64(i64 %w0)
%or0 = or i64 %n0, %n1
%n2 = call i64 @llvm.ctpop.i64(i64 %x)
%or1 = or i64 %or0, %n2
ret i64 %or1
}
declare i64 @llvm.ctpop.i64(i64)