Reland 'Simplify TurboFan's c1visualizer file handling.'
authorsvenpanne@chromium.org <svenpanne@chromium.org>
Thu, 23 Oct 2014 11:56:26 +0000 (11:56 +0000)
committersvenpanne@chromium.org <svenpanne@chromium.org>
Thu, 23 Oct 2014 11:56:26 +0000 (11:56 +0000)
This is r24819 plus some tiny fixes to make the Mac toolchain happy.

TBR=bmeurer@chromium.org

Review URL: https://codereview.chromium.org/676673002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24840 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/compiler/pipeline.cc
src/compiler/pipeline.h
src/isolate.cc
src/isolate.h

index 609de06..3b33744 100644 (file)
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "src/compiler/pipeline.h"
+
+#include <fstream>  // NOLINT(readability/streams)
 #include <sstream>
 
 #include "src/base/platform/elapsed-timer.h"
@@ -20,7 +23,6 @@
 #include "src/compiler/js-typed-lowering.h"
 #include "src/compiler/machine-operator-reducer.h"
 #include "src/compiler/phi-reducer.h"
-#include "src/compiler/pipeline.h"
 #include "src/compiler/pipeline-statistics.h"
 #include "src/compiler/register-allocator.h"
 #include "src/compiler/schedule.h"
@@ -47,19 +49,11 @@ static inline bool VerifyGraphs() {
 }
 
 
-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);
-}
+struct TurboCfgFile : public std::ofstream {
+  explicit TurboCfgFile(Isolate* isolate)
+      : std::ofstream(isolate->GetTurboCfgFileName().c_str(),
+                      std::ios_base::app) {}
+};
 
 
 void Pipeline::VerifyAndPrintGraph(
@@ -108,24 +102,6 @@ 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,
@@ -190,7 +166,8 @@ Handle<Code> Pipeline::GenerateCode() {
        << "Begin compiling method "
        << info()->function()->debug_name()->ToCString().get()
        << " using Turbofan" << std::endl;
-    PrintCompilationStart();
+    TurboCfgFile tcf(isolate());
+    tcf << AsC1VCompilation(info());
   }
 
   // Build the graph.
@@ -448,8 +425,8 @@ Handle<Code> Pipeline::GenerateCode(PipelineStatistics* pipeline_statistics,
     OFStream os(stdout);
     os << "----- Instruction sequence before register allocation -----\n"
        << sequence;
-    PrintScheduleAndInstructions("CodeGen", schedule, source_positions,
-                                 &sequence);
+    TurboCfgFile tcf(isolate());
+    tcf << AsC1V("CodeGen", schedule, source_positions, &sequence);
   }
 
   // Allocate registers.
@@ -468,7 +445,8 @@ Handle<Code> Pipeline::GenerateCode(PipelineStatistics* pipeline_statistics,
       return Handle<Code>::null();
     }
     if (FLAG_trace_turbo) {
-      PrintAllocator("CodeGen", &allocator);
+      TurboCfgFile tcf(isolate());
+      tcf << AsC1VAllocator("CodeGen", &allocator);
     }
   }
 
index 5bd0e61..f81854e 100644 (file)
@@ -5,8 +5,6 @@
 #ifndef V8_COMPILER_PIPELINE_H_
 #define V8_COMPILER_PIPELINE_H_
 
-#include <fstream>  // NOLINT(readability/streams)
-
 #include "src/v8.h"
 
 #include "src/compiler.h"
@@ -54,12 +52,6 @@ class Pipeline {
   Zone* zone() { return info_->zone(); }
 
   Schedule* ComputeSchedule(ZonePool* zone_pool, Graph* graph);
-  void OpenTurboCfgFile(std::ofstream* stream);
-  void PrintCompilationStart();
-  void PrintScheduleAndInstructions(const char* phase, const Schedule* schedule,
-                                    const SourcePositionTable* positions,
-                                    const InstructionSequence* instructions);
-  void PrintAllocator(const char* phase, const RegisterAllocator* allocator);
   void VerifyAndPrintGraph(Graph* graph, const char* phase,
                            bool untyped = false);
   Handle<Code> GenerateCode(PipelineStatistics* pipeline_statistics,
index 849ab8c..11ef95f 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <fstream>  // NOLINT(readability/streams)
 #include <iostream>  // NOLINT(readability/streams)
+#include <sstream>
 
 #include "src/v8.h"
 
@@ -1955,12 +1956,8 @@ bool Isolate::Init(Deserializer* des) {
   if (!create_heap_objects) Assembler::QuietNaN(heap_.nan_value());
 
   if (FLAG_trace_turbo) {
-    // Erase the file.
-    char buffer[512];
-    Vector<char> filename(buffer, sizeof(buffer));
-    GetTurboCfgFileName(filename);
-    std::ofstream turbo_cfg_stream(filename.start(),
-                                   std::fstream::out | std::fstream::trunc);
+    // Create an empty file.
+    std::ofstream(GetTurboCfgFileName().c_str(), std::ios_base::trunc);
   }
 
   // If we are deserializing, log non-function code objects and compiled
@@ -2377,12 +2374,13 @@ BasicBlockProfiler* Isolate::GetOrCreateBasicBlockProfiler() {
 }
 
 
-void Isolate::GetTurboCfgFileName(Vector<char> filename) {
+std::string Isolate::GetTurboCfgFileName() {
   if (FLAG_trace_turbo_cfg_file == NULL) {
-    SNPrintF(filename, "turbo-%d-%d.cfg", base::OS::GetCurrentProcessId(),
-             id());
+    std::ostringstream os;
+    os << "turbo-" << base::OS::GetCurrentProcessId() << "-" << id() << ".cfg";
+    return os.str();
   } else {
-    StrNCpy(filename, FLAG_trace_turbo_cfg_file, filename.length());
+    return FLAG_trace_turbo_cfg_file;
   }
 }
 
index 0ede08f..06bd47a 100644 (file)
@@ -1099,7 +1099,7 @@ class Isolate {
 
   static Isolate* NewForTesting() { return new Isolate(false); }
 
-  void GetTurboCfgFileName(Vector<char> buffer);
+  std::string GetTurboCfgFileName();
 
  private:
   explicit Isolate(bool enable_serializer);