class GISelKnownBits
Declaration
class GISelKnownBits : public GISelChangeObserver { /* full declaration omitted */ };
Description
Abstract class that contains various methods for clients to notify about changes. This should be the preferred way for APIs to notify changes. Typically calling erasingInstr/createdInstr multiple times should not affect the result. The observer would likely need to check if it was already notified earlier (consider using GISelWorkList).
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:29
Inherits from: GISelChangeObserver
Member Variables
- private llvm::MachineFunction& MF
- private llvm::MachineRegisterInfo& MRI
- private const llvm::TargetLowering& TL
- private const llvm::DataLayout& DL
- private unsigned int MaxDepth
- private SmallDenseMap<llvm::Register, llvm::KnownBits, 16> ComputeKnownBitsCache
- Cache maintained during a computeKnownBits request.
Method Overview
- public GISelKnownBits(llvm::MachineFunction & MF, unsigned int MaxDepth = 6)
- public void changedInstr(llvm::MachineInstr & MI)
- public void changingInstr(llvm::MachineInstr & MI)
- public llvm::Align computeKnownAlignment(llvm::Register R, unsigned int Depth = 0)
- public static void computeKnownBitsForAlignment(llvm::KnownBits & Known, llvm::Align Alignment)
- public virtual void computeKnownBitsImpl(llvm::Register R, llvm::KnownBits & Known, const llvm::APInt & DemandedElts, unsigned int Depth = 0)
- private void computeKnownBitsMin(llvm::Register Src0, llvm::Register Src1, llvm::KnownBits & Known, const llvm::APInt & DemandedElts, unsigned int Depth = 0)
- public unsigned int computeNumSignBits(llvm::Register R, const llvm::APInt & DemandedElts, unsigned int Depth = 0)
- public unsigned int computeNumSignBits(llvm::Register R, unsigned int Depth = 0)
- private unsigned int computeNumSignBitsMin(llvm::Register Src0, llvm::Register Src1, const llvm::APInt & DemandedElts, unsigned int Depth = 0)
- public void createdInstr(llvm::MachineInstr & MI)
- public void erasingInstr(llvm::MachineInstr & MI)
- public const llvm::DataLayout & getDataLayout() const
- public llvm::KnownBits getKnownBits(llvm::MachineInstr & MI)
- public llvm::KnownBits getKnownBits(llvm::Register R, const llvm::APInt & DemandedElts, unsigned int Depth = 0)
- public llvm::KnownBits getKnownBits(llvm::Register R)
- public llvm::APInt getKnownOnes(llvm::Register R)
- public llvm::APInt getKnownZeroes(llvm::Register R)
- public const llvm::MachineFunction & getMachineFunction() const
- protected unsigned int getMaxDepth() const
- public bool maskedValueIsZero(llvm::Register Val, const llvm::APInt & Mask)
- public bool signBitIsZero(llvm::Register Op)
- public virtual ~GISelKnownBits()
Inherited from GISelChangeObserver:
- public changedInstr
- public changingAllUsesOfReg
- public changingInstr
- public createdInstr
- public erasingInstr
- public finishedChangingAllUsesOfReg
Methods
¶GISelKnownBits(llvm::MachineFunction& MF,
unsigned int MaxDepth = 6)
GISelKnownBits(llvm::MachineFunction& MF,
unsigned int MaxDepth = 6)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:46
Parameters
- llvm::MachineFunction& MF
- unsigned int MaxDepth = 6
¶void changedInstr(llvm::MachineInstr& MI)
void changedInstr(llvm::MachineInstr& MI)
Description
This instruction was mutated in some way.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:99
Parameters
¶void changingInstr(llvm::MachineInstr& MI)
void changingInstr(llvm::MachineInstr& MI)
Description
This instruction is about to be mutated in some way.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:98
Parameters
¶llvm::Align computeKnownAlignment(
llvm::Register R,
unsigned int Depth = 0)
llvm::Align computeKnownAlignment(
llvm::Register R,
unsigned int Depth = 0)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:93
Parameters
- llvm::Register R
- unsigned int Depth = 0
Returns
The known alignment for the pointer-like value \p R.
¶static void computeKnownBitsForAlignment(
llvm::KnownBits& Known,
llvm::Align Alignment)
static void computeKnownBitsForAlignment(
llvm::KnownBits& Known,
llvm::Align Alignment)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:86
Parameters
- llvm::KnownBits& Known
- llvm::Align Alignment
¶virtual void computeKnownBitsImpl(
llvm::Register R,
llvm::KnownBits& Known,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
virtual void computeKnownBitsImpl(
llvm::Register R,
llvm::KnownBits& Known,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:57
Parameters
- llvm::Register R
- llvm::KnownBits& Known
- const llvm::APInt& DemandedElts
- unsigned int Depth = 0
¶void computeKnownBitsMin(
llvm::Register Src0,
llvm::Register Src1,
llvm::KnownBits& Known,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
void computeKnownBitsMin(
llvm::Register Src0,
llvm::Register Src1,
llvm::KnownBits& Known,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:38
Parameters
- llvm::Register Src0
- llvm::Register Src1
- llvm::KnownBits& Known
- const llvm::APInt& DemandedElts
- unsigned int Depth = 0
¶unsigned int computeNumSignBits(
llvm::Register R,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
unsigned int computeNumSignBits(
llvm::Register R,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:61
Parameters
- llvm::Register R
- const llvm::APInt& DemandedElts
- unsigned int Depth = 0
¶unsigned int computeNumSignBits(
llvm::Register R,
unsigned int Depth = 0)
unsigned int computeNumSignBits(
llvm::Register R,
unsigned int Depth = 0)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:63
Parameters
- llvm::Register R
- unsigned int Depth = 0
¶unsigned int computeNumSignBitsMin(
llvm::Register Src0,
llvm::Register Src1,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
unsigned int computeNumSignBitsMin(
llvm::Register Src0,
llvm::Register Src1,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:42
Parameters
- llvm::Register Src0
- llvm::Register Src1
- const llvm::APInt& DemandedElts
- unsigned int Depth = 0
¶void createdInstr(llvm::MachineInstr& MI)
void createdInstr(llvm::MachineInstr& MI)
Description
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.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:97
Parameters
¶void erasingInstr(llvm::MachineInstr& MI)
void erasingInstr(llvm::MachineInstr& MI)
Description
An instruction is about to be erased.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:96
Parameters
¶const llvm::DataLayout& getDataLayout() const
const llvm::DataLayout& getDataLayout() const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:53
¶llvm::KnownBits getKnownBits(
llvm::MachineInstr& MI)
llvm::KnownBits getKnownBits(
llvm::MachineInstr& MI)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:71
Parameters
¶llvm::KnownBits getKnownBits(
llvm::Register R,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
llvm::KnownBits getKnownBits(
llvm::Register R,
const llvm::APInt& DemandedElts,
unsigned int Depth = 0)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:67
Parameters
- llvm::Register R
- const llvm::APInt& DemandedElts
- unsigned int Depth = 0
¶llvm::KnownBits getKnownBits(llvm::Register R)
llvm::KnownBits getKnownBits(llvm::Register R)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:66
Parameters
¶llvm::APInt getKnownOnes(llvm::Register R)
llvm::APInt getKnownOnes(llvm::Register R)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:73
Parameters
¶llvm::APInt getKnownZeroes(llvm::Register R)
llvm::APInt getKnownZeroes(llvm::Register R)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:72
Parameters
¶const llvm::MachineFunction& getMachineFunction()
const
const llvm::MachineFunction& getMachineFunction()
const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:49
¶unsigned int getMaxDepth() const
unsigned int getMaxDepth() const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:102
¶bool maskedValueIsZero(llvm::Register Val,
const llvm::APInt& Mask)
bool maskedValueIsZero(llvm::Register Val,
const llvm::APInt& Mask)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:78
Parameters
- llvm::Register Val
- const llvm::APInt& Mask
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.
¶bool signBitIsZero(llvm::Register Op)
bool signBitIsZero(llvm::Register Op)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:84
Parameters
Returns
true if the sign bit of Op is known to be zero. We use this predicate to simplify operations downstream.
¶virtual ~GISelKnownBits()
virtual ~GISelKnownBits()
Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:47