[llvm] [GlobalIsel] Canonicalize G_FCMP (PR #108891)
Thorsten Schütt via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 16 14:53:59 PDT 2024
================
@@ -84,3 +115,31 @@ bool CombinerHelper::matchCanonicalizeICmp(const MachineInstr &MI,
return false;
}
+
+bool CombinerHelper::matchCanonicalizeFCmp(const MachineInstr &MI,
+ BuildFnTy &MatchInfo) {
+ const GFCmp *Cmp = cast<GFCmp>(&MI);
+
+ Register Dst = Cmp->getReg(0);
+ Register LHS = Cmp->getLHSReg();
+ Register RHS = Cmp->getRHSReg();
+
+ CmpInst::Predicate Pred = Cmp->getCond();
+ assert(CmpInst::isFPPredicate(Pred) && "Not an FP compare!");
+
+ if (auto CLHS = GFConstant::getConstant(LHS, MRI)) {
+ if (auto CRHS = GFConstant::getConstant(RHS, MRI))
+ return constantFoldFCmp(*Cmp, *CLHS, *CRHS, MatchInfo);
+
+ // If we have a constant, make sure it is on the RHS.
+ std::swap(LHS, RHS);
+ Pred = CmpInst::getSwappedPredicate(Pred);
+
+ MatchInfo = [=](MachineIRBuilder &B) {
+ B.buildFCmp(Pred, Dst, LHS, RHS, Cmp->getFlags());
----------------
tschuett wrote:
confidential
https://github.com/llvm/llvm-project/pull/108891
More information about the llvm-commits
mailing list