MLIR 24.0.0git
SideEffectInterfaces.cpp File Reference
#include "mlir/Interfaces/SideEffectInterfaces.h"
#include "mlir/IR/SymbolTable.h"
#include <utility>
#include "mlir/Interfaces/SideEffectInterfaces.cpp.inc"

Go to the source code of this file.

Functions

static bool hasOnlyRemovableEffects (Operation *op, bool hasRecursiveEffects)
 Return true if the op's own memory effects do not prevent erasure.
static bool wouldOpBeTriviallyDeadImpl (Operation *root, DenseMap< Operation *, DeadnessCache::State > *cache=nullptr)
 Internal implementation of mlir::wouldOpBeTriviallyDead that also considers terminator operations as dead if they have no side effects.
template bool mlir::hasSingleEffect< MemoryEffects::Allocate > (Operation *)
template bool mlir::hasSingleEffect< MemoryEffects::Free > (Operation *)
template bool mlir::hasSingleEffect< MemoryEffects::Read > (Operation *)
template bool mlir::hasSingleEffect< MemoryEffects::Write > (Operation *)
template bool mlir::hasSingleEffect< MemoryEffects::Allocate > (Operation *, Value value)
template bool mlir::hasSingleEffect< MemoryEffects::Free > (Operation *, Value value)
template bool mlir::hasSingleEffect< MemoryEffects::Read > (Operation *, Value value)
template bool mlir::hasSingleEffect< MemoryEffects::Write > (Operation *, Value value)
template bool mlir::hasSingleEffect< OpOperand *, MemoryEffects::Allocate > (Operation *, OpOperand *)
template bool mlir::hasSingleEffect< OpOperand *, MemoryEffects::Free > (Operation *, OpOperand *)
template bool mlir::hasSingleEffect< OpOperand *, MemoryEffects::Read > (Operation *, OpOperand *)
template bool mlir::hasSingleEffect< OpOperand *, MemoryEffects::Write > (Operation *, OpOperand *)
template bool mlir::hasSingleEffect< OpResult, MemoryEffects::Allocate > (Operation *, OpResult)
template bool mlir::hasSingleEffect< OpResult, MemoryEffects::Free > (Operation *, OpResult)
template bool mlir::hasSingleEffect< OpResult, MemoryEffects::Read > (Operation *, OpResult)
template bool mlir::hasSingleEffect< OpResult, MemoryEffects::Write > (Operation *, OpResult)
template bool mlir::hasSingleEffect< BlockArgument, MemoryEffects::Allocate > (Operation *, BlockArgument)
template bool mlir::hasSingleEffect< BlockArgument, MemoryEffects::Free > (Operation *, BlockArgument)
template bool mlir::hasSingleEffect< BlockArgument, MemoryEffects::Read > (Operation *, BlockArgument)
template bool mlir::hasSingleEffect< BlockArgument, MemoryEffects::Write > (Operation *, BlockArgument)
template bool mlir::hasEffect< MemoryEffects::Allocate > (Operation *)
template bool mlir::hasEffect< MemoryEffects::Free > (Operation *)
template bool mlir::hasEffect< MemoryEffects::Read > (Operation *)
template bool mlir::hasEffect< MemoryEffects::Write > (Operation *)
template bool mlir::hasEffect< MemoryEffects::Write, MemoryEffects::Free > (Operation *)
template bool mlir::hasEffect< MemoryEffects::Allocate > (Operation *, Value value)
template bool mlir::hasEffect< MemoryEffects::Free > (Operation *, Value value)
template bool mlir::hasEffect< MemoryEffects::Read > (Operation *, Value value)
template bool mlir::hasEffect< MemoryEffects::Write > (Operation *, Value value)
template bool mlir::hasEffect< MemoryEffects::Write, MemoryEffects::Free > (Operation *, Value value)
template bool mlir::hasEffect< OpOperand *, MemoryEffects::Allocate > (Operation *, OpOperand *)
template bool mlir::hasEffect< OpOperand *, MemoryEffects::Free > (Operation *, OpOperand *)
template bool mlir::hasEffect< OpOperand *, MemoryEffects::Read > (Operation *, OpOperand *)
template bool mlir::hasEffect< OpOperand *, MemoryEffects::Write > (Operation *, OpOperand *)
template bool mlir::hasEffect< OpOperand *, MemoryEffects::Write, MemoryEffects::Free > (Operation *, OpOperand *)
template bool mlir::hasEffect< OpResult, MemoryEffects::Allocate > (Operation *, OpResult)
template bool mlir::hasEffect< OpResult, MemoryEffects::Free > (Operation *, OpResult)
template bool mlir::hasEffect< OpResult, MemoryEffects::Read > (Operation *, OpResult)
template bool mlir::hasEffect< OpResult, MemoryEffects::Write > (Operation *, OpResult)
template bool mlir::hasEffect< OpResult, MemoryEffects::Write, MemoryEffects::Free > (Operation *, OpResult)
template bool mlir::hasEffect< BlockArgument, MemoryEffects::Allocate > (Operation *, BlockArgument)
template bool mlir::hasEffect< BlockArgument, MemoryEffects::Free > (Operation *, BlockArgument)
template bool mlir::hasEffect< BlockArgument, MemoryEffects::Read > (Operation *, BlockArgument)
template bool mlir::hasEffect< BlockArgument, MemoryEffects::Write > (Operation *, BlockArgument)
template bool mlir::hasEffect< BlockArgument, MemoryEffects::Write, MemoryEffects::Free > (Operation *, BlockArgument)

