1. 20 11月, 2017 7 次提交
    • B
      Auto merge of #46068 - wesleywiser:incr_duplicate_read_stats, r=michaelwoerister · ef94d5c1
      bors 提交于
      [incremental] Collect stats about duplicated edge reads from queries
      
      Part of #45873
      ef94d5c1
    • B
      Auto merge of #45225 - eddyb:trans-abi, r=arielb1 · f50fd075
      bors 提交于
      Refactor type memory layouts and ABIs, to be more general and easier to optimize.
      
      To combat combinatorial explosion, type layouts are now described through 3 orthogonal properties:
      * `Variants` describes the plurality of sum types (where applicable)
        * `Single` is for one inhabited/active variant, including all C `struct`s and `union`s
        * `Tagged` has its variants discriminated by an integer tag, including C `enum`s
        * `NicheFilling` uses otherwise-invalid values ("niches") for all but one of its inhabited variants
      * `FieldPlacement` describes the number and memory offsets of fields (if any)
        * `Union` has all its fields at offset `0`
        * `Array` has offsets that are a multiple of its `stride`; guarantees all fields have one type
        * `Arbitrary` records all the field offsets, which can be out-of-order
      * `Abi` describes how values of the type should be passed around, including for FFI
        * `Uninhabited` corresponds to no values, associated with unreachable control-flow
        * `Scalar` is ABI-identical to its only integer/floating-point/pointer "scalar component"
        * `ScalarPair` has two "scalar components", but only applies to the Rust ABI
        * `Vector` is for SIMD vectors, typically `#[repr(simd)]` `struct`s in Rust
        * `Aggregate` has arbitrary contents, including all non-transparent C `struct`s and `union`s
      
      Size optimizations implemented so far:
      * ignoring uninhabited variants (i.e. containing uninhabited fields), e.g.:
        * `Option<!>` is 0 bytes
        * `Result<T, !>` has the same size as `T`
      * using arbitrary niches, not just `0`, to represent a data-less variant, e.g.:
        * `Option<bool>`, `Option<Option<bool>>`, `Option<Ordering>` are all 1 byte
        * `Option<char>` is 4 bytes
      * using a range of niches to represent *multiple* data-less variants, e.g.:
        * `enum E { A(bool), B, C, D }` is 1 byte
      
      Code generation now takes advantage of `Scalar` and `ScalarPair` to, in more cases, pass around scalar components as immediates instead of indirectly, through pointers into temporary memory, while avoiding LLVM's "first-class aggregates", and there's more untapped potential here.
      
      Closes #44426, fixes #5977, fixes #14540, fixes #43278.
      f50fd075
    • E
      f9f5ab98
    • E
      89e43735
    • B
      Auto merge of #45454 - Aaronepower:master, r=alexcrichton · 5041b3bb
      bors 提交于
      Updated Release notes for 1.22.0
      
      [rendered](https://github.com/Aaronepower/rust/blob/master/RELEASES.md)
      5041b3bb
    • M
      Remove some trailing whitespace. · 8d6f869c
      Michael Woerister 提交于
      8d6f869c
    • M
      Fix tidy line-length issue. · a4ad5dbc
      Michael Woerister 提交于
      a4ad5dbc
  2. 19 11月, 2017 33 次提交