; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p1 < %s | FileCheck %s
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2 -force-streaming < %s | FileCheck %s
;
; WHILEGE
;
define target("aarch64.svcount") @whilege_c8_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilege_c8_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilege pn8.b, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c8(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilege_c8_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilege_c8_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilege pn8.b, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c8(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilege_c16_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilege_c16_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilege pn8.h, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c16(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilege_c16_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilege_c16_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilege pn8.h, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c16(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilege_c32_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilege_c32_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilege pn8.s, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c32(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilege_c32_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilege_c32_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilege pn8.s, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c32(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilege_c64_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilege_c64_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilege pn8.d, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c64(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilege_c64_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilege_c64_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilege pn8.d, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilege.c64(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
;
; WHILEGT
;
define target("aarch64.svcount") @whilegt_c8_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilegt_c8_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilegt pn8.b, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c8(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilegt_c8_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilegt_c8_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilegt pn8.b, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c8(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilegt_c16_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilegt_c16_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilegt pn8.h, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c16(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilegt_c16_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilegt_c16_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilegt pn8.h, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c16(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilegt_c32_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilegt_c32_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilegt pn8.s, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c32(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilegt_c32_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilegt_c32_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilegt pn8.s, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c32(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilegt_c64_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilegt_c64_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilegt pn8.d, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c64(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilegt_c64_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilegt_c64_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilegt pn8.d, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c64(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
;
; WHILEHI
;
define target("aarch64.svcount") @whilehi_c8_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehi_c8_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehi pn8.b, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c8(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehi_c8_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehi_c8_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehi pn8.b, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c8(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehi_c16_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehi_c16_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehi pn8.h, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c16(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehi_c16_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehi_c16_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehi pn8.h, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c16(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehi_c32_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehi_c32_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehi pn8.s, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c32(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehi_c32_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehi_c32_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehi pn8.s, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c32(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehi_c64_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehi_c64_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehi pn8.d, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c64(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehi_c64_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehi_c64_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehi pn8.d, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c64(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
;
; WHILEHS
;
define target("aarch64.svcount") @whilehs_c8_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehs_c8_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehs pn8.b, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c8(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehs_c8_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehs_c8_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehs pn8.b, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c8(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehs_c16_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehs_c16_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehs pn8.h, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c16(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehs_c16_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehs_c16_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehs pn8.h, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c16(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehs_c32_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehs_c32_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehs pn8.s, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c32(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehs_c32_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehs_c32_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehs pn8.s, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c32(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehs_c64_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehs_c64_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehs pn8.d, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c64(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilehs_c64_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilehs_c64_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilehs pn8.d, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c64(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
;
; WHILELE
;
define target("aarch64.svcount") @whilele_c8_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilele_c8_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilele pn8.b, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c8(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilele_c8_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilele_c8_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilele pn8.b, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c8(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilele_c16_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilele_c16_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilele pn8.h, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c16(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilele_c16_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilele_c16_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilele pn8.h, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c16(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilele_c32_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilele_c32_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilele pn8.s, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c32(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilele_c32_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilele_c32_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilele pn8.s, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c32(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilele_c64_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilele_c64_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilele pn8.d, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c64(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilele_c64_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilele_c64_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilele pn8.d, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilele.c64(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
;
; WHILELO
;
define target("aarch64.svcount") @whilelo_c8_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelo_c8_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelo pn8.b, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c8(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelo_c8_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelo_c8_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelo pn8.b, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c8(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelo_c16_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelo_c16_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelo pn8.h, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c16(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelo_c16_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelo_c16_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelo pn8.h, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c16(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelo_c32_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelo_c32_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelo pn8.s, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c32(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelo_c32_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelo_c32_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelo pn8.s, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c32(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelo_c64_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelo_c64_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelo pn8.d, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c64(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelo_c64_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelo_c64_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelo pn8.d, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c64(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
;
; WHILELS
;
define target("aarch64.svcount") @whilels_c8_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilels_c8_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilels pn8.b, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c8(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilels_c8_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilels_c8_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilels pn8.b, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c8(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilels_c16_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilels_c16_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilels pn8.h, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c16(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilels_c16_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilels_c16_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilels pn8.h, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c16(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilels_c32_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilels_c32_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilels pn8.s, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c32(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilels_c32_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilels_c32_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilels pn8.s, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c32(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilels_c64_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilels_c64_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilels pn8.d, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c64(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilels_c64_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilels_c64_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilels pn8.d, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilels.c64(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
;
; WHILELT
;
define target("aarch64.svcount") @whilelt_c8_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelt_c8_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelt pn8.b, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c8(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelt_c8_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelt_c8_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelt pn8.b, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c8(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelt_c16_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelt_c16_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelt pn8.h, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c16(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelt_c16_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelt_c16_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelt pn8.h, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c16(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelt_c32_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelt_c32_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelt pn8.s, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c32(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelt_c32_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelt_c32_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelt pn8.s, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c32(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelt_c64_vl2(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelt_c64_vl2:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelt pn8.d, x0, x1, vlx2
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c64(i64 %a, i64 %b, i32 2)
ret target("aarch64.svcount") %out
}
define target("aarch64.svcount") @whilelt_c64_vl4(i64 %a, i64 %b) nounwind {
; CHECK-LABEL: whilelt_c64_vl4:
; CHECK: // %bb.0:
; CHECK-NEXT: whilelt pn8.d, x0, x1, vlx4
; CHECK-NEXT: mov p0.b, p8.b
; CHECK-NEXT: ret
%out = call target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c64(i64 %a, i64 %b, i32 4)
ret target("aarch64.svcount") %out
}
declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c8(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c16(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c32(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilege.c64(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c8(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c16(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c32(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilegt.c64(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c8(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c16(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c32(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilehi.c64(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c8(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c16(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c32(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilehs.c64(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c8(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c16(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c32(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilele.c64(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c8(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c16(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c32(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilelo.c64(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c8(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c16(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c32(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilels.c64(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c8(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c16(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c32(i64, i64, i32)
declare target("aarch64.svcount") @llvm.aarch64.sve.whilelt.c64(i64, i64, i32)