#ifndef V8_COMPILER_TURBOSHAFT_LOOP_UNROLLING_REDUCER_H_
#define V8_COMPILER_TURBOSHAFT_LOOP_UNROLLING_REDUCER_H_
#include <optional>
#include "src/base/logging.h"
#include "src/compiler/globals.h"
#include "src/compiler/turboshaft/assembler.h"
#include "src/compiler/turboshaft/copying-phase.h"
#include "src/compiler/turboshaft/index.h"
#include "src/compiler/turboshaft/loop-finder.h"
#include "src/compiler/turboshaft/machine-optimization-reducer.h"
#include "src/compiler/turboshaft/operations.h"
#include "src/compiler/turboshaft/phase.h"
namespace v8::internal::compiler::turboshaft {
#include "src/compiler/turboshaft/define-assembler-macros.inc"
class IterationCount { … };
std::ostream& operator<<(std::ostream& os, const IterationCount& count);
class V8_EXPORT_PRIVATE StaticCanonicalForLoopMatcher { … };
std::ostream& operator<<(std::ostream& os,
const StaticCanonicalForLoopMatcher::CmpOp& cmp);
std::ostream& operator<<(std::ostream& os,
const StaticCanonicalForLoopMatcher::BinOp& binop);
class V8_EXPORT_PRIVATE LoopUnrollingAnalyzer { … };
template <class Next>
class LoopPeelingReducer;
template <class Next>
class LoopStackCheckElisionReducer : public Next { … };
template <class Next>
class LoopUnrollingReducer : public Next { … };
template <class Next>
void LoopUnrollingReducer<Next>::PartiallyUnrollLoop(const Block* header) { … }
template <class Next>
void LoopUnrollingReducer<Next>::FixLoopPhis(const Block* input_graph_loop,
Block* output_graph_loop,
const Block* backedge_block) { … }
template <class Next>
void LoopUnrollingReducer<Next>::RemoveLoop(const Block* header) { … }
template <class Next>
void LoopUnrollingReducer<Next>::FullyUnrollLoop(const Block* header) { … }
#include "src/compiler/turboshaft/undef-assembler-macros.inc"
}
#endif