Skip to content
  1. Feb 18, 2014
    • Duncan P. N. Exon Smith's avatar
      PGO: llvm-profdata: tool for merging profiles · 846a627f
      Duncan P. N. Exon Smith authored
      Introducing llvm-profdata, a tool for merging profile data generated by
      PGO instrumentation in clang.
      
      - The name indicates a file extension of <name>.profdata.  Eventually
        profile data output by clang should be changed to that extension.
      
      - llvm-profdata merges two profiles.  However, the name is more general,
        since it will likely pick up more tasks (such as summarizing a single
        profile).
      
      - llvm-profdata parses the current text-based format, but will be
        updated once we settle on a binary format.
      
      <rdar://problem/15949645>
      
      llvm-svn: 201535
      846a627f
  2. Feb 13, 2014
  3. Feb 12, 2014
  4. Feb 11, 2014
  5. Feb 10, 2014
  6. Feb 09, 2014
  7. Feb 06, 2014
    • Chandler Carruth's avatar
      [PM] Add a new "lazy" call graph analysis pass for the new pass manager. · bf71a34e
      Chandler Carruth authored
      The primary motivation for this pass is to separate the call graph
      analysis used by the new pass manager's CGSCC pass management from the
      existing call graph analysis pass. That analysis pass is (somewhat
      unfortunately) over-constrained by the existing CallGraphSCCPassManager
      requirements. Those requirements make it *really* hard to cleanly layer
      the needed functionality for the new pass manager on top of the existing
      analysis.
      
      However, there are also a bunch of things that the pass manager would
      specifically benefit from doing differently from the existing call graph
      analysis, and this new implementation tries to address several of them:
      
      - Be lazy about scanning function definitions. The existing pass eagerly
        scans the entire module to build the initial graph. This new pass is
        significantly more lazy, and I plan to push this even further to
        maximize locality during CGSCC walks.
      - Don't use a single synthetic node to partition functions with an
        indirect call from functions whose address is taken. This node creates
        a huge choke-point which would preclude good parallelization across
        the fanout of the SCC graph when we got to the point of looking at
        such changes to LLVM.
      - Use a memory dense and lightweight representation of the call graph
        rather than value handles and tracking call instructions. This will
        require explicit update calls instead of some updates working
        transparently, but should end up being significantly more efficient.
        The explicit update calls ended up being needed in many cases for the
        existing call graph so we don't really lose anything.
      - Doesn't explicitly model SCCs and thus doesn't provide an "identity"
        for an SCC which is stable across updates. This is essential for the
        new pass manager to work correctly.
      - Only form the graph necessary for traversing all of the functions in
        an SCC friendly order. This is a much simpler graph structure and
        should be more memory dense. It does limit the ways in which it is
        appropriate to use this analysis. I wish I had a better name than
        "call graph". I've commented extensively this aspect.
      
      This is still very much a WIP, in fact it is really just the initial
      bits. But it is about the fourth version of the initial bits that I've
      implemented with each of the others running into really frustrating
      problms. This looks like it will actually work and I'd like to split the
      actual complexity across commits for the sake of my reviewers. =] The
      rest of the implementation along with lots of wiring will follow
      somewhat more rapidly now that there is a good path forward.
      
      Naturally, this doesn't impact any of the existing optimizer. This code
      is specific to the new pass manager.
      
      A bunch of thanks are deserved for the various folks that have helped
      with the design of this, especially Nick Lewycky who actually sat with
      me to go through the fundamentals of the final version here.
      
      llvm-svn: 200903
      bf71a34e
    • Chandler Carruth's avatar
      [PM] Back out one hunk of the patch in r200901 that was *supposed* to go · e309d376
      Chandler Carruth authored
      in my next patch. Sorry for the breakage.
      
      llvm-svn: 200902
      e309d376
    • Chandler Carruth's avatar
      [PM] Wire up the analysis managers in the opt driver. This isn't really · c68d0824
      Chandler Carruth authored
      necessary until we add analyses to the driver, but I have such an
      analysis ready and wanted to split this out. This is actually exercised
      by the existing tests of the new pass manager as the analysis managers
      are cross-checked and validated by the function and module managers.
      
      llvm-svn: 200901
      c68d0824
  8. Feb 05, 2014
  9. Feb 04, 2014
    • Duncan P. N. Exon Smith's avatar
      cleanup: scc_iterator consumers should use isAtEnd · 8e661efc
      Duncan P. N. Exon Smith authored
      No functional change.  Updated loops from:
      
          for (I = scc_begin(), E = scc_end(); I != E; ++I)
      
      to:
      
          for (I = scc_begin(); !I.isAtEnd(); ++I)
      
      for teh win.
      
      llvm-svn: 200789
      8e661efc
    • Justin Bogner's avatar
      llvm-cov: Implement the preserve-paths flag · c6af3506
      Justin Bogner authored
      Until now, when a path in a gcno file included a directory, we would
      emit our .gcov file in that directory, whereas gcov always emits the
      file in the current directory. In doing so, this implements gcov's
      strange name-mangling -p flag, which is needed to avoid clobbering
      files when two with the same name exist in different directories.
      
      The path mangling is a bit ugly and only handles unix-like paths, but
      it's simple, and it doesn't make any guesses as to how it should
      behave outside of what gcov documents. If we decide this should be
      cross platform later, we can consider the compatibility implications
      then.
      
      llvm-svn: 200754
      c6af3506
    • Justin Bogner's avatar
      llvm-cov: Implement the object-directory flag · f69557e6
      Justin Bogner authored
      llvm-svn: 200741
      f69557e6
    • Justin Bogner's avatar
      llvm-cov: Ignore missing .gcda files · 93d1edbb
      Justin Bogner authored
      When gcov is run without gcda data, it acts as if the counts are all
      zero and labels the file as - to indicate that there was no data. We
      should do the same.
      
      llvm-svn: 200740
      93d1edbb
    • Rafael Espindola's avatar
      Move error handling down to getSymbolNMTypeChar. · 7437589f
      Rafael Espindola authored
      llvm-svn: 200727
      7437589f
  10. Jan 31, 2014
  11. Jan 30, 2014
  12. Jan 29, 2014
    • Justin Bogner's avatar
      llvm-cov: Accept the long forms of gcov options · b3569586
      Justin Bogner authored
      This is a bit imperfect, as these options don't show up in the help as
      is and single dash variants are accepted, which differs from gcov.
      Unfortunately, this seems to be as good as it gets with the cl::opt
      machinery, so it'll do as an incremental step.
      
      llvm-svn: 200419
      b3569586
    • Justin Bogner's avatar
      llvm-cov: Improve help message text · 84e7a35c
      Justin Bogner authored
      This Properly capitalizes and clarifies the help output from
      llvm-cov. It also puts the llvm-only / non-gcov-compatible options in
      their own category.
      
      llvm-svn: 200418
      84e7a35c
    • Justin Bogner's avatar
      llvm-cov: Expect a source file as a positional parameter · a99a3902
      Justin Bogner authored
      Currently, llvm-cov isn't command-line compatible with gcov, which
      accepts a source file name as its first parameter and infers the gcno
      and gcda file names from that. This change keeps our -gcda and -gcno
      options available for convenience in overriding this behaviour, but
      adds the required parameter and inference behaviour as a compatible
      default.
      
      llvm-svn: 200417
      a99a3902
Loading