LLVM 22.0.0git
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
llvm::GISelValueTracking Class Reference

#include "llvm/CodeGen/GlobalISel/GISelValueTracking.h"

Inheritance diagram for llvm::GISelValueTracking:
[legend]

Public Member Functions

 GISelValueTracking (MachineFunction &MF, unsigned MaxDepth=6)
 
virtual ~GISelValueTracking ()=default
 
const MachineFunctiongetMachineFunction () const
 
const DataLayoutgetDataLayout () const
 
virtual void computeKnownBitsImpl (Register R, KnownBits &Known, const APInt &DemandedElts, unsigned Depth=0)
 
unsigned computeNumSignBits (Register R, const APInt &DemandedElts, unsigned Depth=0)
 
unsigned computeNumSignBits (Register R, unsigned Depth=0)
 
KnownBits getKnownBits (Register R)
 
KnownBits getKnownBits (Register R, const APInt &DemandedElts, unsigned Depth=0)
 
KnownBits getKnownBits (MachineInstr &MI)
 
APInt getKnownZeroes (Register R)
 
APInt getKnownOnes (Register R)
 
bool maskedValueIsZero (Register Val, const APInt &Mask)
 
bool signBitIsZero (Register Op)
 
Align computeKnownAlignment (Register R, unsigned Depth=0)
 
std::optional< ConstantRangegetValidShiftAmountRange (Register R, const APInt &DemandedElts, unsigned Depth)
 If a G_SHL/G_ASHR/G_LSHR node with shift operand R has shift amounts that are all less than the element bit-width of the shift node, return the valid constant range.
 
std::optional< uint64_tgetValidMinimumShiftAmount (Register R, const APInt &DemandedElts, unsigned Depth=0)
 If a G_SHL/G_ASHR/G_LSHR node with shift operand R has shift amounts that are all less than the element bit-width of the shift node, return the minimum possible value.
 
KnownFPClass computeKnownFPClass (Register R, const APInt &DemandedElts, FPClassTest InterestedClasses, unsigned Depth)
 Determine which floating-point classes are valid for V, and return them in KnownFPClass bit sets.
 
KnownFPClass computeKnownFPClass (Register R, FPClassTest InterestedClasses=fcAllFlags, unsigned Depth=0)
 
KnownFPClass computeKnownFPClass (Register R, const APInt &DemandedElts, uint32_t Flags, FPClassTest InterestedClasses, unsigned Depth)
 Wrapper to account for known fast math flags at the use instruction.
 
KnownFPClass computeKnownFPClass (Register R, uint32_t Flags, FPClassTest InterestedClasses, unsigned Depth)
 
void erasingInstr (MachineInstr &MI) override
 An instruction is about to be erased.
 
void createdInstr (MachineInstr &MI) override
 An instruction has been created and inserted into the function.
 
void changingInstr (MachineInstr &MI) override
 This instruction is about to be mutated in some way.
 
void changedInstr (MachineInstr &MI) override
 This instruction was mutated in some way.
 
- Public Member Functions inherited from llvm::GISelChangeObserver
virtual ~GISelChangeObserver ()=default
 
virtual void erasingInstr (MachineInstr &MI)=0
 An instruction is about to be erased.
 
virtual void createdInstr (MachineInstr &MI)=0
 An instruction has been created and inserted into the function.
 
virtual void changingInstr (MachineInstr &MI)=0
 This instruction is about to be mutated in some way.
 
virtual void changedInstr (MachineInstr &MI)=0
 This instruction was mutated in some way.
 
LLVM_ABI void changingAllUsesOfReg (const MachineRegisterInfo &MRI, Register Reg)
 All the instructions using the given register are being changed.
 
LLVM_ABI void finishedChangingAllUsesOfReg ()
 All instructions reported as changing by changingAllUsesOfReg() have finished being changed.
 

Static Public Member Functions

static void computeKnownBitsForAlignment (KnownBits &Known, Align Alignment)
 

Protected Member Functions

unsigned getMaxDepth () const
 

Detailed Description

Definition at line 34 of file GISelValueTracking.h.

Constructor & Destructor Documentation

◆ GISelValueTracking()

llvm::GISelValueTracking::GISelValueTracking ( MachineFunction MF,
unsigned  MaxDepth = 6 
)

◆ ~GISelValueTracking()

virtual llvm::GISelValueTracking::~GISelValueTracking ( )
virtualdefault

Member Function Documentation

◆ changedInstr()

void llvm::GISelValueTracking::changedInstr ( MachineInstr MI)
inlineoverridevirtual

This instruction was mutated in some way.

Implements llvm::GISelChangeObserver.

Definition at line 152 of file GISelValueTracking.h.

◆ changingInstr()

void llvm::GISelValueTracking::changingInstr ( MachineInstr MI)
inlineoverridevirtual

This instruction is about to be mutated in some way.

Implements llvm::GISelChangeObserver.

Definition at line 151 of file GISelValueTracking.h.

◆ computeKnownAlignment()

