/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
deps/v8/src/compiler/loop-unrolling.h
44 строки
2 KB
Michaël Zasso
deps: update V8 to 13.6.233.8
02 май 2025, 16:06
Не верифицирован
02 май 2025, 16:06
918fe04
Код
Авторство
О чём код?
// Copyright 2021 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_COMPILER_LOOP_UNROLLING_H_ #define V8_COMPILER_LOOP_UNROLLING_H_ // Loop unrolling is an optimization that copies the body of a loop and creates // a fresh loop, whose iteration corresponds to 2 or more iterations of the // initial loop. For a high-level description of the algorithm see // https://bit.ly/3G0VdWW. #include "src/compiler/common-operator.h" #include "src/compiler/loop-analysis.h" namespace v8 { namespace internal { namespace compiler { static constexpr uint32_t kMaximumUnnestedSize = 50; static constexpr uint32_t kMaximumUnrollingCount = 5; // A simple heuristic to decide how many times to unroll a loop. Favors small // and deeply nested loops. // TODO(manoskouk): Investigate how this can be improved. V8_INLINE uint32_t unrolling_count_heuristic(uint32_t size, uint32_t depth) { return std::min((depth + 1) * kMaximumUnnestedSize / size, kMaximumUnrollingCount); } V8_INLINE uint32_t maximum_unrollable_size(uint32_t depth) { return (depth + 1) * kMaximumUnnestedSize; } void UnrollLoop(Node* loop_node, ZoneUnorderedSet<Node*>* loop, uint32_t depth, TFGraph* graph, CommonOperatorBuilder* common, Zone* tmp_zone, SourcePositionTable* source_positions, NodeOriginTable* node_origins); } // namespace compiler } // namespace internal } // namespace v8 #endif // V8_COMPILER_LOOP_UNROLLING_H_