718 lines
26 KiB
LLVM
718 lines
26 KiB
LLVM
|
; 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 < %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)
|