//===- MachineFloatingPointPredicateUtils.cpp -----------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/CodeGen/GlobalISel/MachineFloatingPointPredicateUtils.h" #include "llvm/CodeGen/GlobalISel/MIPatternMatch.h" #include "llvm/CodeGen/LowLevelTypeUtils.h" #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/CodeGen/MachineSSAContext.h" #include "llvm/IR/Constants.h" #include namespace llvm { using namespace MIPatternMatch; template <> DenormalMode MachineFloatingPointPredicateUtils::queryDenormalMode(const MachineFunction &MF, Register Val) { const MachineRegisterInfo &MRI = MF.getRegInfo(); LLT Ty = MRI.getType(Val).getScalarType(); return MF.getDenormalMode(getFltSemanticForLLT(Ty)); } template <> bool MachineFloatingPointPredicateUtils::lookThroughFAbs( const MachineFunction &MF, Register LHS, Register &Src) { const MachineRegisterInfo &MRI = MF.getRegInfo(); return mi_match(LHS, MRI, m_GFabs(m_Reg(Src))); } template <> std::optional MachineFloatingPointPredicateUtils::matchConstantFloat( const MachineFunction &MF, Register Val) { const MachineRegisterInfo &MRI = MF.getRegInfo(); const ConstantFP *ConstVal; if (mi_match(Val, MRI, m_GFCst(ConstVal))) return ConstVal->getValueAPF(); return std::nullopt; } } // namespace llvm