From: Mikhail Glushenkov Date: Tue, 6 May 2008 18:15:35 +0000 (+0000) Subject: Refactoring: split the function CompilationGraph::Build() into two parts. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=4c11a62d695d000260b41c80091dbec5683ff402;p=oota-llvm.git Refactoring: split the function CompilationGraph::Build() into two parts. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50760 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/llvmc2/CompilationGraph.cpp b/tools/llvmc2/CompilationGraph.cpp index f5cefbf0a90..4513d4a19ad 100644 --- a/tools/llvmc2/CompilationGraph.cpp +++ b/tools/llvmc2/CompilationGraph.cpp @@ -245,12 +245,11 @@ FindToolChain(const sys::Path& In, const std::string* forceLanguage, return &getNode(ChooseEdge(TV, InLangs)->ToolName()); } -// Build the targets. Command-line options are passed through -// temporary variables. -int CompilationGraph::Build (const sys::Path& TempDir) { - - InputLanguagesSet InLangs; - +// Helper function used by Build(). +// Traverses initial portions of the toolchains (up to the first Join node). +// This function is also responsible for handling the -x option. +void CompilationGraph::BuildInitial (InputLanguagesSet& InLangs, + const sys::Path& TempDir) { // This is related to -x option handling. cl::list::const_iterator xIter = Languages.begin(), xBegin = xIter, xEnd = Languages.end(); @@ -303,6 +302,16 @@ int CompilationGraph::Build (const sys::Path& TempDir) { // Pass file through the chain starting at head. PassThroughGraph(In, N, InLangs, TempDir); } +} + +// Build the targets. Command-line options are passed through +// temporary variables. +int CompilationGraph::Build (const sys::Path& TempDir) { + + InputLanguagesSet InLangs; + + // Traverse initial parts of the toolchains and fill in InLangs. + BuildInitial(InLangs, TempDir); std::vector JTV; TopologicalSortFilterJoinNodes(JTV); diff --git a/tools/llvmc2/CompilationGraph.h b/tools/llvmc2/CompilationGraph.h index 1158d8df1d8..57deef30a5c 100644 --- a/tools/llvmc2/CompilationGraph.h +++ b/tools/llvmc2/CompilationGraph.h @@ -20,17 +20,16 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/iterator" -//#include "llvm/ADT/SmallSet.h" +#include "llvm/ADT/SmallSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" #include "llvm/System/Path.h" -#include #include namespace llvmc { - typedef std::set InputLanguagesSet; + typedef llvm::SmallSet InputLanguagesSet; // An edge of the compilation graph. class Edge : public llvm::RefCountedBaseVPTR { @@ -162,7 +161,7 @@ namespace llvmc { // the given language name. Throws std::runtime_error. const tools_vector_type& getToolsVector(const std::string& LangName) const; - // Pass the input file through the toolchain. + // Pass the input file through the toolchain starting at StartNode. void PassThroughGraph (const llvm::sys::Path& In, const Node* StartNode, const InputLanguagesSet& InLangs, const llvm::sys::Path& TempDir) const; @@ -172,6 +171,10 @@ namespace llvmc { const std::string* forceLanguage, InputLanguagesSet& InLangs) const; + // Traverse the initial parts of the toolchains. + void BuildInitial(InputLanguagesSet& InLangs, + const llvm::sys::Path& TempDir); + // Sort the nodes in topological order. void TopologicalSort(std::vector& Out); // Call TopologicalSort and filter the resulting list to include