Skip to content

Commit 05dfac2

Browse files
authored
[DAG] Adding m_FPToUI and m_FPToSI to SDPatternMatch.h (#104044)
Adds m_FPToUI/m_FPToSI matchers for ISD::FP_TO_UINT/ISD::FP_TO_SINT in SDPatternMatch.h with suitable test coverage. Fixes #103872
1 parent 5f15c17 commit 05dfac2

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

llvm/include/llvm/CodeGen/SDPatternMatch.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,14 @@ template <typename Opnd> inline UnaryOpc_match<Opnd> m_VScale(const Opnd &Op) {
737737
return UnaryOpc_match<Opnd>(ISD::VSCALE, Op);
738738
}
739739

740+
template <typename Opnd> inline UnaryOpc_match<Opnd> m_FPToUI(const Opnd &Op) {
741+
return UnaryOpc_match<Opnd>(ISD::FP_TO_UINT, Op);
742+
}
743+
744+
template <typename Opnd> inline UnaryOpc_match<Opnd> m_FPToSI(const Opnd &Op) {
745+
return UnaryOpc_match<Opnd>(ISD::FP_TO_SINT, Op);
746+
}
747+
740748
// === Constants ===
741749
struct ConstantInt_match {
742750
APInt *BindVal;

llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,11 @@ TEST_F(SelectionDAGPatternMatchTest, matchUnaryOp) {
238238
SDLoc DL;
239239
auto Int32VT = EVT::getIntegerVT(Context, 32);
240240
auto Int64VT = EVT::getIntegerVT(Context, 64);
241+
auto FloatVT = EVT::getFloatingPointVT(32);
241242

242243
SDValue Op0 = DAG->getCopyFromReg(DAG->getEntryNode(), DL, 1, Int32VT);
243244
SDValue Op1 = DAG->getCopyFromReg(DAG->getEntryNode(), DL, 1, Int64VT);
245+
SDValue Op2 = DAG->getCopyFromReg(DAG->getEntryNode(), DL, 1, FloatVT);
244246

245247
SDValue ZExt = DAG->getNode(ISD::ZERO_EXTEND, DL, Int64VT, Op0);
246248
SDValue SExt = DAG->getNode(ISD::SIGN_EXTEND, DL, Int64VT, Op0);
@@ -252,6 +254,9 @@ TEST_F(SelectionDAGPatternMatchTest, matchUnaryOp) {
252254

253255
SDValue VScale = DAG->getVScale(DL, Int32VT, APInt::getMaxValue(32));
254256

257+
SDValue FPToSI = DAG->getNode(ISD::FP_TO_SINT, DL, FloatVT, Op2);
258+
SDValue FPToUI = DAG->getNode(ISD::FP_TO_UINT, DL, FloatVT, Op2);
259+
255260
using namespace SDPatternMatch;
256261
EXPECT_TRUE(sd_match(ZExt, m_UnaryOp(ISD::ZERO_EXTEND, m_Value())));
257262
EXPECT_TRUE(sd_match(SExt, m_SExt(m_Value())));
@@ -263,6 +268,11 @@ TEST_F(SelectionDAGPatternMatchTest, matchUnaryOp) {
263268
EXPECT_FALSE(sd_match(Sub, m_Neg(m_Value())));
264269
EXPECT_FALSE(sd_match(Neg, m_Not(m_Value())));
265270
EXPECT_TRUE(sd_match(VScale, m_VScale(m_Value())));
271+
272+
EXPECT_TRUE(sd_match(FPToUI, m_FPToUI(m_Value())));
273+
EXPECT_TRUE(sd_match(FPToSI, m_FPToSI(m_Value())));
274+
EXPECT_FALSE(sd_match(FPToUI, m_FPToSI(m_Value())));
275+
EXPECT_FALSE(sd_match(FPToSI, m_FPToUI(m_Value())));
266276
}
267277

268278
TEST_F(SelectionDAGPatternMatchTest, matchConstants) {

0 commit comments

Comments
 (0)