From 87333671ad9be37c809d58506ab1cfbbc78cee05 Mon Sep 17 00:00:00 2001 From: AmrDeveloper Date: Sun, 23 Mar 2025 22:17:53 +0100 Subject: [PATCH] [CIR][CIRGen][Builtin][Neon] Lower vcalts_f32 --- clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp | 3 +-- clang/test/CIR/CodeGen/AArch64/neon.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp index a3d2bed57fa4..0cec6b7614d8 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp @@ -2712,11 +2712,10 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr( case NEON::BI__builtin_neon_vcaled_f64: return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.facge", resultTy, loc); + case NEON::BI__builtin_neon_vcalts_f32: case NEON::BI__builtin_neon_vcaltd_f64: return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.facgt", resultTy, loc); - case NEON::BI__builtin_neon_vcalts_f32: - llvm_unreachable(" neon_vcalts_f32 NYI "); case NEON::BI__builtin_neon_vcvtad_s64_f64: llvm_unreachable(" neon_vcvtad_s64_f64 NYI "); case NEON::BI__builtin_neon_vcvtad_u64_f64: diff --git a/clang/test/CIR/CodeGen/AArch64/neon.c b/clang/test/CIR/CodeGen/AArch64/neon.c index a634af0f1f4e..984a007dda08 100644 --- a/clang/test/CIR/CodeGen/AArch64/neon.c +++ b/clang/test/CIR/CodeGen/AArch64/neon.c @@ -15181,9 +15181,16 @@ uint64_t test_vcaled_f64(float64_t a, float64_t b) { // NYI-LABEL: @test_vcalts_f32( // NYI: [[VCALTS_F32_I:%.*]] = call i32 @llvm.aarch64.neon.facgt.i32.f32(float %b, float %a) // NYI: ret i32 [[VCALTS_F32_I]] -// uint32_t test_vcalts_f32(float32_t a, float32_t b) { -// return (uint32_t)vcalts_f32(a, b); -// } +uint32_t test_vcalts_f32(float32_t a, float32_t b) { + return (uint32_t)vcalts_f32(a, b); + + // CIR-LABEL: vcalts_f32 + // CIR: [[TMP0:%.*]] = cir.llvm.intrinsic "aarch64.neon.facgt" {{.*}}, {{.*}} : (!cir.float, !cir.float) -> !u32i + + // LLVM-LABEL: @test_vcalts_f32( + // LLVM: [[VCALTS_F32_I:%.*]] = call i32 @llvm.aarch64.neon.facgt.i32.f32(float %0, float %1) + // LLVM: ret i32 [[VCALTS_F32_I]] +} uint64_t test_vcaltd_f64(float64_t a, float64_t b) { return (uint64_t)vcaltd_f64(a, b);