Index: src/compiler/pipeline.cc |
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
index f050c9b4c0825b163eabf07b7a40adbdac399b4d..438f10459524b33113a439c942e0434097f1fdc2 100644 |
--- a/src/compiler/pipeline.cc |
+++ b/src/compiler/pipeline.cc |
@@ -4,7 +4,6 @@ |
#include "src/compiler/pipeline.h" |
-#include <fstream> // NOLINT(readability/streams) |
#include <sstream> |
#include "src/base/platform/elapsed-timer.h" |
@@ -98,10 +97,19 @@ static inline bool VerifyGraphs() { |
} |
-struct TurboCfgFile : public std::ofstream { |
- explicit TurboCfgFile(Isolate* isolate) |
- : std::ofstream(isolate->GetTurboCfgFileName(), std::ios_base::app) {} |
-}; |
+void Pipeline::PrintCompilationStart() { |
+ std::ofstream turbo_cfg_stream; |
+ OpenTurboCfgFile(&turbo_cfg_stream); |
+ turbo_cfg_stream << AsC1VCompilation(info()); |
+} |
+ |
+ |
+void Pipeline::OpenTurboCfgFile(std::ofstream* stream) { |
+ char buffer[512]; |
+ Vector<char> filename(buffer, sizeof(buffer)); |
+ isolate()->GetTurboCfgFileName(filename); |
+ stream->open(filename.start(), std::fstream::out | std::fstream::app); |
+} |
void Pipeline::VerifyAndPrintGraph( |
@@ -150,6 +158,24 @@ void Pipeline::VerifyAndPrintGraph( |
} |
+void Pipeline::PrintScheduleAndInstructions( |
+ const char* phase, const Schedule* schedule, |
+ const SourcePositionTable* positions, |
+ const InstructionSequence* instructions) { |
+ std::ofstream turbo_cfg_stream; |
+ OpenTurboCfgFile(&turbo_cfg_stream); |
+ turbo_cfg_stream << AsC1V(phase, schedule, positions, instructions); |
+} |
+ |
+ |
+void Pipeline::PrintAllocator(const char* phase, |
+ const RegisterAllocator* allocator) { |
+ std::ofstream turbo_cfg_stream; |
+ OpenTurboCfgFile(&turbo_cfg_stream); |
+ turbo_cfg_stream << AsC1VAllocator(phase, allocator); |
+} |
+ |
+ |
class AstGraphBuilderWithPositions : public AstGraphBuilder { |
public: |
explicit AstGraphBuilderWithPositions(Zone* local_zone, CompilationInfo* info, |
@@ -208,7 +234,7 @@ Handle<Code> Pipeline::GenerateCode() { |
<< "Begin compiling method " |
<< info()->function()->debug_name()->ToCString().get() |
<< " using Turbofan" << std::endl; |
- TurboCfgFile(isolate()) << AsC1VCompilation(info()); |
+ PrintCompilationStart(); |
} |
ZonePool zone_pool(isolate()); |
@@ -461,8 +487,8 @@ Handle<Code> Pipeline::GenerateCode(ZonePool* zone_pool, Linkage* linkage, |
OFStream os(stdout); |
os << "----- Instruction sequence before register allocation -----\n" |
<< sequence; |
- TurboCfgFile(isolate()) |
- << AsC1V("CodeGen", schedule, source_positions, &sequence); |
+ PrintScheduleAndInstructions("CodeGen", schedule, source_positions, |
+ &sequence); |
} |
// Allocate registers. |
@@ -481,7 +507,7 @@ Handle<Code> Pipeline::GenerateCode(ZonePool* zone_pool, Linkage* linkage, |
return Handle<Code>::null(); |
} |
if (FLAG_trace_turbo) { |
- TurboCfgFile(isolate()) << AsC1VAllocator("CodeGen", &allocator); |
+ PrintAllocator("CodeGen", &allocator); |
} |
} |