%PDF- %PDF-
| Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/compiler/turboshaft/ |
| Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/compiler/turboshaft/phase.cc |
// Copyright 2023 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.
#include "src/compiler/turboshaft/phase.h"
#include "src/codegen/optimized-compilation-info.h"
#include "src/compiler/graph-visualizer.h"
#include "src/compiler/js-heap-broker.h"
#include "src/compiler/turboshaft/graph-visualizer.h"
#include "src/diagnostics/code-tracer.h"
namespace v8::internal::compiler::turboshaft {
void PrintTurboshaftGraph(Zone* temp_zone, CodeTracer* code_tracer,
const char* phase_name) {
const PipelineData& data = PipelineData::Get();
if (data.info()->trace_turbo_json()) {
UnparkedScopeIfNeeded scope(data.broker());
AllowHandleDereference allow_deref;
turboshaft::Graph& graph = data.graph();
{
TurboJsonFile json_of(data.info(), std::ios_base::app);
json_of << "{\"name\":\"" << phase_name
<< "\",\"type\":\"turboshaft_graph\",\"data\":"
<< AsJSON(graph, data.node_origins(), temp_zone) << "},\n";
}
PrintTurboshaftCustomDataPerOperation(
data.info(), "Properties", graph,
[](std::ostream& stream, const turboshaft::Graph& graph,
turboshaft::OpIndex index) -> bool {
const auto& op = graph.Get(index);
op.PrintOptions(stream);
return true;
});
PrintTurboshaftCustomDataPerOperation(
data.info(), "Types", graph,
[](std::ostream& stream, const turboshaft::Graph& graph,
turboshaft::OpIndex index) -> bool {
turboshaft::Type type = graph.operation_types()[index];
if (!type.IsInvalid() && !type.IsNone()) {
type.PrintTo(stream);
return true;
}
return false;
});
PrintTurboshaftCustomDataPerOperation(
data.info(), "Use Count (saturated)", graph,
[](std::ostream& stream, const turboshaft::Graph& graph,
turboshaft::OpIndex index) -> bool {
stream << static_cast<int>(
graph.Get(index).saturated_use_count.Get());
return true;
});
#ifdef DEBUG
PrintTurboshaftCustomDataPerBlock(
data.info(), "Type Refinements", graph,
[](std::ostream& stream, const turboshaft::Graph& graph,
turboshaft::BlockIndex index) -> bool {
const std::vector<std::pair<turboshaft::OpIndex, turboshaft::Type>>&
refinements = graph.block_type_refinement()[index];
if (refinements.empty()) return false;
stream << "\\n";
for (const auto& [op, type] : refinements) {
stream << op << " : " << type << "\\n";
}
return true;
});
#endif // DEBUG
}
if (data.info()->trace_turbo_graph()) {
DCHECK(code_tracer);
UnparkedScopeIfNeeded scope(data.broker());
AllowHandleDereference allow_deref;
CodeTracer::StreamScope tracing_scope(code_tracer);
tracing_scope.stream() << "\n----- " << phase_name << " -----\n"
<< data.graph();
}
}
} // namespace v8::internal::compiler::turboshaft