Commit Graph

140 Commits

Author SHA1 Message Date
Eduard-Mihai Burtescu
e69dacb431 rustc_trans: rename ccx to cx. 2018-01-14 08:56:44 +02:00
Eduard-Mihai Burtescu
2931af62f0 rustc_trans: access fields directly on CrateContext. 2018-01-14 08:55:43 +02:00
Eduard-Mihai Burtescu
d0d13204a6 rustc_trans: collapse {Local,Shared}CrateContext. 2018-01-14 08:52:16 +02:00
kennytm
b63f89783d Rollup merge of #47170 - eddyb:us-vs-usize, r=nikomatsakis
rustc: use {U,I}size instead of {U,I}s shorthands.

`Us`/`Is` come from a time when `us` and `is` were the literal suffixes that are now `usize` / `isize`.

r? @nikomatsakis
2018-01-07 02:36:02 +08:00
Eduard-Mihai Burtescu
210ac01792 rustc: use {U,I}size instead of {U,I}s shorthands. 2018-01-04 03:12:04 +02:00
projektir
6536d363d5 Force appropriate extension when converting from int to ptr #43291 2018-01-02 20:23:13 -08:00
Eduard-Mihai Burtescu
5cab0bf0ad rustc_trans: always require alignment for load/store/memcpy. 2017-12-17 16:34:54 +02:00
Eduard-Mihai Burtescu
16307465d5 rustc_trans: always keep track of the Align in LvalueRef. 2017-12-17 16:34:54 +02:00
Eduard-Mihai Burtescu
473f044225 MIR: s/lv(al(ue)?)?/place in function/variable/module names. 2017-12-01 18:48:57 +02:00
Eduard-Mihai Burtescu
511743c438 MIR: s/Lvalue/Place in type names. 2017-12-01 18:47:36 +02:00
Eduard-Mihai Burtescu
801a1a0fc1 rustc_trans: remove type_is_fat_ptr and its uses. 2017-11-19 02:43:56 +02:00
Eduard-Mihai Burtescu
7a36141465 rustc: unpack scalar pair newtype layout ABIs. 2017-11-19 02:43:55 +02:00
Eduard-Mihai Burtescu
f1b7cd9925 rustc_trans: restrict "immediate pairs" to pairs of scalars. 2017-11-19 02:14:33 +02:00
Eduard-Mihai Burtescu
f62e43da28 rustc: track validity ranges for layout::Abi::Scalar values. 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
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
bd51a2bc19 rustc: move size/alignment from Layout into layout::Abi. 2017-11-19 02:14:31 +02:00
Eduard-Mihai Burtescu
33a205b56f rustc: collapse Layout::CEnum into 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
8864668d53 rustc: re-complicate the TyLayout API and use better names. 2017-11-19 02:14:29 +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
f44b099187 rustc_trans: avoid working with sizes/offsets and alignments as integers. 2017-11-19 02:14:24 +02:00
Eduard-Mihai Burtescu
fab2532ef9 rustc_trans: move const & lvalue access helpers from adt. 2017-11-17 18:25:31 +02:00
Robin Kruppe
59524410a7 Make saturating u128 -> f32 casts the default behavior
... rather than being gated by -Z saturating-float-casts.
There are several reasons for this:

1. Const eval already implements this behavior.
2. Unlike with float->int casts, this behavior is uncontroversially the
right behavior and it is not as performance critical. Thus there is no
particular need to make the bug fix for u128->f32 casts opt-in.
3. Having two orthogonal features under one flag is silly, and never
should have happened in the first place.
4. Benchmarking float->int casts with the -Z flag should not pick up
performance changes due to the u128->f32 casts (assuming there are any).

