about summary refs log tree commit diff
path: root/src/librustc_mir/transform/inline.rs
AgeCommit message (Collapse)AuthorLines
2017-05-02support inlining by asking for optimizer mir for calleesNiko Matsakis-139/+62
I tested this with it enabled 100% of the time, and we were able to run mir-opt tests successfully.
2017-05-02rip out everything but `MirPass`, move the logic into suitesNiko Matsakis-16/+11
2017-05-02remove `Pass` and (temporarily) drop `Inline`Niko Matsakis-1/+6
2017-05-02convert the `inline` pass to use the new multi resultNiko Matsakis-43/+47
This involves changing various details about that system, though the basic shape remains the same.
2017-05-02retool MIR passes completelyNiko Matsakis-3/+12
The new setup is as follows. There is a pipeline of MIR passes that each run **per def-id** to optimize a particular function. You are intended to request MIR at whatever stage you need it. At the moment, there is only one stage you can request: - `optimized_mir(def_id)` This yields the final product. Internally, it pulls the MIR for the given def-id through a series of steps. Right now, these are still using an "interned ref-cell" but they are intended to "steal" from one another: - `mir_build` -- performs the initial construction for local MIR - `mir_pass_set` -- performs a suite of optimizations and transformations - `mir_pass` -- an individual optimization within a suite So, to construct the optimized MIR, we invoke: mir_pass_set((MIR_OPTIMIZED, def_id)) which will build up the final MIR.
2017-05-02simplify the MirPass traits and passes dramaticallyNiko Matsakis-14/+4
Overall goal: reduce the amount of context a mir pass needs so that it resembles a query. - The hooks are no longer "threaded down" to the pass, but rather run automatically from the top-level (we also thread down the current pass number, so that the files are sorted better). - The hook now receives a *single* callback, rather than a callback per-MIR. - The traits are no longer lifetime parameters, which moved to the methods -- given that we required `for<'tcx>` objecs, there wasn't much point to that. - Several passes now store a `String` instead of a `&'l str` (again, no point).
2017-05-02rework `MirPass` API to be stateless and extract helper fnsNiko Matsakis-24/+4
2017-05-02introduce `mir_keys()`Niko Matsakis-29/+9
Each MIR key is a DefId that has MIR associated with it
2017-04-22avoid calling `mk_region` unnecessarilyAriel Ben-Yehuda-2/+2
this improves typeck & trans performance by 1%. This looked hotter on callgrind than it is on a CPU.
2017-04-20rustc: combine type_needs_drop_given_env and may_drop into needs_drop.Eduard-Mihai Burtescu-1/+1
2017-04-11store Spans for all MIR localsAriel Ben-Yehuda-9/+6
2017-03-10Only run inlining if mir opts are enabledJames Miller-1/+1
2017-03-10Add dep-graph tasks where neededJames Miller-16/+10
2017-03-10Initial implementation of inlining for MIRJames Miller-0/+842
Fairly basic implementation of inlining for MIR. Uses conservative heuristics for inlining.