From 0ffc7410e5c6cada94e3876eab2a9dad0b0cc49a Mon Sep 17 00:00:00 2001
From: sumesh-s-mcw <sumesh.suresh@multicorewareinc.com>
Date: Mon, 31 Mar 2025 00:59:28 +0530
Subject: [PATCH 1/2] FEAT : Added InvertedFPClassTest in LegalizerHelper

---
 llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
index ac68eb55a6fd5..093b975fc9154 100644
--- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -13,6 +13,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/CodeGen/GlobalISel/LegalizerHelper.h"
+#include "llvm/CodeGen/CodeGenCommonISel.h"
 #include "llvm/CodeGen/GlobalISel/CallLowering.h"
 #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h"
 #include "llvm/CodeGen/GlobalISel/GISelValueTracking.h"
@@ -9100,8 +9101,12 @@ LegalizerHelper::lowerISFPCLASS(MachineInstr &MI) {
     return Legalized;
   }
 
-  // TODO: Try inverting the test with getInvertedFPClassTest like the DAG
-  // version
+  bool isInverted = false;
+  FPClassTest InvertedTest = llvm::invertFPClassTestIfSimpler(Mask, false);
+  if (InvertedTest != fcNone) {
+    Mask = InvertedTest;
+    isInverted = true;
+  }
 
   unsigned BitSize = SrcTy.getScalarSizeInBits();
   const fltSemantics &Semantics = getFltSemanticForLLT(SrcTy.getScalarType());
@@ -9252,7 +9257,9 @@ LegalizerHelper::lowerISFPCLASS(MachineInstr &MI) {
     }
     appendToRes(NormalRes);
   }
-
+  if (isInverted) {
+    Res = MIRBuilder.buildNot(DstTy, Res);
+  }
   MIRBuilder.buildCopy(DstReg, Res);
   MI.eraseFromParent();
   return Legalized;

From ba89b42b924d6c33efc0fe34abba78455ab82c18 Mon Sep 17 00:00:00 2001
From: sumesh-s-mcw <sumesh.suresh@multicorewareinc.com>
Date: Wed, 16 Apr 2025 11:32:33 +0530
Subject: [PATCH 2/2] Removed braces

---
 llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
index 093b975fc9154..3b0e7220fe635 100644
--- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -9257,9 +9257,8 @@ LegalizerHelper::lowerISFPCLASS(MachineInstr &MI) {
     }
     appendToRes(NormalRes);
   }
-  if (isInverted) {
+  if (isInverted)
     Res = MIRBuilder.buildNot(DstTy, Res);
-  }
   MIRBuilder.buildCopy(DstReg, Res);
   MI.eraseFromParent();
   return Legalized;