[libclc] libclc: Improve minmag and maxmag (PR #186092)
Matt Arsenault via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 12 04:14:04 PDT 2026
https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/186092
Gives slightly better codegen.
>From bb733c65f323b1930a4be4a8237876dd0bfc16f9 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Thu, 12 Mar 2026 12:13:08 +0100
Subject: [PATCH] libclc: Improve minmag and maxmag
Gives slightly better codegen.
---
libclc/clc/lib/generic/math/clc_maxmag.cl | 10 ++--------
libclc/clc/lib/generic/math/clc_maxmag.inc | 11 ++++-------
libclc/clc/lib/generic/math/clc_minmag.cl | 10 ++--------
libclc/clc/lib/generic/math/clc_minmag.inc | 10 ++++------
4 files changed, 12 insertions(+), 29 deletions(-)
diff --git a/libclc/clc/lib/generic/math/clc_maxmag.cl b/libclc/clc/lib/generic/math/clc_maxmag.cl
index e34fd5613c3f2..fd457db0c5097 100644
--- a/libclc/clc/lib/generic/math/clc_maxmag.cl
+++ b/libclc/clc/lib/generic/math/clc_maxmag.cl
@@ -6,14 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include <clc/clc_convert.h>
-#include <clc/internal/clc.h>
-#include <clc/math/clc_fabs.h>
-#include <clc/math/clc_fmax.h>
-#include <clc/relational/clc_isequal.h>
-#include <clc/relational/clc_isgreater.h>
-#include <clc/relational/clc_isnan.h>
-#include <clc/relational/clc_select.h>
+#include "clc/math/clc_fabs.h"
+#include "clc/math/clc_fmax.h"
#define __CLC_BODY <clc_maxmag.inc>
#include <clc/math/gentype.inc>
diff --git a/libclc/clc/lib/generic/math/clc_maxmag.inc b/libclc/clc/lib/generic/math/clc_maxmag.inc
index 0c346eeac8ae2..f8520efbbea0f 100644
--- a/libclc/clc/lib/generic/math/clc_maxmag.inc
+++ b/libclc/clc/lib/generic/math/clc_maxmag.inc
@@ -8,11 +8,8 @@
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_maxmag(__CLC_GENTYPE x,
__CLC_GENTYPE y) {
- const __CLC_GENTYPE res = __clc_select(
- y, x,
- __CLC_CONVERT_BIT_INTN(__clc_isgreater(__clc_fabs(x), __clc_fabs(y))));
- return __clc_select(
- res, __clc_fmax(x, y),
- __CLC_CONVERT_BIT_INTN(__clc_isnan(x) || __clc_isnan(y) ||
- __clc_isequal(__clc_fabs(x), __clc_fabs(y))));
+ __CLC_GENTYPE ax = __clc_fabs(x);
+ __CLC_GENTYPE ay = __clc_fabs(y);
+ __CLC_GENTYPE ret = ax > ay ? x : __clc_fmax(x, y);
+ return ay > ax ? y : ret;
}
diff --git a/libclc/clc/lib/generic/math/clc_minmag.cl b/libclc/clc/lib/generic/math/clc_minmag.cl
index 8529beb8d83f0..b0d7a92729299 100644
--- a/libclc/clc/lib/generic/math/clc_minmag.cl
+++ b/libclc/clc/lib/generic/math/clc_minmag.cl
@@ -6,14 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include <clc/clc_convert.h>
-#include <clc/internal/clc.h>
-#include <clc/math/clc_fabs.h>
-#include <clc/math/clc_fmin.h>
-#include <clc/relational/clc_isequal.h>
-#include <clc/relational/clc_isless.h>
-#include <clc/relational/clc_isnan.h>
-#include <clc/relational/clc_select.h>
+#include "clc/math/clc_fabs.h"
+#include "clc/math/clc_fmin.h"
#define __CLC_BODY <clc_minmag.inc>
#include <clc/math/gentype.inc>
diff --git a/libclc/clc/lib/generic/math/clc_minmag.inc b/libclc/clc/lib/generic/math/clc_minmag.inc
index 2b9236fedfeb2..9419d5cdd2e51 100644
--- a/libclc/clc/lib/generic/math/clc_minmag.inc
+++ b/libclc/clc/lib/generic/math/clc_minmag.inc
@@ -8,10 +8,8 @@
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_minmag(__CLC_GENTYPE x,
__CLC_GENTYPE y) {
- const __CLC_GENTYPE res = __clc_select(
- y, x, __CLC_CONVERT_BIT_INTN(__clc_isless(__clc_fabs(x), __clc_fabs(y))));
- return __clc_select(
- res, __clc_fmin(x, y),
- __CLC_CONVERT_BIT_INTN(__clc_isnan(x) || __clc_isnan(y) ||
- __clc_isequal(__clc_fabs(x), __clc_fabs(y))));
+ __CLC_GENTYPE ax = __clc_fabs(x);
+ __CLC_GENTYPE ay = __clc_fabs(y);
+ __CLC_GENTYPE ret = ax < ay ? x : __clc_fmin(x, y);
+ return ay < ax ? y : ret;
}
More information about the cfe-commits
mailing list