Skip to content

Commit a8c9ca9

Browse files
AmrDeveloperlanza
authored andcommitted
[CIR][CIRGen][Builtin][Neon] Lower vminnmv_f32, vminnmvq_f64 and vminnmvq_f32 (#1546)
ower vminnmv_f32, vminnmvq_f64 and vminnmvq_f32
1 parent 0a624db commit a8c9ca9

File tree

2 files changed

+36
-15
lines changed

2 files changed

+36
-15
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2800,11 +2800,10 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
28002800
case NEON::BI__builtin_neon_vmaxvq_u32:
28012801
llvm_unreachable(" neon_vmaxvq_u32 NYI ");
28022802
case NEON::BI__builtin_neon_vminnmv_f32:
2803-
llvm_unreachable(" neon_vminnmv_f32 NYI ");
28042803
case NEON::BI__builtin_neon_vminnmvq_f32:
2805-
llvm_unreachable(" neon_vminnmvq_f32 NYI ");
28062804
case NEON::BI__builtin_neon_vminnmvq_f64:
2807-
llvm_unreachable(" neon_vminnmvq_f64 NYI ");
2805+
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.fminnmv", resultTy,
2806+
loc);
28082807
case NEON::BI__builtin_neon_vminv_f32:
28092808
llvm_unreachable(" neon_vminv_f32 NYI ");
28102809
case NEON::BI__builtin_neon_vminv_s32:

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

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18832,19 +18832,41 @@ float32_t test_vmaxnmv_f32(float32x2_t a) {
1883218832
// LLVM: ret float [[VMAXNMV_F32_I]]
1883318833
}
1883418834

18835-
// NYI-LABEL: @test_vminnmvq_f64(
18836-
// NYI: [[VMINNMVQ_F64_I:%.*]] = call double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double> %a)
18837-
// NYI: ret double [[VMINNMVQ_F64_I]]
18838-
// float64_t test_vminnmvq_f64(float64x2_t a) {
18839-
// return vminnmvq_f64(a);
18840-
// }
18835+
float64_t test_vminnmvq_f64(float64x2_t a) {
18836+
return vminnmvq_f64(a);
1884118837

18842-
// NYI-LABEL: @test_vminnmv_f32(
18843-
// NYI: [[VMINNMV_F32_I:%.*]] = call float @llvm.aarch64.neon.fminnmv.f32.v2f32(<2 x float> %a)
18844-
// NYI: ret float [[VMINNMV_F32_I]]
18845-
// float32_t test_vminnmv_f32(float32x2_t a) {
18846-
// return vminnmv_f32(a);
18847-
// }
18838+
// CIR-LABEL: vminnmvq_f64
18839+
// CIR: cir.llvm.intrinsic "aarch64.neon.fminnmv" {{%.*}} : (!cir.vector<!cir.double x 2>) -> !cir.double
18840+
18841+
// LLVM-LABEL: @test_vminnmvq_f64
18842+
// LLVM-SAME: (<2 x double> [[a:%.*]])
18843+
// LLVM: [[VMINNMVQ_F64_I:%.*]] = call double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double> [[a]])
18844+
// LLVM: ret double [[VMINNMVQ_F64_I]]
18845+
}
18846+
18847+
float32_t test_vminnmvq_f32(float32x4_t a) {
18848+
return vminnmvq_f32(a);
18849+
18850+
// CIR-LABEL: vminnmvq_f32
18851+
// CIR: cir.llvm.intrinsic "aarch64.neon.fminnmv" {{%.*}} : (!cir.vector<!cir.float x 4>) -> !cir.float
18852+
18853+
// LLVM-LABEL: @test_vminnmvq_f32
18854+
// LLVM-SAME: (<4 x float> [[a:%.*]])
18855+
// LLVM: [[VMINNMVQ_F32_I:%.*]] = call float @llvm.aarch64.neon.fminnmv.f32.v4f32(<4 x float> [[a]])
18856+
// LLVM: ret float [[VMINNMVQ_F32_I]]
18857+
}
18858+
18859+
float32_t test_vminnmv_f32(float32x2_t a) {
18860+
return vminnmv_f32(a);
18861+
18862+
// CIR-LABEL: vminnmv_f32
18863+
// CIR: cir.llvm.intrinsic "aarch64.neon.fminnmv" {{%.*}} : (!cir.vector<!cir.float x 2>) -> !cir.float
18864+
18865+
// LLVM-LABEL: @test_vminnmv_f32
18866+
// LLVM-SAME: (<2 x float> [[a:%.*]])
18867+
// LLVM: [[VMINNMV_F32_I:%.*]] = call float @llvm.aarch64.neon.fminnmv.f32.v2f32(<2 x float> [[a]])
18868+
// LLVM: ret float [[VMINNMV_F32_I]]
18869+
}
1884818870

1884918871
// NYI-LABEL: @test_vpaddq_s64(
1885018872
// NYI: [[VPADDQ_V2_I:%.*]] = call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> %a, <2 x i64> %b)

0 commit comments

Comments
 (0)