Skip to content
  1. Nov 15, 2013
  2. Nov 14, 2013
    • NAKAMURA Takumi's avatar
      IR/GCOV.cpp: Use PRIu64 as format string with uint64_t. · 3241dc42
      NAKAMURA Takumi authored
      llvm-svn: 194693
      3241dc42
    • NAKAMURA Takumi's avatar
      Whitespace. · 3b55196b
      NAKAMURA Takumi authored
      llvm-svn: 194692
      3b55196b
    • Yuchen Wu's avatar
      llvm-cov: Slightly improved error checking. · 7981f5b8
      Yuchen Wu authored
      - readInt() should check all 4 bytes can be read, not just 1.
      - In the event of false data in the gcno file, it was possible to index
        into a non-existent index of SmallVector, causing assertion error.
      
      llvm-svn: 194639
      7981f5b8
    • Yuchen Wu's avatar
      llvm-cov: Removed StringMap holding GCOVLines. · d738beec
      Yuchen Wu authored
      According to the hazy gcov documentation, it appeared to be technically
      possible for lines within a block to belong to different source files.
      However, upon further investigation, gcov does not actually support
      multiple source files for a single block.
      
      This change removes a level of separation between blocks and lines by
      replacing the StringMap of GCOVLines with a SmallVector of ints
      representing line numbers. This also means that the GCOVLines class is
      no longer needed.
      
      This paves the way for supporting the "-a" option, which will output
      block information.
      
      llvm-svn: 194637
      d738beec
    • Yuchen Wu's avatar
      llvm-cov: Replaced asserts with proper error handling. · e28da84c
      Yuchen Wu authored
      Unified the interface for read functions. They all return a boolean
      indicating if the read from file succeeded. Functions that previously
      returned the read value now store it into a variable that is passed in
      by reference instead. Callers will need to check the return value to
      detect if an error occurred.
      
      Also added a new test which ensures that no assertions occur when file
      contains invalid data. llvm-cov should return with error code 1 upon
      failure.
      
      llvm-svn: 194635
      e28da84c
  3. Nov 13, 2013
    • Rafael Espindola's avatar
      Don't call doFinalization from verifyFunction. · 156227ac
      Rafael Espindola authored
      verifyFunction needs to call doInitialization to collect metadata and avoid
      crashing when verifying debug info in a function.
      
      But it should not call doFinalization since that is where the verifier will
      check declarations, variables and aliases, which is not desirable when one
      only wants to verify a function.
      
      A possible cleanup would be to split the class into a ModuleVerifier and
      FunctionVerifier.
      
      Issue reported by Ilia Filippov. Patch by Michael Kruse.
      
      llvm-svn: 194574
      156227ac
    • Chandler Carruth's avatar
      Introduce an AnalysisManager which is like a pass manager but with a lot · 74015a70
      Chandler Carruth authored
      more smarts in it. This is where most of the interesting logic that used
      to live in the implicit-scheduling-hackery of the old pass manager will
      live.
      
      Like the previous commits, note that this is a very early prototype!
      I expect substantial changes before this is ready to use.
      
      The core of the design is the following:
      
      - We have an AnalysisManager which can be used across a series of
        passes over a module.
      - The code setting up a pass pipeline registers the analyses available
        with the manager.
      - Individual transform passes can check than an analysis manager
        provides the analyses they require in order to fail-fast.
      - There is *no* implicit registration or scheduling.
      - Analysis passes are different from other passes: they produce an
        analysis result that is cached and made available via the analysis
        manager.
      - Cached results are invalidated automatically by the pass managers.
      - When a transform pass requests an analysis result, either the analysis
        is run to produce the result or a cached result is provided.
      
      There are a few aspects of this design that I *know* will change in
      subsequent commits:
      - Currently there is no "preservation" system, that needs to be added.
      - All of the analysis management should move up to the analysis library.
      - The analysis management needs to support at least SCC passes. Maybe
        loop passes. Living in the analysis library will facilitate this.
      - Need support for analyses which are *both* module and function passes.
      - Need support for pro-actively running module analyses to have cached
        results within a function pass manager.
      - Need a clear design for "immutable" passes.
      - Need support for requesting cached results when available and not
        re-running the pass even if that would be necessary.
      - Need more thorough testing of all of this infrastructure.
      
      There are other aspects that I view as open questions I'm hoping to
      resolve as I iterate a bit on the infrastructure, and especially as
      I start writing actual passes against this.
      - Should we have separate management layers for function, module, and
        SCC analyses? I think "yes", but I'm not yet ready to switch the code.
        Adding SCC support will likely resolve this definitively.
      - How should the 'require' functionality work? Should *that* be the only
        way to request results to ensure that passes always require things?
      - How should preservation work?
      - Probably some other things I'm forgetting. =]
      
      Look forward to more patches in shorter order now that this is in place.
      
      llvm-svn: 194538
      74015a70
  4. Nov 11, 2013
  5. Nov 10, 2013
  6. Nov 09, 2013
    • Chandler Carruth's avatar
      Move the old pass manager infrastructure into a legacy namespace and · 7caea415
      Chandler Carruth authored
      give the files a legacy prefix in the right directory. Use forwarding
      headers in the old locations to paper over the name change for most
      clients during the transitional period.
      
      No functionality changed here! This is just clearing some space to
      reduce renaming churn later on with a new system.
      
      Even when the new stuff starts to go in, it is going to be hidden behind
      a flag and off-by-default as it is still WIP and under development.
      
      This patch is specifically designed so that very little out-of-tree code
      has to change. I'm going to work as hard as I can to keep that the case.
      Only direct forward declarations of the PassManager class are impacted
      by this change.
      
      llvm-svn: 194324
      7caea415
  7. Nov 08, 2013
  8. Nov 07, 2013
    • David Majnemer's avatar
      IR: Properly canonicalize PointerType in ConstantExpr GEPs · d3d140da
      David Majnemer authored
      No additional test was needed, Other/constant-fold-gep.ll detects this
      just fine.
      
      llvm-svn: 194221
      d3d140da
    • David Majnemer's avatar
      IR: Do not canonicalize constant GEPs into an out-of-bounds array access · bd4fef4a
      David Majnemer authored
      Summary:
      Consider a GEP of:
      i8* getelementptr ({ [2 x i8], i32, i8, [3 x i8] }* @main.c, i32 0, i32 0, i64 0)
      
      If we proceeded to GEP the aforementioned object by 8, would form a GEP of:
      i8* getelementptr ({ [2 x i8], i32, i8, [3 x i8] }* @main.c, i32 0, i32 0, i64 8)
      
      Note that we would go through the first array member, causing an
      out-of-bounds accesses.  This is problematic because we might get fooled
      if we are trying to evaluate loads using this GEP, for example, based
      off of an object with a constant initializer where the array is zero.
      
      This fixes PR17732.
      
      Reviewers: nicholas, chandlerc, void
      
      Reviewed By: void
      
      CC: llvm-commits, echristo, void, aemerson
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D2093
      
      llvm-svn: 194220
      bd4fef4a
  9. Nov 06, 2013
  10. Nov 05, 2013
  11. Nov 02, 2013
  12. Nov 01, 2013
    • Rafael Espindola's avatar
      Remove linkonce_odr_auto_hide. · 716e7405
      Rafael Espindola authored
      linkonce_odr_auto_hide was in incomplete attempt to implement a way
      for the linker to hide symbols that are known to be available in every
      TU and whose addresses are not relevant for a particular DSO.
      
      It was redundant in that it all its uses are equivalent to
      linkonce_odr+unnamed_addr. Unlike those, it has never been connected
      to clang or llvm's optimizers, so it was effectively dead.
      
      Given that nothing produces it, this patch just nukes it
      (other than the llvm-c enum value).
      
      llvm-svn: 193865
      716e7405
  13. Oct 31, 2013
  14. Oct 30, 2013
    • Rafael Espindola's avatar
      Add calls to doInitialization() and doFinalization() in verifyFunction() · 55fdcff4
      Rafael Espindola authored
      The function verifyFunction() in lib/IR/Verifier.cpp misses some
      calls. It creates a temporary FunctionPassManager that will run a
      single Verifier pass. Unfortunately, FunctionPassManager is no
      PassManager and does not call doInitialization() and doFinalization()
      by itself. Verifier does important tasks in doInitialization() such as
      collecting type information used to check DebugInfo metadata and
      doFinalization() does some additional checks. Therefore these checks
      were missed and debug info couldn't be verified at all, it just
      crashed if the function had some.
      
      verifyFunction() is currently not used in llvm unless -debug option is
      enabled, and in unittests/IR/VerifierTest.cpp
      
      VerifierTest had to be changed to create the function in a module from
      which the type debug info can be collected.
      
      Patch by Michael Kruse.
      
      llvm-svn: 193719
      55fdcff4
  15. Oct 29, 2013
  16. Oct 27, 2013
  17. Oct 25, 2013
    • Yuchen Wu's avatar
      llvm-cov dump to dbgs() instead of outs(). · 03678157
      Yuchen Wu authored
      llvm-svn: 193390
      03678157
    • Yuchen Wu's avatar
      Support for reading program counts in llvm-cov. · 14ae8e61
      Yuchen Wu authored
      llvm-cov will now be able to read program counts from the GCDA file and
      output it in the same format as gcov. The program summary tag was
      identified from gcov-io.h as "\0\0\0\a3".
      
      There is currently a bug in GCOVProfiling.cpp which does not generate
      the
      run- or program-counting IR, so this change was tested manually by
      modifying the GCDA file and comparing the gcov and llvm-cov outputs.
      
      llvm-svn: 193389
      14ae8e61
  18. Oct 24, 2013
    • Yuchen Wu's avatar
      Fixed llvm-cov to count edges instead of blocks. · 887c20ff
      Yuchen Wu authored
      This was a fundamental flaw in llvm-cov where it treated the values in
      the GCDA files as block counts instead of edge counts. This created
      incorrect line counts when branching was present. Instead, the edge
      counts should be summed to obtain the correct block count.
      
      The fix was tested using custom test files as well as single source
      files from the test-suite directory. The behaviour can be verified by
      reading the GCOV documentation that describes the GCDA spec ("ARC_COUNTS
      gives the counter values for those arcs that are instrumented") and the
      header description provided by GCOVProfiling.cpp ("instruments the code
      that runs to records (sic) the edges between blocks that run and emit a
      complementary "gcda" file on exit").
      
      llvm-svn: 193299
      887c20ff
  19. Oct 23, 2013
    • Yuchen Wu's avatar
      Use a map instead of vector to store line counts. · 48342ee9
      Yuchen Wu authored
      There are a few motivations for this:
      - Using a map allows for checking if line is in map. This differentiates
        unexecutable lines (such as comments) from unexecuted logical lines of
        code. "#####" is now outputted in this case, in line with gcov.
      - Source files are no longer read in twice: once when storing the line
        counts, and once when outputting the data.
      - Greatly simplifies the function FileInfo::addLineCount().
      
      llvm-svn: 193264
      48342ee9
    • Shuxin Yang's avatar
      Use address-taken to disambiguate global variable and indirect memops. · e4fb3759
      Shuxin Yang authored
       Major steps include:
       1). introduces a not-addr-taken bit-field in GlobalVariable
       2). GlobalOpt pass sets "not-address-taken" if it proves a global varirable 
          dosen't have its address taken.
       3). AA use this info for disambiguation. 
      
      llvm-svn: 193251
      e4fb3759
    • Yuchen Wu's avatar
      Test commit. Added whitespace in GCOV.cpp. · fce33969
      Yuchen Wu authored
      llvm-svn: 193224
      fce33969
  20. Oct 22, 2013
Loading