https://github.com/FantasqueX created https://github.com/llvm/llvm-project/pull/204974
None >From 51074ebeae611375869c1c2885c917dd13c19517 Mon Sep 17 00:00:00 2001 From: Letu Ren <[email protected]> Date: Sun, 21 Jun 2026 20:19:06 +0800 Subject: [PATCH] [CIR] Support __builtin_elementwise_ceil --- clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp | 6 ++--- .../CodeGenBuiltins/builtins-elementwise.c | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index a483eb635f0e2..cebc4cc733ece 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -537,9 +537,8 @@ static RValue tryEmitFPMathIntrinsic(CIRGenFunction &cgf, const CallExpr *e, case Builtin::BI__builtin_ceilf16: case Builtin::BI__builtin_ceill: case Builtin::BI__builtin_ceilf128: - return emitUnaryMaybeConstrainedFPBuiltin<cir::CeilOp>(cgf, *e); case Builtin::BI__builtin_elementwise_ceil: - return RValue::getIgnored(); + return emitUnaryMaybeConstrainedFPBuiltin<cir::CeilOp>(cgf, *e); case Builtin::BIcopysign: case Builtin::BIcopysignf: case Builtin::BIcopysignl: @@ -1645,6 +1644,8 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID, return emitUnaryMaybeConstrainedFPBuiltin<cir::Log10Op>(*this, *e); case Builtin::BI__builtin_elementwise_cos: return emitUnaryMaybeConstrainedFPBuiltin<cir::CosOp>(*this, *e); + case Builtin::BI__builtin_elementwise_ceil: + return emitUnaryMaybeConstrainedFPBuiltin<cir::CeilOp>(*this, *e); case Builtin::BI__builtin_elementwise_floor: return emitUnaryMaybeConstrainedFPBuiltin<cir::FloorOp>(*this, *e); case Builtin::BI__builtin_elementwise_round: @@ -1664,7 +1665,6 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID, case Builtin::BI__builtin_elementwise_fmod: return RValue::get( emitBinaryMaybeConstrainedFPBuiltin<cir::FModOp>(*this, *e)); - case Builtin::BI__builtin_elementwise_ceil: case Builtin::BI__builtin_elementwise_exp10: case Builtin::BI__builtin_elementwise_ldexp: case Builtin::BI__builtin_elementwise_pow: diff --git a/clang/test/CIR/CodeGenBuiltins/builtins-elementwise.c b/clang/test/CIR/CodeGenBuiltins/builtins-elementwise.c index c04739d737632..8d14a813d61f5 100644 --- a/clang/test/CIR/CodeGenBuiltins/builtins-elementwise.c +++ b/clang/test/CIR/CodeGenBuiltins/builtins-elementwise.c @@ -261,6 +261,28 @@ void test_builtin_elementwise_cos(float f, double d, vfloat4 vf4, vd4 = __builtin_elementwise_cos(vd4); } +void test_builtin_elementwise_ceil(float f, double d, vfloat4 vf4, + vdouble4 vd4) { + // CIR-LABEL: test_builtin_elementwise_ceil + // LLVM-LABEL: test_builtin_elementwise_ceil + + // CIR: cir.ceil %{{.*}} : !cir.float + // LLVM: call float @llvm.ceil.f32(float %{{.*}}) + f = __builtin_elementwise_ceil(f); + + // CIR: cir.ceil %{{.*}} : !cir.double + // LLVM: call double @llvm.ceil.f64(double %{{.*}}) + d = __builtin_elementwise_ceil(d); + + // CIR: cir.ceil %{{.*}} : !cir.vector<4 x !cir.float> + // LLVM: call <4 x float> @llvm.ceil.v4f32(<4 x float> %{{.*}}) + vf4 = __builtin_elementwise_ceil(vf4); + + // CIR: cir.ceil %{{.*}} : !cir.vector<4 x !cir.double> + // LLVM: call <4 x double> @llvm.ceil.v4f64(<4 x double> %{{.*}}) + vd4 = __builtin_elementwise_ceil(vd4); +} + void test_builtin_elementwise_floor(float f, double d, vfloat4 vf4, vdouble4 vd4) { // CIR-LABEL: test_builtin_elementwise_floor _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
