Skip to content
Snippets Groups Projects
  1. Feb 19, 2014
  2. Feb 18, 2014
  3. Feb 17, 2014
    • Richard Smith's avatar
      40de6503
    • Bob Wilson's avatar
      Change PGO instrumentation to compute counts in a separate AST traversal. · ac14efa5
      Bob Wilson authored
      Previously, we made one traversal of the AST prior to codegen to assign
      counters to the ASTs and then propagated the count values during codegen. This
      patch now adds a separate AST traversal prior to codegen for the
      -fprofile-instr-use option to propagate the count values. The counts are then
      saved in a map from which they can be retrieved during codegen.
      
      This new approach has several advantages:
      
      1. It gets rid of a lot of extra PGO-related code that had previously been
      added to codegen.
      
      2. It fixes a serious bug. My original implementation (which was mailed to the
      list but never committed) used 3 counters for every loop. Justin improved it to
      move 2 of those counters into the less-frequently executed breaks and continues,
      but that turned out to produce wrong count values in some cases. The solution
      requires visiting a loop body before the condition so that the count for the
      condition properly includes the break and continue counts. Changing codegen to
      visit a loop body first would be a fairly invasive change, but with a separate
      AST traversal, it is easy to control the order of traversal. I've added a
      testcase (provided by Justin) to make sure this works correctly.
      
      3. It improves the instrumentation overhead, reducing the number of counters for
      a loop from 3 to 1. We no longer need dedicated counters for breaks and
      continues, since we can just use the propagated count values when visiting
      breaks and continues.
      
      To make this work, I needed to make a change to the way we count case
      statements, going back to my original approach of not including the fall-through
      in the counter values. This was necessary because there isn't always an AST node
      that can be used to record the fall-through count. Now case statements are
      handled the same as default statements, with the fall-through paths branching
      over the counter increments.  While I was at it, I also went back to using this
      approach for do-loops -- omitting the fall-through count into the loop body
      simplifies some of the calculations and make them behave the same as other
      loops. Whenever we start using this instrumentation for coverage, we'll need
      to add the fall-through counts into the counter values.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201528 91177308-0d34-0410-b5e6-96231b3b80d8
      ac14efa5
    • Bob Wilson's avatar
      Some nitpicky comment fixes for "i.e." and "e.g." abbreviations. · 0cc307f8
      Bob Wilson authored
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201527 91177308-0d34-0410-b5e6-96231b3b80d8
      0cc307f8
    • Bob Wilson's avatar
      Fix some minor whitespace issues. · 7b6f634b
      Bob Wilson authored
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201526 91177308-0d34-0410-b5e6-96231b3b80d8
      7b6f634b
    • Anton Yartsev's avatar
      [analyzer] Improved checker naming in CFG dump. · 48e74b6e
      Anton Yartsev authored
      This implements FIXME from Checker.cpp (FIXME: We want to return the package + name of the checker here.) and replaces hardcoded checker names with the new ones obtained via getCheckName().getName().
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201525 91177308-0d34-0410-b5e6-96231b3b80d8
      48e74b6e
Loading