Skip to content

Commit ccb6039

Browse files
authored
[CIR][CIRGen][Builtin][Neon] Lower vmaxnmvq f32 and f64 (#1537)
Lower vmaxnmvq f32 and f64
1 parent c57b86b commit ccb6039

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2779,9 +2779,9 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
27792779
case NEON::BI__builtin_neon_vmaxnmv_f32:
27802780
llvm_unreachable(" neon_vmaxnmv_f32 NYI ");
27812781
case NEON::BI__builtin_neon_vmaxnmvq_f32:
2782-
llvm_unreachable(" neon_vmaxnmvq_f32 NYI ");
27832782
case NEON::BI__builtin_neon_vmaxnmvq_f64:
2784-
llvm_unreachable(" neon_vmaxnmvq_f64 NYI ");
2783+
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.fmaxnmv", resultTy,
2784+
loc);
27852785
case NEON::BI__builtin_neon_vmaxv_f32:
27862786
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.fmaxv", resultTy,
27872787
loc);

clang/test/CIR/CodeGen/AArch64/neon.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18795,12 +18795,30 @@ float64_t test_vmaxvq_f64(float64x2_t a) {
1879518795
// return vminvq_f64(a);
1879618796
// }
1879718797

18798-
// NYI-LABEL: @test_vmaxnmvq_f64(
18799-
// NYI: [[VMAXNMVQ_F64_I:%.*]] = call double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double> %a)
18800-
// NYI: ret double [[VMAXNMVQ_F64_I]]
18801-
// float64_t test_vmaxnmvq_f64(float64x2_t a) {
18802-
// return vmaxnmvq_f64(a);
18803-
// }
18798+
18799+
float32_t test_vmaxnmvq_f32(float32x4_t a) {
18800+
return vmaxnmvq_f32(a);
18801+
18802+
// CIR-LABEL: vmaxnmvq_f32
18803+
// CIR: cir.llvm.intrinsic "aarch64.neon.fmaxnmv" {{%.*}} : (!cir.vector<!cir.float x 4>) -> !cir.float
18804+
18805+
// LLVM-LABEL: @test_vmaxnmvq_f32
18806+
// LLVM-SAME: (<4 x float> [[a:%.*]])
18807+
// LLVM: [[VMAXNMVQ_F32_I:%.*]] = call float @llvm.aarch64.neon.fmaxnmv.f32.v4f32(<4 x float> [[a]])
18808+
// LLVM: ret float [[VMAXNMVQ_F32_I]]
18809+
}
18810+
18811+
float64_t test_vmaxnmvq_f64(float64x2_t a) {
18812+
return vmaxnmvq_f64(a);
18813+
18814+
// CIR-LABEL: vmaxnmvq_f64
18815+
// CIR: cir.llvm.intrinsic "aarch64.neon.fmaxnmv" {{%.*}} : (!cir.vector<!cir.double x 2>) -> !cir.double
18816+
18817+
// LLVM-LABEL: @test_vmaxnmvq_f64
18818+
// LLVM-SAME: (<2 x double> [[a:%.*]])
18819+
// LLVM: [[VMAXNMVQ_F64_I:%.*]] = call double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double> [[a]])
18820+
// LLVM: ret double [[VMAXNMVQ_F64_I]]
18821+
}
1880418822

1880518823
// NYI-LABEL: @test_vmaxnmv_f32(
1880618824
// NYI: [[VMAXNMV_F32_I:%.*]] = call float @llvm.aarch64.neon.fmaxnmv.f32.v2f32(<2 x float> %a)

0 commit comments

Comments
 (0)