Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
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)
 ~GISelValueTracking ()=default
const MachineFunctiongetMachineFunction () const
const DataLayoutgetDataLayout () const
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
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()

llvm::GISelValueTracking::~GISelValueTracking ( )
default

Member Function Documentation

◆ changedInstr()

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

This instruction was mutated in some way.

Implements llvm::GISelChangeObserver.

Definition at line 149 of file GISelValueTracking.h.

References MI.

◆ changingInstr()

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

This instruction is about to be mutated in some way.

Implements llvm::GISelChangeObserver.

Definition at line 148 of file GISelValueTracking.h.

References MI.

◆ computeKnownAlignment()

Align GISelValueTracking::computeKnownAlignment ( Register R,
unsigned Depth = 0 )
Returns
The known alignment for the pointer-like value R.

Definition at line 55 of file GISelValueTracking.cpp.

References computeKnownAlignment(), llvm::Depth, and MI.

Referenced by computeKnownAlignment().

◆ computeKnownBitsForAlignment()

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

◆ computeKnownBitsImpl()

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

Definition at line 159 of file GISelValueTracking.cpp.

References llvm::KnownBits::abs(), AbstractManglingParser< Derived, Alloc >::NumOps, 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::computeKnownBitsFromRangeMetadata(), computeKnownBitsImpl(), computeNumSignBits(), llvm::KnownBits::countMaxLeadingZeros(), llvm::KnownBits::countMaxPopulation(), llvm::Depth, llvm::drop_begin(), dumpResult(), llvm::enumerate(), llvm::APInt::extractBits(), llvm::extractBits(), llvm::KnownBits::extractBits(), llvm::APInt::getAllOnes(), llvm::APInt::getBitWidth(), llvm::KnownBits::getBitWidth(), llvm::APInt::getLowBitsSet(), getMaxDepth(), llvm::MachineMemOperand::getMemoryType(), llvm::LLT::getNumElements(), llvm::MachineMemOperand::getRanges(), getReg(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::getShuffleDemandedElts(), I, llvm::KnownBits::insertBits(), llvm::KnownBits::intersectWith(), llvm::LLT::isFixedVector(), 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::setHighBits(), llvm::APInt::setLowBits(), llvm::KnownBits::sext(), llvm::KnownBits::sextInReg(), llvm::APInt::shl(), llvm::KnownBits::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::APInt::zext(), llvm::KnownBits::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 1688 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 1703 of file GISelValueTracking.cpp.

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

◆ computeKnownFPClass() [3/4]

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

Definition at line 1696 of file GISelValueTracking.cpp.

References llvm::Depth.

◆ computeKnownFPClass() [4/4]

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

Definition at line 1721 of file GISelValueTracking.cpp.

References llvm::Depth, and llvm::APInt::getAllOnes().

◆ computeNumSignBits() [1/2]

◆ 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 147 of file GISelValueTracking.h.

References MI.

◆ erasingInstr()

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

An instruction is about to be erased.

Implements llvm::GISelChangeObserver.

Definition at line 146 of file GISelValueTracking.h.

References MI.

◆ getDataLayout()

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

Definition at line 65 of file GISelValueTracking.h.

Referenced by computeNumSignBits().

◆ getKnownBits() [1/3]

KnownBits GISelValueTracking::getKnownBits ( MachineInstr & MI)

Definition at line 77 of file GISelValueTracking.cpp.

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

Referenced by getKnownBits().

◆ getKnownBits() [2/3]

◆ getKnownBits() [3/3]

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

Definition at line 93 of file GISelValueTracking.cpp.

References computeKnownBitsImpl(), and llvm::Depth.

◆ getKnownOnes()

APInt GISelValueTracking::getKnownOnes ( Register R)

Definition at line 111 of file GISelValueTracking.cpp.

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

◆ getKnownZeroes()

APInt GISelValueTracking::getKnownZeroes ( Register R)

Definition at line 107 of file GISelValueTracking.cpp.

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

◆ getMachineFunction()

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

◆ getMaxDepth()

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

Definition at line 152 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 2135 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 2085 of file GISelValueTracking.cpp.

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

Referenced by computeNumSignBits(), and 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 87 of file GISelValueTracking.h.

References getKnownBits().

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 101 of file GISelValueTracking.cpp.

References llvm::BitWidth, llvm::APInt::getSignMask(), and maskedValueIsZero().


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