diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp index 96610d2df193..237a91254fe7 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp @@ -2686,10 +2686,11 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr( } case NEON::BI__builtin_neon_vcages_f32: llvm_unreachable(" neon_vcages_f32 NYI "); - case NEON::BI__builtin_neon_vcagtd_f64: - llvm_unreachable(" neon_vcagtd_f64 NYI "); case NEON::BI__builtin_neon_vcagts_f32: - llvm_unreachable(" neon_vcagts_f32 NYI "); + case NEON::BI__builtin_neon_vcagtd_f64: { + return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.facgt", resultTy, + loc); + } case NEON::BI__builtin_neon_vcaled_f64: llvm_unreachable(" neon_vcaled_f64 NYI "); case NEON::BI__builtin_neon_vcales_f32: diff --git a/clang/test/CIR/CodeGen/AArch64/neon.c b/clang/test/CIR/CodeGen/AArch64/neon.c index 1d31dc7ab5b4..042460f4f07f 100644 --- a/clang/test/CIR/CodeGen/AArch64/neon.c +++ b/clang/test/CIR/CodeGen/AArch64/neon.c @@ -15125,19 +15125,27 @@ uint64_t test_vcaged_f64(float64_t a, float64_t b) { // LLVM: ret i64 [[VCAGED_F64_I]] } -// NYI-LABEL: @test_vcagts_f32( -// NYI: [[VCAGTS_F32_I:%.*]] = call i32 @llvm.aarch64.neon.facgt.i32.f32(float %a, float %b) -// NYI: ret i32 [[VCAGTS_F32_I]] -// uint32_t test_vcagts_f32(float32_t a, float32_t b) { -// return (uint32_t)vcagts_f32(a, b); -// } +uint32_t test_vcagts_f32(float32_t a, float32_t b) { + return (uint32_t)vcagts_f32(a, b); -// NYI-LABEL: @test_vcagtd_f64( -// NYI: [[VCAGTD_F64_I:%.*]] = call i64 @llvm.aarch64.neon.facgt.i64.f64(double %a, double %b) -// NYI: ret i64 [[VCAGTD_F64_I]] -// uint64_t test_vcagtd_f64(float64_t a, float64_t b) { -// return (uint64_t)vcagtd_f64(a, b); -// } + // CIR-LABEL: vcagts_f32 + // CIR: [[TMP0:%.*]] = cir.llvm.intrinsic "aarch64.neon.facgt" {{.*}}, {{.*}} : (!cir.float, !cir.float) -> !u32i + + // LLVM-LABEL: @test_vcagts_f32( + // LLVM: [[VCAGED_F32_I:%.*]] = call i32 @llvm.aarch64.neon.facgt.i32.f32(float %0, float %1) + // LLVM: ret i32 [[VCAGED_F32_I]] +} + +uint64_t test_vcagtd_f64(float64_t a, float64_t b) { + return (uint64_t)vcagtd_f64(a, b); + + // CIR-LABEL: vcagtd_f64 + // CIR: [[TMP0:%.*]] = cir.llvm.intrinsic "aarch64.neon.facgt" {{.*}}, {{.*}} : (!cir.double, !cir.double) -> !u64i + + // LLVM-LABEL: @test_vcagtd_f64( + // LLVM: [[VCAGED_F64_I:%.*]] = call i64 @llvm.aarch64.neon.facgt.i64.f64(double %0, double %1) + // LLVM: ret i64 [[VCAGED_F64_I]] +} // NYI-LABEL: @test_vcales_f32( // NYI: [[VCALES_F32_I:%.*]] = call i32 @llvm.aarch64.neon.facge.i32.f32(float %b, float %a)