tvm
Public Types | Public Member Functions | Friends | List of all members
tvm::arith::RewriteSimplifier Class Reference

Rewrite-rule based simplifier. More...

#include <analyzer.h>

Collaboration diagram for tvm::arith::RewriteSimplifier:

Public Types

enum  Extension {
  kNone = 0 , kTransitivelyProveInequalities = (1 << 0) , kConvertBooleanToAndOfOrs = (1 << 1) , kApplyConstraintsToBooleanBranches = (1 << 2) ,
  kComparisonOfProductAndSum = (1 << 3)
}
 Flags to enable more computationally-intensive simplifications. More...
 

Public Member Functions

PrimExpr operator() (const PrimExpr &expr)
 analyze the expr More...
 
void Update (const Var &var, const PrimExpr &new_expr, bool allow_override=false)
 Update binding of var to a new expression. More...
 
std::function< void()> EnterConstraint (const PrimExpr &constraint)
 Update the internal state to enter constraint. More...
 
void SetEnabledExtensions (Extension flags)
 Enable an optional extension or extensions. More...
 
Extension GetEnabledExtensions () const
 Return the currently enabled extensions. More...
 
ffi::ObjectRef GetStatsCounters () const
 Return the statistics counters. More...
 
void ResetStatsCounters ()
 Reset the statistics counters. More...
 
void SetMaximumRewriteSteps (int64_t maximum)
 Set the maximum allowed number of rewrite steps. More...
 

Friends

class Analyzer
 
class ConstraintContext
 
class CanonicalSimplifier
 

Detailed Description

Rewrite-rule based simplifier.

Member Enumeration Documentation

◆ Extension

Flags to enable more computationally-intensive simplifications.

These simplifications may be required for specific schedules, but would impose too high a compile-time cost to enable by default. They can be enabled on an as-needed basis by calling RewriteSimplifier::SetEnabledExtensions prior to using RewriteSimplifier::operator().

Flags are defined as powers of two to allow future expansion. To enable multiple extensions, a user should pass a bitwise OR of the flags for each desired extension.

Enumerator
kNone 
kTransitivelyProveInequalities 
kConvertBooleanToAndOfOrs 
kApplyConstraintsToBooleanBranches 
kComparisonOfProductAndSum 

Member Function Documentation

◆ EnterConstraint()

std::function<void()> tvm::arith::RewriteSimplifier::EnterConstraint ( const PrimExpr constraint)

Update the internal state to enter constraint.

Parameters
constraintA constraint expression.
Returns
an exit function that must be called to cleanup the constraint can be nullptr.

◆ GetEnabledExtensions()

Extension tvm::arith::RewriteSimplifier::GetEnabledExtensions ( ) const

Return the currently enabled extensions.

◆ GetStatsCounters()

ffi::ObjectRef tvm::arith::RewriteSimplifier::GetStatsCounters ( ) const

Return the statistics counters.

◆ operator()()

PrimExpr tvm::arith::RewriteSimplifier::operator() ( const PrimExpr expr)

analyze the expr

Parameters
exprThe expression of interest.
Returns
the result of the analysis.

◆ ResetStatsCounters()

void tvm::arith::RewriteSimplifier::ResetStatsCounters ( )

Reset the statistics counters.

◆ SetEnabledExtensions()

void tvm::arith::RewriteSimplifier::SetEnabledExtensions ( Extension  flags)

Enable an optional extension or extensions.

Parameters
flagsA bitwise OR of all optional extensions that should be enabled.

◆ SetMaximumRewriteSteps()

void tvm::arith::RewriteSimplifier::SetMaximumRewriteSteps ( int64_t  maximum)

Set the maximum allowed number of rewrite steps.

By default, the simplifier may perform as many steps as are required. If a positive limit is set, then the simplifier will throw an exception when exceeding that number of rewrite steps. This allows tests to guard against performance regressions.

Note: To maintain accurate usage counters, Analyzer instances should be re-used wherever possible. For example, TIR transformations should declare a single Analyzer that is used throughout the pass, and utility functions should receive an Analyzer* from their calling scope.

◆ Update()

void tvm::arith::RewriteSimplifier::Update ( const Var var,
const PrimExpr new_expr,
bool  allow_override = false 
)

Update binding of var to a new expression.

Parameters
varThe variable of interest.
new_expr
allow_overrideWhether we allow override of existing information.

Friends And Related Function Documentation

◆ Analyzer

friend class Analyzer
friend

◆ CanonicalSimplifier

friend class CanonicalSimplifier
friend

◆ ConstraintContext

friend class ConstraintContext
friend

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