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

Inherited from GISelChangeObserver:

Methods

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)

Description

This instruction was mutated in some way.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:99

Parameters

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::MachineInstr& MI

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)

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)

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)

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)

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)

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)

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)

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

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

llvm::MachineInstr& MI

const llvm::DataLayout& getDataLayout() const

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:53

llvm::KnownBits getKnownBits(
    llvm::MachineInstr& MI)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:71

Parameters

llvm::MachineInstr& MI

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)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:66

Parameters

llvm::Register R

llvm::APInt getKnownOnes(llvm::Register R)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:73

Parameters

llvm::Register R

llvm::APInt getKnownZeroes(llvm::Register R)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:72

Parameters

llvm::Register R

const llvm::MachineFunction& getMachineFunction()
    const

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:49

unsigned int getMaxDepth() const

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:102

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)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:84

Parameters

llvm::Register Op

Returns

true if the sign bit of Op is known to be zero. We use this predicate to simplify operations downstream.

virtual ~GISelKnownBits()

Declared at: llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h:47