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

Reply via email to