86 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve %s -o - | FileCheck %s3 4 5; Ensure that the inactive lanes of p1 aren't zeroed, since the FP compare should do that for free.6 7define i32 @fcmpeq_nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {8; CHECK-LABEL: fcmpeq_nxv4f32:9; CHECK: // %bb.0:10; CHECK-NEXT: fcmeq p1.s, p0/z, z0.s, z1.s11; CHECK-NEXT: ptest p0, p1.b12; CHECK-NEXT: cset w0, ne13; CHECK-NEXT: ret14 %1 = tail call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpeq.nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b)15 %2 = tail call i1 @llvm.aarch64.sve.ptest.any.nxv4i1(<vscale x 4 x i1> %pg, <vscale x 4 x i1> %1)16 %conv = zext i1 %2 to i3217 ret i32 %conv18}19 20define i32 @fcmpne_nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {21; CHECK-LABEL: fcmpne_nxv4f32:22; CHECK: // %bb.0:23; CHECK-NEXT: fcmne p1.s, p0/z, z0.s, z1.s24; CHECK-NEXT: ptest p0, p1.b25; CHECK-NEXT: cset w0, ne26; CHECK-NEXT: ret27 %1 = tail call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpne.nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b)28 %2 = tail call i1 @llvm.aarch64.sve.ptest.any.nxv4i1(<vscale x 4 x i1> %pg, <vscale x 4 x i1> %1)29 %conv = zext i1 %2 to i3230 ret i32 %conv31}32 33define i32 @fcmpge_nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {34; CHECK-LABEL: fcmpge_nxv4f32:35; CHECK: // %bb.0:36; CHECK-NEXT: fcmge p1.s, p0/z, z0.s, z1.s37; CHECK-NEXT: ptest p0, p1.b38; CHECK-NEXT: cset w0, ne39; CHECK-NEXT: ret40 %1 = tail call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpge.nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b)41 %2 = tail call i1 @llvm.aarch64.sve.ptest.any.nxv4i1(<vscale x 4 x i1> %pg, <vscale x 4 x i1> %1)42 %conv = zext i1 %2 to i3243 ret i32 %conv44}45 46define i32 @fcmpgt_nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {47; CHECK-LABEL: fcmpgt_nxv4f32:48; CHECK: // %bb.0:49; CHECK-NEXT: fcmgt p1.s, p0/z, z0.s, z1.s50; CHECK-NEXT: ptest p0, p1.b51; CHECK-NEXT: cset w0, ne52; CHECK-NEXT: ret53 %1 = tail call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpgt.nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b)54 %2 = tail call i1 @llvm.aarch64.sve.ptest.any.nxv4i1(<vscale x 4 x i1> %pg, <vscale x 4 x i1> %1)55 %conv = zext i1 %2 to i3256 ret i32 %conv57}58 59define i32 @fcmpuo_nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {60; CHECK-LABEL: fcmpuo_nxv4f32:61; CHECK: // %bb.0:62; CHECK-NEXT: fcmuo p1.s, p0/z, z0.s, z1.s63; CHECK-NEXT: ptest p0, p1.b64; CHECK-NEXT: cset w0, ne65; CHECK-NEXT: ret66 %1 = tail call <vscale x 4 x i1> @llvm.aarch64.sve.fcmpuo.nxv4f32(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b)67 %2 = tail call i1 @llvm.aarch64.sve.ptest.any.nxv4i1(<vscale x 4 x i1> %pg, <vscale x 4 x i1> %1)68 %conv = zext i1 %2 to i3269 ret i32 %conv70}71 72declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpeq.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)73declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpne.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)74declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpge.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)75declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpgt.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)76declare <vscale x 4 x i1> @llvm.aarch64.sve.fcmpuo.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)77 78declare <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32)79 80declare i1 @llvm.aarch64.sve.ptest.any.nxv4i1(<vscale x 4 x i1>, <vscale x 4 x i1>)81 82declare <vscale x 4 x i1> @llvm.aarch64.sve.convert.to.svbool.nxv8i1(<vscale x 8 x i1>)83declare <vscale x 4 x i1> @llvm.aarch64.sve.convert.to.svbool.nxv4i1(<vscale x 4 x i1>)84declare <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 4 x i1>)85declare <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 4 x i1>)86