Align GISelValueTracking::computeKnownAlignment ( Register  R,
unsigned  Depth = 0 
)

◆ computeKnownBitsForAlignment()

static void llvm::GISelValueTracking::computeKnownBitsForAlignment ( KnownBits Known,
Align  Alignment 
)
inlinestatic

◆ computeKnownBitsImpl()

void GISelValueTracking::computeKnownBitsImpl ( Register  R,
KnownBits Known,
const APInt DemandedElts,
unsigned  Depth = 0 
)
virtual

Definition at line 163 of file GISelValueTracking.cpp.

References llvm::KnownBits::add(), llvm::KnownBits::anyext(), llvm::KnownBits::anyextOrTrunc(), llvm::KnownBits::ashr(), assert(), llvm::bit_width(), llvm::BitWidth, llvm::KnownBits::byteSwap(), llvm::APInt::clearLowBits(), llvm::TargetLowering::computeKnownBitsForFrameIndex(), llvm::TargetLowering::computeKnownBitsForTargetInstr(), llvm::computeKnownBitsFromRangeMetadata(), computeKnownBitsImpl(), llvm::KnownBits::countMaxLeadingZeros(), llvm::KnownBits::countMaxPopulation(), llvm::dbgs(), llvm::Depth, llvm::drop_begin(), dumpResult(), llvm::enumerate(), llvm::extractBits(), llvm::APInt::extractBits(), llvm::KnownBits::extractBits(), llvm::LLT::getAddressSpace(), llvm::APInt::getAllOnes(), llvm::APInt::getBitWidth(), llvm::KnownBits::getBitWidth(), llvm::TargetLoweringBase::getBooleanContents(), llvm::APInt::getLowBitsSet(), getMaxDepth(), llvm::MachineMemOperand::getMemoryType(), llvm::LLT::getNumElements(), llvm::MachineMemOperand::getRanges(), getReg(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::getShuffleDemandedElts(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), I, Idx, llvm::KnownBits::insertBits(), llvm::KnownBits::intersectWith(), llvm::LLT::isFixedVector(), llvm::DataLayout::isNonIntegralAddressSpace(), llvm::LLT::isScalableVector(), llvm::KnownBits::isUnknown(), llvm::LLT::isValid(), llvm::LLT::isVector(), llvm::Register::isVirtual(), LLVM_DEBUG, llvm::Log2_64(), llvm::KnownBits::lshr(), llvm::KnownBits::makeConstant(), MI, llvm::KnownBits::mul(), llvm::KnownBits::One, llvm::KnownBits::reverseBits(), llvm::APInt::setAllBits(), llvm::APInt::setBitsFrom(), llvm::APInt::setLowBits(), llvm::KnownBits::sext(), llvm::KnownBits::sextInReg(), llvm::KnownBits::shl(), llvm::APInt::shl(), llvm::KnownBits::smax(), llvm::KnownBits::smin(), llvm::KnownBits::sub(), llvm::KnownBits::trunc(), llvm::KnownBits::umax(), llvm::KnownBits::umin(), llvm::KnownBits::Zero, llvm::TargetLoweringBase::ZeroOrOneBooleanContent, llvm::KnownBits::zext(), llvm::APInt::zext(), and llvm::KnownBits::zextOrTrunc().

Referenced by llvm::SITargetLowering::computeKnownBitsForTargetInstr(), computeKnownBitsImpl(), getKnownBits(), and knownBitsForSBFE().

◆ computeKnownFPClass() [1/4]

KnownFPClass GISelValueTracking::computeKnownFPClass ( Register  R,
const APInt DemandedElts,
FPClassTest  InterestedClasses,
unsigned  Depth 
)

Determine which floating-point classes are valid for V, and return them in KnownFPClass bit sets.

This function is defined on values with floating-point type, values vectors of floating-point type, and arrays of floating-point type. InterestedClasses is a compile time optimization hint for which floating point classes should be queried. Queries not specified in InterestedClasses should be reliable if they are determined during the query.

Definition at line 1705 of file GISelValueTracking.cpp.

References llvm::Depth.

◆ computeKnownFPClass() [2/4]

KnownFPClass GISelValueTracking::computeKnownFPClass ( Register  R,
const APInt DemandedElts,
uint32_t  Flags,
FPClassTest  InterestedClasses,
unsigned  Depth 
)

Wrapper to account for known fast math flags at the use instruction.

Definition at line 1720 of file GISelValueTracking.cpp.

References llvm::Depth, llvm::MachineInstr::FmNoInfs, and llvm::MachineInstr::FmNoNans.

◆ computeKnownFPClass() [3/4]

KnownFPClass GISelValueTracking::computeKnownFPClass ( Register  R,
FPClassTest  InterestedClasses = fcAllFlags,
unsigned  Depth = 0 
)

Definition at line 1713 of file GISelValueTracking.cpp.

References llvm::Depth.

◆ computeKnownFPClass() [4/4]

KnownFPClass GISelValueTracking::computeKnownFPClass ( Register  R,
uint32_t  Flags,
FPClassTest  InterestedClasses,
unsigned  Depth 
)

◆ computeNumSignBits() [1/2]

unsigned GISelValueTracking::computeNumSignBits ( Register  R,
const APInt DemandedElts,
unsigned  Depth = 0 
)

◆ computeNumSignBits() [2/2]

unsigned GISelValueTracking::computeNumSignBits ( Register  R,
unsigned  Depth = 0 
)

◆ createdInstr()

void llvm::GISelValueTracking::createdInstr ( MachineInstr MI)
inlineoverridevirtual

An instruction has been created and inserted into the function.

Note that the instruction might not be a fully fledged instruction at this point and won't be if the MachineFunction::Delegate is calling it. This is because the delegate only sees the construction of the MachineInstr before operands have been added.

Implements llvm::GISelChangeObserver.

Definition at line 150 of file GISelValueTracking.h.

◆ erasingInstr()

void llvm::GISelValueTracking::erasingInstr ( MachineInstr MI)
inlineoverridevirtual

An instruction is about to be erased.

Implements llvm::GISelChangeObserver.

Definition at line 149 of file GISelValueTracking.h.

◆ getDataLayout()

const DataLayout & llvm::GISelValueTracking::getDataLayout ( ) const
inline

Definition at line 67 of file GISelValueTracking.h.

References DL.

Referenced by computeNumSignBits().

◆ getKnownBits() [1/3]

KnownBits GISelValueTracking::getKnownBits ( MachineInstr MI)

Definition at line 77 of file GISelValueTracking.cpp.

References assert(), getKnownBits(), and MI.

◆ getKnownBits() [2/3]

KnownBits GISelValueTracking::getKnownBits ( Register  R)

◆ getKnownBits() [3/3]

KnownBits GISelValueTracking::getKnownBits ( Register  R,
const APInt DemandedElts,
unsigned  Depth = 0 
)

Definition at line 93 of file GISelValueTracking.cpp.

References assert(), computeKnownBitsImpl(), and llvm::Depth.

◆ getKnownOnes()

APInt GISelValueTracking::getKnownOnes ( Register  R)

Definition at line 115 of file GISelValueTracking.cpp.

References getKnownBits(), and llvm::KnownBits::One.

◆ getKnownZeroes()

APInt GISelValueTracking::getKnownZeroes ( Register  R)

◆ getMachineFunction()

const MachineFunction & llvm::GISelValueTracking::getMachineFunction ( ) const
inline

◆ getMaxDepth()

unsigned llvm::GISelValueTracking::getMaxDepth ( ) const
inlineprotected

Definition at line 155 of file GISelValueTracking.h.

Referenced by computeKnownBitsImpl(), and computeNumSignBits().

◆ getValidMinimumShiftAmount()

std::optional< uint64_t > GISelValueTracking::getValidMinimumShiftAmount ( Register  R,
const APInt DemandedElts,
unsigned  Depth = 0 
)

If a G_SHL/G_ASHR/G_LSHR node with shift operand R has shift amounts that are all less than the element bit-width of the shift node, return the minimum possible value.

Definition at line 2114 of file GISelValueTracking.cpp.

References llvm::Depth, and getValidShiftAmountRange().

Referenced by computeNumSignBits().

◆ getValidShiftAmountRange()

std::optional< ConstantRange > GISelValueTracking::getValidShiftAmountRange ( Register  R,
const APInt DemandedElts,
unsigned  Depth 
)

If a G_SHL/G_ASHR/G_LSHR node with shift operand R has shift amounts that are all less than the element bit-width of the shift node, return the valid constant range.

Definition at line 2064 of file GISelValueTracking.cpp.

References assert(), llvm::BitWidth, llvm::Depth, llvm::ConstantRange::fromKnownBits(), getKnownBits(), llvm::KnownBits::getMaxValue(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), I, MI, llvm::APInt::uge(), llvm::APInt::ugt(), and llvm::APInt::ult().

Referenced by getValidMinimumShiftAmount().

◆ maskedValueIsZero()

bool llvm::GISelValueTracking::maskedValueIsZero ( Register  Val,
const APInt Mask 
)
inline
Returns
true if 'V & Mask' is known to be zero in DemandedElts. We use this predicate to simplify operations downstream. Mask is known to be zero for bits that V cannot have.

Definition at line 90 of file GISelValueTracking.h.

Referenced by llvm::AMDGPU::getBaseWithConstantOffset(), and signBitIsZero().

◆ signBitIsZero()

bool GISelValueTracking::signBitIsZero ( Register  Op)
Returns
true if the sign bit of Op is known to be zero. We use this predicate to simplify operations downstream.

Definition at line 105 of file GISelValueTracking.cpp.

References llvm::BitWidth, llvm::LLT::getScalarSizeInBits(), llvm::APInt::getSignMask(), llvm::MachineRegisterInfo::getType(), and maskedValueIsZero().


The documentation for this class was generated from the following files: