diff options
Diffstat (limited to 'lib/CompilerDriver/CompilationGraph.cpp')
| -rw-r--r-- | lib/CompilerDriver/CompilationGraph.cpp | 66 | 
1 files changed, 40 insertions, 26 deletions
diff --git a/lib/CompilerDriver/CompilationGraph.cpp b/lib/CompilerDriver/CompilationGraph.cpp index d0c0e15bcdb7..33c6566499b8 100644 --- a/lib/CompilerDriver/CompilationGraph.cpp +++ b/lib/CompilerDriver/CompilationGraph.cpp @@ -32,7 +32,8 @@ using namespace llvmc;  namespace llvmc {    const std::string* LanguageMap::GetLanguage(const sys::Path& File) const { -    StringRef suf = File.getSuffix(); +    // Remove the '.'. +    StringRef suf = sys::path::extension(File.str()).substr(1);      LanguageMap::const_iterator Lang =        this->find(suf.empty() ? "*empty*" : suf);      if (Lang == this->end()) { @@ -218,10 +219,11 @@ FindToolChain(const sys::Path& In, const std::string* ForceLanguage,                InputLanguagesSet& InLangs, const LanguageMap& LangMap) const {    // Determine the input language. -  const std::string* InLang = LangMap.GetLanguage(In); +  const std::string* InLang = (ForceLanguage ? ForceLanguage +                               : LangMap.GetLanguage(In));    if (InLang == 0)      return 0; -  const std::string& InLanguage = (ForceLanguage ? *ForceLanguage : *InLang); +  const std::string& InLanguage = *InLang;    // Add the current input language to the input language set.    InLangs.insert(InLanguage); @@ -439,13 +441,17 @@ int CompilationGraph::CheckLanguageNames() const {            continue;          } -        const char* OutLang = N1.ToolPtr->OutputLanguage(); +        const char** OutLangs = N1.ToolPtr->OutputLanguages();          const char** InLangs = N2->ToolPtr->InputLanguages();          bool eq = false; -        for (;*InLangs; ++InLangs) { -          if (std::strcmp(OutLang, *InLangs) == 0) { -            eq = true; -            break; +        const char* OutLang = 0; +        for (;*OutLangs; ++OutLangs) { +          OutLang = *OutLangs; +          for (;*InLangs; ++InLangs) { +            if (std::strcmp(OutLang, *InLangs) == 0) { +              eq = true; +              break; +            }            }          } @@ -480,7 +486,7 @@ int CompilationGraph::CheckMultipleDefaultEdges() const {    for (const_nodes_iterator B = this->NodesMap.begin(),           E = this->NodesMap.end(); B != E; ++B) {      const Node& N = B->second; -    int MaxWeight = 0; +    int MaxWeight = -1024;      // Ignore the root node.      if (!N.ToolPtr) @@ -572,6 +578,26 @@ int CompilationGraph::Check () {  // Code related to graph visualization. +namespace { + +std::string SquashStrArray (const char** StrArr) { +  std::string ret; + +  for (; *StrArr; ++StrArr) { +    if (*(StrArr + 1)) { +      ret += *StrArr; +      ret +=  ", "; +    } +    else { +      ret += *StrArr; +    } +  } + +  return ret; +} + +} // End anonymous namespace. +  namespace llvm {    template <>    struct DOTGraphTraits<llvmc::CompilationGraph*> @@ -586,7 +612,8 @@ namespace llvm {          if (N->ToolPtr->IsJoin())            return N->Name() + "\n (join" +              (N->HasChildren() ? ")" -             : std::string(": ") + N->ToolPtr->OutputLanguage() + ')'); +             : std::string(": ") + +             SquashStrArray(N->ToolPtr->OutputLanguages()) + ')');          else            return N->Name();        else @@ -596,28 +623,15 @@ namespace llvm {      template<typename EdgeIter>      static std::string getEdgeSourceLabel(const Node* N, EdgeIter I) {        if (N->ToolPtr) { -        return N->ToolPtr->OutputLanguage(); +        return SquashStrArray(N->ToolPtr->OutputLanguages());        }        else { -        const char** InLangs = I->ToolPtr->InputLanguages(); -        std::string ret; - -        for (; *InLangs; ++InLangs) { -          if (*(InLangs + 1)) { -            ret += *InLangs; -            ret +=  ", "; -          } -          else { -            ret += *InLangs; -          } -        } - -        return ret; +        return SquashStrArray(I->ToolPtr->InputLanguages());        }      }    }; -} +} // End namespace llvm  int CompilationGraph::writeGraph(const std::string& OutputFilename) {    std::string ErrorInfo;  | 
