Eduard-Mihai Burtescu
f62e43da28
rustc: track validity ranges for layout::Abi::Scalar values.
2017-11-19 02:14:33 +02:00
Eduard-Mihai Burtescu
5df25c4aed
rustc: remove redundant/unused fields from layout::Abi::Vector.
2017-11-19 02:14:33 +02:00
Eduard-Mihai Burtescu
b203a26efb
rustc: generalize layout::Variants::NicheFilling to niches other than 0.
2017-11-19 02:14:33 +02:00
Eduard-Mihai Burtescu
0190f270c1
rustc_trans: check for layout::I1 instead of TyBool.
2017-11-19 02:14:33 +02:00
Eduard-Mihai Burtescu
abbc1ddbd0
rustc: make TyLayout::field(NonZero<*T>, 0) return &T.
2017-11-19 02:14:33 +02:00
Eduard-Mihai Burtescu
de3e581e29
rustc: support u128 discriminant ranges.
2017-11-19 02:14:32 +02:00
Eduard-Mihai Burtescu
018323ffc2
rustc: collapse the remains of Layout into Variants (enums vs everything else).
2017-11-19 02:14:32 +02:00
Eduard-Mihai Burtescu
b28f668e26
rustc: move size, align & primitive_align from Abi::Aggregate to layout.
2017-11-19 02:14:32 +02:00
Eduard-Mihai Burtescu
b723af284a
rustc_trans: go through layouts uniformly for fat pointers and variants.
2017-11-19 02:14:32 +02:00
Eduard-Mihai Burtescu
026214c858
rustc: collapse Layout::FatPointer into Layout::Univariant.
2017-11-19 02:14:32 +02:00
Eduard-Mihai Burtescu
3fd6b00082
rustc_trans: query LLVM types from a layout instead of a Ty.
2017-11-19 02:14:32 +02:00
Eduard-Mihai Burtescu
1477119344
rustc_trans: keep a layout instead of a type in {Lvalue,Operand}Ref.
2017-11-19 02:14:32 +02:00
Eduard-Mihai Burtescu
88f70323e4
rustc_trans: nest abi::ArgType's for fat pointers instead of eagerly flattening.
2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
f2e7e17d9e
rustc_trans: pass OperandRef arguments to trans_intrinsic_call.
2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
b2d52d2132
rustc: do not pub use Layout::* in layout.
2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
d0ab6e8644
rustc_trans: compute LLVM types from type layouts, not Rust types.
2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
fad99542c8
rustc: split layout::FieldPlacement::Linear back into Union and Array.
2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
18d54aa7d5
rustc: move layout::Struct into FieldPlacement/Abi.
2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
08f9f134fd
rustc: hide details in Layout in favor of Abi or FieldPlacement.
2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
ed788a62f6
rustc: store CachedLayout for each variant of enum Layout's instead of Struct.
2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
bd51a2bc19
rustc: move size/alignment from Layout into layout::Abi.
2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
bd86f3739e
rustc: make Layout::NullablePointer a lot more like Layout::General.
2017-11-19 02:14:30 +02:00
Eduard-Mihai Burtescu
33a205b56f
rustc: collapse Layout::CEnum into Layout::General.
2017-11-19 02:14:30 +02:00
Eduard-Mihai Burtescu
658ebfc788
rustc: give Layout::CEnum a discriminant field like Layout::General.
2017-11-19 02:14:30 +02:00
Eduard-Mihai Burtescu
d318b9c27b
rustc: move CEnum's signedness into Primitive::Int.
2017-11-19 02:14:30 +02:00
Eduard-Mihai Burtescu
61c2bd9ca4
rustc: use Primitive instead of Integer for CEnum and General discriminants.
2017-11-19 02:14:30 +02:00
Eduard-Mihai Burtescu
335bd8ea1b
rustc: do not track non_zero
in Layout.
2017-11-19 02:14:30 +02:00
Eduard-Mihai Burtescu
02276e9f49
rustc: collapse Layout::{Raw,StructWrapped}NullablePointer into one variant.
2017-11-19 02:14:30 +02:00
Eduard-Mihai Burtescu
caef91d7c6
rustc: introduce layout::Abi for reduced general ABI "passing style".
2017-11-19 02:14:30 +02:00
Eduard-Mihai Burtescu
1dc572b85e
rustc: represent the discriminant as a field for Layout::{Raw,StructWrapped}NullablePointer.
2017-11-19 02:14:29 +02:00
Eduard-Mihai Burtescu
30710609c0
rustc_trans: treat General enums like unions.
2017-11-19 02:14:29 +02:00
Eduard-Mihai Burtescu
9a0efea4c2
rustc: pre-compute field placements out of Layout.
2017-11-19 02:14:29 +02:00
Eduard-Mihai Burtescu
8c4d5af52b
rustc: remove Ty::layout and move everything to layout_of.
2017-11-19 02:14:29 +02:00
Eduard-Mihai Burtescu
8864668d53
rustc: re-complicate the TyLayout API and use better names.
2017-11-19 02:14:29 +02:00
Eduard-Mihai Burtescu
aa811d728a
rustc: remove source field path from Layout::StructWrappedNullablePointer.
2017-11-19 02:14:29 +02:00
Eduard-Mihai Burtescu
bc8e1f7efa
rustc: use an offset instead of a field path in Layout::StructWrappedNullablePointer.
2017-11-19 02:14:29 +02:00
Eduard-Mihai Burtescu
50a3fd0097
rustc: remove useless 0 prefix from Layout::StructWrappedNullablePointer's discrfield.
2017-11-19 02:14:29 +02:00
Eduard-Mihai Burtescu
44eef7c9ac
rustc: do not inject discriminant fields into Layout::General's variants.
2017-11-19 02:14:28 +02:00
Eduard-Mihai Burtescu
8afa3a01e6
rustc_trans: always insert alignment padding, even before the first field.
2017-11-19 02:14:28 +02:00
Eduard-Mihai Burtescu
0a1fcc32a6
rustc_trans: use *[T; 0] for slice data pointers instead of *T.
2017-11-19 02:14:28 +02:00
Eduard-Mihai Burtescu
84b5a3d84d
rustc_trans: remove the in_memory_type_of distinction.
2017-11-19 02:14:28 +02:00
Eduard-Mihai Burtescu
5b1fdaeb80
rustc_trans: use more of the trans::mir and ty::layout APIs throughout.
2017-11-19 02:14:28 +02:00
Eduard-Mihai Burtescu
260c41b4b8
rustc_trans: do not introspect LLVM aggregate field types.
2017-11-19 02:14:28 +02:00
Eduard-Mihai Burtescu
b8671bef97
rustc_trans: remove obsolete Type methods.
2017-11-19 02:14:28 +02:00
Eduard-Mihai Burtescu
386d59dc89
rustc_trans: use a predictable layout for constant ADTs.
2017-11-19 02:14:28 +02:00
Eduard-Mihai Burtescu
f44b099187
rustc_trans: avoid working with sizes/offsets and alignments as integers.
2017-11-19 02:14:24 +02:00
Eduard-Mihai Burtescu
9deea47c96
rustc_mir: always downcast enums, even if univariant.
2017-11-18 20:52:38 +02:00
Eduard-Mihai Burtescu
fab2532ef9
rustc_trans: move const & lvalue access helpers from adt.
2017-11-17 18:25:31 +02:00
bors
aabfed5e0c
Auto merge of #45996 - eddyb:even-mirer-1, r=arielb1
...
MIR: hide .rodata constants vs by-ref ABI clash in trans.
Back in #45380 , constants were copied into locals during MIR creation to ensure that arguments ' memory can be used by the callee, if the constant is placed in `.rodata` and the ABI passes it by-ref.
However, there are several drawbacks (see https://github.com/rust-lang/rust/pull/45380#discussion_r150447709 ), most importantly the complication of constant propagation (UB if a constant ends up in `Call` arguments) and inconveniencing analyses.
Instead, I've modified the `rustc_trans` implementation of calls to copy an `Operand::Constant` argument locally if it's not immediate, and added a test that segfaults without the copy.
cc @dotdash @arielb1
2017-11-17 13:30:24 +00:00
bors
02eed2e9a5
Auto merge of #46004 - michaelwoerister:cached-mir-wip-3, r=nikomatsakis
...
incr.comp.: Implement query result cache and use it to cache type checking tables.
This is a spike implementation of caching more than LLVM IR and object files when doing incremental compilation. At the moment, only the `typeck_tables_of` query is cached but MIR and borrow-check will follow shortly. The feature is activated by running with `-Zincremental-queries` in addition to `-Zincremental`, it is not yet active by default.
r? @nikomatsakis
2017-11-17 10:12:21 +00:00