1. 09 9月, 2021 1 次提交
  2. 08 9月, 2021 2 次提交
  3. 31 8月, 2021 2 次提交
  4. 26 8月, 2021 4 次提交
  5. 18 8月, 2021 1 次提交
  6. 15 7月, 2021 2 次提交
  7. 04 7月, 2021 1 次提交
  8. 22 6月, 2021 1 次提交
  9. 07 6月, 2021 1 次提交
  10. 02 6月, 2021 1 次提交
  11. 11 5月, 2021 1 次提交
  12. 08 5月, 2021 1 次提交
  13. 02 5月, 2021 2 次提交
  14. 21 4月, 2021 1 次提交
  15. 20 4月, 2021 2 次提交
  16. 19 4月, 2021 1 次提交
  17. 06 4月, 2021 1 次提交
  18. 03 4月, 2021 2 次提交
  19. 31 3月, 2021 1 次提交
  20. 28 3月, 2021 1 次提交
  21. 27 3月, 2021 1 次提交
  22. 20 3月, 2021 1 次提交
    • R
      coverage bug fixes and optimization support · bcf75556
      Rich Kadel 提交于
      Adjusted LLVM codegen for code compiled with `-Zinstrument-coverage` to
      address multiple, somewhat related issues.
      
      Fixed a significant flaw in prior coverage solution: Every counter
      generated a new counter variable, but there should have only been one
      counter variable per function. This appears to have bloated .profraw
      files significantly. (For a small program, it increased the size by
      about 40%. I have not tested large programs, but there is anecdotal
      evidence that profraw files were way too large. This is a good fix,
      regardless, but hopefully it also addresses related issues.
      
      Fixes: #82144
      
      Invalid LLVM coverage data produced when compiled with -C opt-level=1
      
      Existing tests now work up to at least `opt-level=3`. This required a
      detailed analysis of the LLVM IR, comparisons with Clang C++ LLVM IR
      when compiled with coverage, and a lot of trial and error with codegen
      adjustments.
      
      The biggest hurdle was figuring out how to continue to support coverage
      results for unused functions and generics. Rust's coverage results have
      three advantages over Clang's coverage results:
      
      1. Rust's coverage map does not include any overlapping code regions,
         making coverage counting unambiguous.
      2. Rust generates coverage results (showing zero counts) for all unused
         functions, including generics. (Clang does not generate coverage for
         uninstantiated template functions.)
      3. Rust's unused functions produce minimal stubbed functions in LLVM IR,
         sufficient for including in the coverage results; while Clang must
         generate the complete LLVM IR for each unused function, even though
         it will never be called.
      
      This PR removes the previous hack of attempting to inject coverage into
      some other existing function instance, and generates dedicated instances
      for each unused function. This change, and a few other adjustments
      (similar to what is required for `-C link-dead-code`, but with lower
      impact), makes it possible to support LLVM optimizations.
      
      Fixes: #79651
      
      Coverage report: "Unexecuted instantiation:..." for a generic function
      from multiple crates
      
      Fixed by removing the aforementioned hack. Some "Unexecuted
      instantiation" notices are unavoidable, as explained in the
      `used_crate.rs` test, but `-Zinstrument-coverage` has new options to
      back off support for either unused generics, or all unused functions,
      which avoids the notice, at the cost of less coverage of unused
      functions.
      
      Fixes: #82875
      
      Invalid LLVM coverage data produced with crate brotli_decompressor
      
      Fixed by disabling the LLVM function attribute that forces inlining, if
      `-Z instrument-coverage` is enabled. This attribute is applied to
      Rust functions with `#[inline(always)], and in some cases, the forced
      inlining breaks coverage instrumentation and reports.
      bcf75556
  23. 15 3月, 2021 2 次提交
  24. 12 3月, 2021 3 次提交
  25. 10 3月, 2021 4 次提交
    • K
      Switch to changing cp_non_overlap in tform · 217ff6b7
      kadmin 提交于
      It was suggested to lower this in MIR instead of ssa, so do that instead.
      217ff6b7
    • K
      Update cranelift · 982382dc
      kadmin 提交于
      982382dc
    • K
      Update match branches · 89f45ed9
      kadmin 提交于
      This updates all places where match branches check on StatementKind or UseContext.
      This doesn't properly implement them, but adds TODOs where they are, and also adds some best
      guesses to what they should be in some cases.
      89f45ed9
    • K
      Update fmt and use of memcpy · 72c734d0
      kadmin 提交于
      I'm still not totally sure if this is the right way to implement the memcpy, but that portion
      compiles correctly now. Now to fix the compile errors everywhere else :).
      72c734d0