diff options
Diffstat (limited to 'llvm/test/CodeGen/AArch64/sve-setcc.ll')
-rw-r--r-- | llvm/test/CodeGen/AArch64/sve-setcc.ll | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AArch64/sve-setcc.ll b/llvm/test/CodeGen/AArch64/sve-setcc.ll new file mode 100644 index 00000000000..7c44501d1d2 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/sve-setcc.ll @@ -0,0 +1,26 @@ +; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve < %s | FileCheck %s + +; Ensure we use the inverted CC result of SVE compare instructions when branching. +define void @sve_cmplt_setcc_inverted(<vscale x 8 x i16>* %out, <vscale x 8 x i16> %in, <vscale x 8 x i1> %pg) { +; CHECK-LABEL: @sve_cmplt_setcc_inverted +; CHECK: cmplt p1.h, p0/z, z0.h, #0 +; CHECK-NEXT: ptest p0, p1.b +; CHECK-NEXT: b.ne +entry: + %0 = tail call <vscale x 8 x i1> @llvm.aarch64.sve.cmplt.wide.nxv8i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %in, <vscale x 2 x i64> zeroinitializer) + %1 = tail call i1 @llvm.aarch64.sve.ptest.any.nxv8i1(<vscale x 8 x i1> %pg, <vscale x 8 x i1> %0) + br i1 %1, label %if.end, label %if.then + +if.then: + tail call void @llvm.masked.store.nxv8i16.p0nxv8i16(<vscale x 8 x i16> %in, <vscale x 8 x i16>* %out, i32 2, <vscale x 8 x i1> %pg) + br label %if.end + +if.end: + ret void +} + +declare i1 @llvm.aarch64.sve.ptest.any.nxv8i1(<vscale x 8 x i1>, <vscale x 8 x i1>) + +declare <vscale x 8 x i1> @llvm.aarch64.sve.cmplt.wide.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 2 x i64>) + +declare void @llvm.masked.store.nxv8i16.p0nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>*, i32, <vscale x 8 x i1>) |