Function Documentation

◆ hasOnlyRemovableEffects()

bool hasOnlyRemovableEffects ( Operation * op,
bool hasRecursiveEffects )
static

Return true if the op's own memory effects do not prevent erasure.

Allowed effects are reads and effects on results allocated by the op itself.

If the op only has recursive effects, treat the op itself as having no effects. Without a memory effect interface or recursive effects, return false to conservatively assume live effects.

The caller must also check nested effects when hasRecursiveEffects is true. This function does not check uses or restrictions on erasing terminators and symbols.

Definition at line 49 of file SideEffectInterfaces.cpp.

References mlir::SideEffects::EffectInstance< EffectT >::getEffect(), and mlir::SideEffects::EffectInstance< EffectT >::getValue().

Referenced by wouldOpBeTriviallyDeadImpl().

◆ mlir::hasEffect< BlockArgument, MemoryEffects::Allocate >()

◆ mlir::hasEffect< BlockArgument, MemoryEffects::Free >()

◆ mlir::hasEffect< BlockArgument, MemoryEffects::Read >()

◆ mlir::hasEffect< BlockArgument, MemoryEffects::Write >()

◆ mlir::hasEffect< BlockArgument, MemoryEffects::Write, MemoryEffects::Free >()

◆ mlir::hasEffect< MemoryEffects::Allocate >() [1/2]

◆ mlir::hasEffect< MemoryEffects::Allocate >() [2/2]

◆ mlir::hasEffect< MemoryEffects::Free >() [1/2]

◆ mlir::hasEffect< MemoryEffects::Free >() [2/2]

References mlir::hasEffect().

◆ mlir::hasEffect< MemoryEffects::Read >() [1/2]

◆ mlir::hasEffect< MemoryEffects::Read >() [2/2]

References mlir::hasEffect().

◆ mlir::hasEffect< MemoryEffects::Write >() [1/2]

◆ mlir::hasEffect< MemoryEffects::Write >() [2/2]

◆ mlir::hasEffect< MemoryEffects::Write, MemoryEffects::Free >() [1/2]

◆ mlir::hasEffect< MemoryEffects::Write, MemoryEffects::Free >() [2/2]

◆ mlir::hasEffect< OpOperand *, MemoryEffects::Allocate >()

◆ mlir::hasEffect< OpOperand *, MemoryEffects::Free >()

◆ mlir::hasEffect< OpOperand *, MemoryEffects::Read >()

◆ mlir::hasEffect< OpOperand *, MemoryEffects::Write >()

◆ mlir::hasEffect< OpOperand *, MemoryEffects::Write, MemoryEffects::Free >()

◆ mlir::hasEffect< OpResult, MemoryEffects::Allocate >()

◆ mlir::hasEffect< OpResult, MemoryEffects::Free >()

◆ mlir::hasEffect< OpResult, MemoryEffects::Read >()

◆ mlir::hasEffect< OpResult, MemoryEffects::Write >()

◆ mlir::hasEffect< OpResult, MemoryEffects::Write, MemoryEffects::Free >()

◆ mlir::hasSingleEffect< BlockArgument, MemoryEffects::Allocate >()

◆ mlir::hasSingleEffect< BlockArgument, MemoryEffects::Free >()

◆ mlir::hasSingleEffect< BlockArgument, MemoryEffects::Read >()

◆ mlir::hasSingleEffect< BlockArgument, MemoryEffects::Write >()

◆ mlir::hasSingleEffect< MemoryEffects::Allocate >() [1/2]

◆ mlir::hasSingleEffect< MemoryEffects::Allocate >() [2/2]

◆ mlir::hasSingleEffect< MemoryEffects::Free >() [1/2]

◆ mlir::hasSingleEffect< MemoryEffects::Free >() [2/2]

◆ mlir::hasSingleEffect< MemoryEffects::Read >() [1/2]

◆ mlir::hasSingleEffect< MemoryEffects::Read >() [2/2]

◆ mlir::hasSingleEffect< MemoryEffects::Write >() [1/2]

◆ mlir::hasSingleEffect< MemoryEffects::Write >() [2/2]

◆ mlir::hasSingleEffect< OpOperand *, MemoryEffects::Allocate >()

◆ mlir::hasSingleEffect< OpOperand *, MemoryEffects::Free >()

◆ mlir::hasSingleEffect< OpOperand *, MemoryEffects::Read >()

◆ mlir::hasSingleEffect< OpOperand *, MemoryEffects::Write >()

◆ mlir::hasSingleEffect< OpResult, MemoryEffects::Allocate >()

◆ mlir::hasSingleEffect< OpResult, MemoryEffects::Free >()

◆ mlir::hasSingleEffect< OpResult, MemoryEffects::Read >()

◆ mlir::hasSingleEffect< OpResult, MemoryEffects::Write >()

◆ wouldOpBeTriviallyDeadImpl()

bool wouldOpBeTriviallyDeadImpl ( Operation * root,
DenseMap< Operation *, DeadnessCache::State > * cache = nullptr )
static

Internal implementation of mlir::wouldOpBeTriviallyDead that also considers terminator operations as dead if they have no side effects.

This allows for marking region operations as trivially dead without always being conservative of terminators.

Definition at line 76 of file SideEffectInterfaces.cpp.

References mlir::Operation::getParentOp(), mlir::Operation::getRegions(), hasOnlyRemovableEffects(), and mlir::Operation::hasTrait().

Referenced by mlir::DeadnessCache::isOpTriviallyDead(), and mlir::wouldOpBeTriviallyDead().