From d95abd33ca7b9a7ee742452e87277883983f45da Mon Sep 17 00:00:00 2001
From: cmoineau <cyril.moineau@cea.fr>
Date: Wed, 26 Mar 2025 09:47:41 +0000
Subject: [PATCH] Fix clip implementation + add ReLU int8.

---
 .../aidge/backend/cpu/operator/ClipImpl_kernels.hpp   | 11 ++++++-----
 .../aidge/backend/cpu/operator/ReLUImpl_kernels.hpp   |  5 ++++-
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/include/aidge/backend/cpu/operator/ClipImpl_kernels.hpp b/include/aidge/backend/cpu/operator/ClipImpl_kernels.hpp
index 1afac469..f7a64585 100644
--- a/include/aidge/backend/cpu/operator/ClipImpl_kernels.hpp
+++ b/include/aidge/backend/cpu/operator/ClipImpl_kernels.hpp
@@ -23,13 +23,14 @@ void ClipImpl_cpu_forward_kernel(
         float max_,
         const void* input_,
         const std::size_t length,
-        void* output_) 
+        void* output_)
 {
     const I* input = static_cast<const I*>(input_);
     O* output = static_cast<O*>(output_);
-
+    I minCasted = static_cast<I>(min_);
+    I maxCasted = static_cast<I>(max_);
     for (std::size_t i = 0; i < length; ++i) {
-        output[i] = std::min(std::max(static_cast<float>(input[i]), min_), max_);
+        output[i] = std::min(std::max(input[i], minCasted), maxCasted);
     }
 }
 
@@ -38,9 +39,9 @@ void ClipImpl_cpu_backward_kernel(
         float min_,
         float max_,
         const std::size_t length,
-        const void* input_, 
+        const void* input_,
         const void* grad_output_,
-		void* grad_input_)           
+		void* grad_input_)
 {
     const I* input = static_cast<const I*>(input_);
     const GO* grad_output = static_cast<const GO*>(grad_output_);
diff --git a/include/aidge/backend/cpu/operator/ReLUImpl_kernels.hpp b/include/aidge/backend/cpu/operator/ReLUImpl_kernels.hpp
index bb5d7cc3..6b7c3c9c 100644
--- a/include/aidge/backend/cpu/operator/ReLUImpl_kernels.hpp
+++ b/include/aidge/backend/cpu/operator/ReLUImpl_kernels.hpp
@@ -60,7 +60,10 @@ REGISTRAR(ReLUImpl_cpu,
     {ProdConso::inPlaceModel, Aidge::ReLUImpl_cpu_forward_kernel<double, double>, Aidge::ReLUImpl_cpu_backward_kernel<double, double, double>});
 REGISTRAR(ReLUImpl_cpu,
     {DataType::Int32},
-    {ProdConso::inPlaceModel, Aidge::ReLUImpl_cpu_forward_kernel<int32_t, int32_t>, Aidge::ReLUImpl_cpu_backward_kernel<int32_t, int32_t, int32_t>});
+    {ProdConso::inPlaceModel, Aidge::ReLUImpl_cpu_forward_kernel<int32_t, int32_t>, nullptr});
+REGISTRAR(ReLUImpl_cpu,
+    {DataType::Int8},
+    {ProdConso::inPlaceModel, Aidge::ReLUImpl_cpu_forward_kernel<int8_t, int8_t>, nullptr});
 }  // namespace Aidge
 
 #endif /* AIDGE_CPU_OPERATOR_RELUIMPL_KERNELS_H_ */
-- 
GitLab