[clang] [CIR] Implement elementwise min/max/minimum/maximum/minnum/maxnum/etc (PR #222481)

Chibuoyim Ogbonna via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 11 07:26:31 PDT 2026


================
@@ -2097,7 +2097,46 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID,
   case Builtin::BI__builtin_elementwise_maximum:
   case Builtin::BI__builtin_elementwise_minimum:
   case Builtin::BI__builtin_elementwise_maximumnum:
-  case Builtin::BI__builtin_elementwise_minimumnum:
+  case Builtin::BI__builtin_elementwise_minimumnum: {
+    mlir::Location loc = getLoc(e->getExprLoc());
+    mlir::Value op0 = emitScalarExpr(e->getArg(0));
+    mlir::Value op1 = emitScalarExpr(e->getArg(1));
+
+    auto getIntrinName = [&](unsigned builtinID) {
+      switch (builtinID) {
+      case Builtin::BI__builtin_elementwise_min:
+        if (cir::isIntOrVectorOfIntType(op0.getType())) {
+          QualType ty = e->getArg(0)->getType();
+          return ty->hasSignedIntegerRepresentation() ? "smin" : "umin";
+        }
+        return "minnum";
+      case Builtin::BI__builtin_elementwise_max:
+        if (cir::isIntOrVectorOfIntType(op0.getType())) {
+          QualType ty = e->getArg(0)->getType();
+          return ty->hasSignedIntegerRepresentation() ? "smax" : "umax";
+        }
+        return "maxnum";
+      case Builtin::BI__builtin_elementwise_minnum:
+        return "minnum";
+      case Builtin::BI__builtin_elementwise_maxnum:
----------------
bruteforceboy wrote:

makes sense

https://github.com/llvm/llvm-project/pull/222481


More information about the cfe-commits mailing list