[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