6#ifndef JLM_RVSDG_TRACE_HPP
7#define JLM_RVSDG_TRACE_HPP
class providing guarantees about unreachability of regions from other regions.
Conditional operator / pattern matching.
bool isDeadEnd() const noexcept
TraceStepResultKind kind_
static TraceStepResult createFinalOutput(Output &output)
static TraceStepResult createDeadEndResult()
bool isFinalOutput() const noexcept
Output & getOutput() const noexcept
static TraceStepResult createStepOutput(Output &output)
TraceStepResult(Output *output, TraceStepResultKind kind)
bool isStepOutput() const noexcept
TraceStepResult traceInternal(Output &output, BackEdgeState backEdgeState, const Region *withinRegion)
void setRegionPredicateCheckingEnabled(bool value) noexcept
void clearInvarianceCache()
Output & insertInInvarianceCache(const Output &structuralOutput, Input &structuralInput)
bool isInvarianceCachingEnabled() const noexcept
void setEnterPhiNodes(bool value) noexcept
AlternativeRegionPredicateTracer regionPredicateTracer_
void setInvarianceCaching(bool value) noexcept
TraceStepResult traceThetaOutput(ThetaNode &thetaNode, Output &output, BackEdgeState backEdgeState)
virtual TraceStepResult traceStep(Output &output, BackEdgeState backEdgeState, const Region *withinRegion)
bool isDeepInvarianceCheckingEnabled() const noexcept
void setInterprocedural(bool value) noexcept
bool isInterprocedural() const noexcept
StructuralNodePolicy getStructuralNodePolicy() const noexcept
TraceStepResult traceGammaOutput(GammaNode &gammaNode, Output &output, BackEdgeState backEdgeState)
const Output * startingOutput_
Output & trace(Output &output)
bool isEnteringPhiNodes() const noexcept
bool isRegionPredicateCheckingEnabled() const noexcept
void setStructuralNodePolicy(StructuralNodePolicy value) noexcept
@ traceThroughIfDetectedInvariant
@ traceThroughTriviallyInvariant
bool enableInvarianceCaching_
bool enableRegionPredicateChecking_
Input * lookupInInvarianceCache(const Output &structuralOutput)
StructuralNodePolicy structuralNodePolicy_
std::unordered_map< const Output *, Input * > invariantOutputCache_
TraceStepResult traceThetaArgument(ThetaNode &thetaNode, Output &output)
bool isTracingIntoSubregionsEnabled() const noexcept
Represent acyclic RVSDG subgraphs.
Output & traceOutput(Output &output, bool mayEnterSubregions, const Region *withinRegion)
Output & traceOutputIntraProcedurally(Output &output, bool mayEnterSubregions)
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.