Skip to content

Commit ea87e00

Browse files
AmrDeveloperlanza
authored andcommitted
[CIR][CIRGen][Builtin][Neon] Lower vcagtd_f64 (llvm#1448)
Lower vcagtd_f64
1 parent e031cd2 commit ea87e00

File tree

2 files changed

+24
-15
lines changed

2 files changed

+24
-15
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2702,10 +2702,11 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
27022702
}
27032703
case NEON::BI__builtin_neon_vcages_f32:
27042704
llvm_unreachable(" neon_vcages_f32 NYI ");
2705-
case NEON::BI__builtin_neon_vcagtd_f64:
2706-
llvm_unreachable(" neon_vcagtd_f64 NYI ");
27072705
case NEON::BI__builtin_neon_vcagts_f32:
2708-
llvm_unreachable(" neon_vcagts_f32 NYI ");
2706+
case NEON::BI__builtin_neon_vcagtd_f64: {
2707+
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.facgt", resultTy,
2708+
loc);
2709+
}
27092710
case NEON::BI__builtin_neon_vcaled_f64:
27102711
llvm_unreachable(" neon_vcaled_f64 NYI ");
27112712
case NEON::BI__builtin_neon_vcales_f32:

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

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15126,19 +15126,27 @@ uint64_t test_vcaged_f64(float64_t a, float64_t b) {
1512615126
// LLVM: ret i64 [[VCAGED_F64_I]]
1512715127
}
1512815128

15129-
// NYI-LABEL: @test_vcagts_f32(
15130-
// NYI: [[VCAGTS_F32_I:%.*]] = call i32 @llvm.aarch64.neon.facgt.i32.f32(float %a, float %b)
15131-
// NYI: ret i32 [[VCAGTS_F32_I]]
15132-
// uint32_t test_vcagts_f32(float32_t a, float32_t b) {
15133-
// return (uint32_t)vcagts_f32(a, b);
15134-
// }
15129+
uint32_t test_vcagts_f32(float32_t a, float32_t b) {
15130+
return (uint32_t)vcagts_f32(a, b);
1513515131

15136-
// NYI-LABEL: @test_vcagtd_f64(
15137-
// NYI: [[VCAGTD_F64_I:%.*]] = call i64 @llvm.aarch64.neon.facgt.i64.f64(double %a, double %b)
15138-
// NYI: ret i64 [[VCAGTD_F64_I]]
15139-
// uint64_t test_vcagtd_f64(float64_t a, float64_t b) {
15140-
// return (uint64_t)vcagtd_f64(a, b);
15141-
// }
15132+
// CIR-LABEL: vcagts_f32
15133+
// CIR: [[TMP0:%.*]] = cir.llvm.intrinsic "aarch64.neon.facgt" {{.*}}, {{.*}} : (!cir.float, !cir.float) -> !u32i
15134+
15135+
// LLVM-LABEL: @test_vcagts_f32(
15136+
// LLVM: [[VCAGED_F32_I:%.*]] = call i32 @llvm.aarch64.neon.facgt.i32.f32(float %0, float %1)
15137+
// LLVM: ret i32 [[VCAGED_F32_I]]
15138+
}
15139+
15140+
uint64_t test_vcagtd_f64(float64_t a, float64_t b) {
15141+
return (uint64_t)vcagtd_f64(a, b);
15142+
15143+
// CIR-LABEL: vcagtd_f64
15144+
// CIR: [[TMP0:%.*]] = cir.llvm.intrinsic "aarch64.neon.facgt" {{.*}}, {{.*}} : (!cir.double, !cir.double) -> !u64i
15145+
15146+
// LLVM-LABEL: @test_vcagtd_f64(
15147+
// LLVM: [[VCAGED_F64_I:%.*]] = call i64 @llvm.aarch64.neon.facgt.i64.f64(double %0, double %1)
15148+
// LLVM: ret i64 [[VCAGED_F64_I]]
15149+
}
1514215150

1514315151
// NYI-LABEL: @test_vcales_f32(
1514415152
// NYI: [[VCALES_F32_I:%.*]] = call i32 @llvm.aarch64.neon.facge.i32.f32(float %b, float %a)

0 commit comments

Comments
 (0)