@@ -36,6 +36,18 @@ struct PaddingSpace {
3636V8_EXPORT_PRIVATE std::ostream& operator <<(std::ostream& os,
3737 PaddingSpace padding);
3838
39+ template <class Next >
40+ class VariableReducerHotfix : public Next {
41+ public:
42+ TURBOSHAFT_REDUCER_BOILERPLATE ()
43+
44+ void SetVariable (Variable var, OpIndex new_index) {}
45+ Variable NewLoopInvariantVariable (MaybeRegisterRepresentation rep) { return Variable (); }
46+
47+ OpIndex GetVariable (Variable var) { return OpIndex (); }
48+ OpIndex GetPredecessorValue (Variable var, int predecessor_index) { return OpIndex (); }
49+ };
50+
3951template <typename Next>
4052class ReducerBaseForwarder ;
4153template <typename Next>
@@ -46,6 +58,9 @@ class GraphVisitor : public Next {
4658 template <typename N>
4759 friend class ReducerBaseForwarder ;
4860
61+ private:
62+ bool contains_variable_reducer_;
63+
4964 public:
5065 TURBOSHAFT_REDUCER_BOILERPLATE ()
5166
@@ -66,7 +81,8 @@ class GraphVisitor : public Next {
6681 // `trace_reduction` is a template parameter to avoid paying for tracing at
6782 // runtime.
6883 template <bool trace_reduction>
69- void VisitGraph () {
84+ void VisitGraph (bool contains_variable_reducer) {
85+ contains_variable_reducer_ = contains_variable_reducer;
7086 Asm ().Analyze ();
7187
7288 // Creating initial old-to-new Block mapping.
@@ -177,8 +193,7 @@ class GraphVisitor : public Next {
177193 DCHECK (old_index.valid ());
178194 OpIndex result = op_mapping_[old_index];
179195
180- if constexpr (reducer_list_contains<typename Next::ReducerList,
181- VariableReducer>::value) {
196+ if (contains_variable_reducer_) {
182197 if (!result.valid ()) {
183198 // {op_mapping} doesn't have a mapping for {old_index}. The assembler
184199 // should provide the mapping.
@@ -1294,8 +1309,7 @@ class GraphVisitor : public Next {
12941309 DCHECK (Asm ().input_graph ().BelongsToThisGraph (old_index));
12951310 DCHECK_IMPLIES (new_index.valid (),
12961311 Asm ().output_graph ().BelongsToThisGraph (new_index));
1297- if constexpr (reducer_list_contains<typename Next::ReducerList,
1298- VariableReducer>::value) {
1312+ if (contains_variable_reducer_) {
12991313 if (current_block_needs_variables_) {
13001314 MaybeVariable var = GetVariableFor (old_index);
13011315 if (!var.has_value ()) {
@@ -1393,29 +1407,30 @@ template <template <class> class... Reducers>
13931407class CopyingPhaseImpl {
13941408 public:
13951409 static void Run (Graph& input_graph, Zone* phase_zone,
1396- bool trace_reductions = false ) {
1410+ bool contains_variable_reducer, bool trace_reductions = false ) {
13971411 TSAssembler<GraphVisitor, Reducers...> phase (
13981412 input_graph, input_graph.GetOrCreateCompanion (), phase_zone);
13991413#ifdef DEBUG
14001414 if (trace_reductions) {
1401- phase.template VisitGraph <true >();
1415+ phase.template VisitGraph <true >(contains_variable_reducer );
14021416 } else {
1403- phase.template VisitGraph <false >();
1417+ phase.template VisitGraph <false >(contains_variable_reducer );
14041418 }
14051419#else
1406- phase.template VisitGraph <false >();
1420+ phase.template VisitGraph <false >(contains_variable_reducer );
14071421#endif // DEBUG
14081422 }
14091423};
14101424
14111425template <template <typename > typename ... Reducers>
14121426class CopyingPhase {
14131427 public:
1428+ template <bool contains_variable_reducer>
14141429 static void Run (Zone* phase_zone) {
14151430 PipelineData& data = PipelineData::Get ();
14161431 Graph& input_graph = data.graph ();
14171432 CopyingPhaseImpl<Reducers...>::Run (
1418- input_graph, phase_zone, data.info ()->turboshaft_trace_reduction ());
1433+ input_graph, phase_zone, contains_variable_reducer, data.info ()->turboshaft_trace_reduction ());
14191434 }
14201435};
14211436
0 commit comments