Fixes #41799
2017-11-10 10:12:30 +01:00
Robin Kruppe
ce4664956f Clean up 2017-11-07 20:13:19 +01:00
Robin Kruppe
0a843df264 Implement more efficient saturation 2017-11-07 20:13:19 +01:00
Robin Kruppe
e999e7b8b2 Extract (f32::MAX + 0.5 ULP) constant 2017-11-07 20:13:19 +01:00
Robin Kruppe
0d6b52c2f3 Saturating casts between integers and floats (both directions).
This affects regular code generation as well as constant evaluation in trans,
but not the HIR constant evaluator because that one returns an error for
overflowing casts and NaN-to-int casts. That error is conservatively
correct and we should be careful to not accept more code in constant
expressions.
The changes to code generation are guarded by a new -Z flag, to be able
to evaluate the performance impact. The trans constant evaluation changes
are unconditional because they have no run time impact and don't affect
type checking either.
2017-11-07 20:13:19 +01:00
Paul Lietar
77f7e85d7f Implement RFC 1861: Extern types 2017-10-27 23:01:34 +02:00
Alex Crichton
c72240acf7 rustc_trans: Refactor collection to use tcx
This commit refactors the `collect_crate_translation_items` function to only
require the `TyCtxt` instead of a `SharedCrateContext` in preparation for
query-ifying this portion of trans.
2017-09-17 09:41:43 -07:00
Eduard-Mihai Burtescu
8a9b78f5cc rustc: use ty::Const for the length of TyArray. 2017-09-11 08:41:15 +03:00
Eduard-Mihai Burtescu
3ce31eb990 rustc: replace usize with u64 and ConstUsize. 2017-09-11 08:41:15 +03:00
Alex Crichton
a2e2aba07d rustc: Migrate lang items to a query
This commit moves the calculation of the `LanguageItems` structure into a
query rather than being calculated before the `TyCtxt` exists, with the eventual
end goal of removing some `CrateStore` methods.
2017-09-05 07:37:57 -07:00
Alexey Tarasov
e13090e8b2 Fixes issue #43205: ICE in Rvalue::Len evaluation.
- fixes evaluation of array length for zero-sized type referenced by
  rvalue operand.
- adds test to verify fix.

Cause of the issue.

Zero-sized aggregates are handled as operands, not lvalues. Therefore while
visiting Assign statement by LocalAnalyser, mark_as_lvalue() is not called for
related Local. This behaviour is controlled by rvalue_creates_operand() method.
As result it causes error later, when rvalue operand is evaluated in
trans_rvalue_operand() while handling Rvalue::Len case. Array length evaluation
invokes trans_lvalue() which expects referenced Local to be value, not operand.

How it is fixed.

In certain cases result of Rvalue::Len can be evaluated without calling
trans_lvalue(). Method evaluate_array_len() is introduced to handle length
evaluation for zero-sized types referenced by Locals.
2017-08-23 23:10:03 +10:00
Zack M. Davis
1b6c9605e4 use field init shorthand EVERYWHERE
Like #43008 (f668999), but _much more aggressive_.
2017-08-15 15:29:17 -07:00
Florian Zeitz
67044501bc trans: Reuse immediate value in call to call_memset() 2017-08-04 02:27:30 +02:00
Florian Zeitz
c3603f3ec6 trans: Check LLVM type instead of Layout 2017-08-02 00:32:14 +02:00
Florian Zeitz
ac43d58d3a trans: Optimize initialization using repeat expressions
This elides initialization for zero-sized arrays:
* for zero-sized elements we previously emitted an empty loop
* for arrays with a length of zero we previously emitted a loop with zero
  iterations

This emits llvm.memset() instead of a loop over each element when:
* all elements are zero integers
* elements are byte sized
2017-07-26 16:27:25 +02:00
Eduard-Mihai Burtescu
33ecf72e8e rustc: move the PolyFnSig out of TyFnDef. 2017-06-27 16:39:52 +03:00
bors
924898f88a Auto merge of #41917 - arielb1:mir-array, r=nagisa
Translate array drop glue using MIR

I was a bit lazy here and used a usize-based index instead of a pointer iteration. Do you think this is important @eddyb?

r? @eddyb
2017-05-28 12:01:02 +00:00
Ariel Ben-Yehuda
7b295eea42 add NullOp::SizeOf and BinOp::Offset 2017-05-28 10:43:24 +03:00
Robin Kruppe
6fec17ee15 Remove trans-internal re-exports of rustc modules
The previous commit removed them from the public API, this rewrites the use statements to get rid of the non-standard re-exports.
2017-05-27 21:09:29 +02:00
Ariel Ben-Yehuda
c85501b9c1 box large variants in MIR
Operand: 72 -> 24 B
Statement: 192 -> 96 B
Terminator: 256 -> 112 B
librustc translation memory usage: 1795 -> 1669 MB

next step would be interning lvalues, I suppose?
2017-05-12 01:43:04 +03:00
Ariel Ben-Yehuda
e1377a4f47 avoid calling mk_region unnecessarily
this improves typeck & trans performance by 1%. This looked hotter on
callgrind than it is on a CPU.
2017-04-22 21:00:50 +03:00