[llvm] [SDPatternMatch] Add m_FAbs matcher (PR #174975)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 8 06:20:48 PST 2026


https://github.com/RKSimon updated https://github.com/llvm/llvm-project/pull/174975

>From d9708cbf14028a9c7491c8beb52bc8d11c8cc5ee Mon Sep 17 00:00:00 2001
From: Abhiram Jampani <lcs2022059 at iiitl.ac.in>
Date: Thu, 8 Jan 2026 18:47:28 +0530
Subject: [PATCH] [SDPatternMatch] Add m_FAbs matcher

Adds a pattern matcher for floating-point absolute value (ISD::FABS), following the same pattern as m_Abs for integer absolute value.

Fixes #174751
---
 llvm/include/llvm/CodeGen/SDPatternMatch.h              | 4 ++++
 llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp | 6 ++++++
 2 files changed, 10 insertions(+)

diff --git a/llvm/include/llvm/CodeGen/SDPatternMatch.h b/llvm/include/llvm/CodeGen/SDPatternMatch.h
index e5381015f3847..5a7afcf7d54c1 100644
--- a/llvm/include/llvm/CodeGen/SDPatternMatch.h
+++ b/llvm/include/llvm/CodeGen/SDPatternMatch.h
@@ -1048,6 +1048,10 @@ template <typename Opnd> inline UnaryOpc_match<Opnd> m_Abs(const Opnd &Op) {
   return UnaryOpc_match<Opnd>(ISD::ABS, Op);
 }
 
+template <typename Opnd> inline UnaryOpc_match<Opnd> m_FAbs(const Opnd &Op) {
+  return UnaryOpc_match<Opnd>(ISD::FABS, Op);
+}
+
 /// Match a zext or identity
 /// Allows to peek through optional extensions
 template <typename Opnd> inline auto m_ZExtOrSelf(const Opnd &Op) {
diff --git a/llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp b/llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp
index c6075ea0cc8d8..8796c40254944 100644
--- a/llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp
+++ b/llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp
@@ -513,6 +513,12 @@ TEST_F(SelectionDAGPatternMatchTest, matchUnaryOp) {
   EXPECT_TRUE(sd_match(Trunc, m_Trunc(m_Specific(Op1))));
 
   EXPECT_TRUE(sd_match(Abs, m_Abs(m_Specific(Op0))));
+  EXPECT_FALSE(sd_match(Abs, m_FAbs(m_Value())));
+
+  SDValue FAbs = DAG->getNode(ISD::FABS, DL, FloatVT, Op2);
+  EXPECT_TRUE(sd_match(FAbs, m_FAbs(m_Specific(Op2))));
+  EXPECT_TRUE(sd_match(FAbs, m_FAbs(m_Value())));
+  EXPECT_FALSE(sd_match(FAbs, m_Abs(m_Value())));
 
   EXPECT_TRUE(sd_match(Neg, m_Neg(m_Value())));
   EXPECT_TRUE(sd_match(Not, m_Not(m_Value())));



More information about the llvm-commits mailing list