Skip to content

Commit cecdb74

Browse files
AmrDeveloperlanza
authored andcommitted
[CIR][CIRGen][Builtin][Neon] Lower vmaxnmvq f32 and f64 (llvm#1537)
Lower vmaxnmvq f32 and f64
1 parent 6ebb491 commit cecdb74

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
@@ -18796,12 +18796,30 @@ float64_t test_vmaxvq_f64(float64x2_t a) {
1879618796
// return vminvq_f64(a);
1879718797
// }
1879818798

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

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

0 commit comments

Comments
 (0)