1. 19 4月, 2021 1 次提交
  2. 06 4月, 2021 1 次提交
  3. 03 4月, 2021 2 次提交
  4. 31 3月, 2021 1 次提交
  5. 28 3月, 2021 1 次提交
  6. 27 3月, 2021 1 次提交
  7. 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
  8. 15 3月, 2021 2 次提交
  9. 12 3月, 2021 3 次提交
  10. 10 3月, 2021 5 次提交
    • 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
    • K
      Impl StatementKind::CopyNonOverlapping · 0fdc07e1
      kadmin 提交于
      0fdc07e1
  11. 07 3月, 2021 1 次提交
    • H
      Change x64 size checks to not apply to x32. · 95e096d6
      Harald van Dijk 提交于
      Rust contains various size checks conditional on target_arch = "x86_64",
      but these checks were never intended to apply to
      x86_64-unknown-linux-gnux32. Add target_pointer_width = "64" to the
      conditions.
      95e096d6
  12. 05 3月, 2021 1 次提交
  13. 04 3月, 2021 1 次提交
  14. 01 3月, 2021 1 次提交
  15. 26 2月, 2021 1 次提交
  16. 23 2月, 2021 1 次提交
  17. 22 2月, 2021 1 次提交
  18. 16 2月, 2021 1 次提交
  19. 14 2月, 2021 1 次提交
  20. 02 2月, 2021 1 次提交
  21. 18 1月, 2021 1 次提交
  22. 03 1月, 2021 1 次提交
  23. 20 12月, 2020 1 次提交
  24. 07 12月, 2020 1 次提交
    • W
      [mir-opt] Allow debuginfo to be generated for a constant or a Place · 01aec8d1
      Wesley Wiser 提交于
      Prior to this commit, debuginfo was always generated by mapping a name
      to a Place. This has the side-effect that `SimplifyLocals` cannot remove
      locals that are only used for debuginfo because their other uses have
      been const-propagated.
      
      To allow these locals to be removed, we now allow debuginfo to point to
      a constant value. The `ConstProp` pass detects when debuginfo points to
      a local with a known constant value and replaces it with the value. This
      allows the later `SimplifyLocals` pass to remove the local.
      01aec8d1
  25. 29 11月, 2020 1 次提交
  26. 25 11月, 2020 1 次提交
  27. 23 11月, 2020 1 次提交
  28. 21 11月, 2020 1 次提交
  29. 17 11月, 2020 2 次提交
  30. 15 11月, 2020 2 次提交