about summary refs log tree commit diff
path: root/compiler/rustc_query_system
AgeCommit message (Collapse)AuthorLines
2023-04-25Rollup merge of #110681 - klensy:cut-dep, r=lcnrYuki Okushi-1/+0
drop few unused crates, gate libc under unix for rustc_codegen_ssa Small cleanup.
2023-04-24Split `{Idx, IndexVec, IndexSlice}` into their own modulesMaybe Waffle-4/+4
2023-04-23Rewrite MemDecoder around pointers not a sliceBen Kimock-9/+7
2023-04-22drop unused deps, gate libc under unix for one crateklensy-1/+0
2023-04-20Add info for no_hash panic.Camille GILLOT-1/+3
2023-04-20Re-allow computing fed queries.Camille GILLOT-3/+20
2023-04-19Auto merge of #110407 - Nilstrieb:fluent-macro, r=davidtwcobors-1/+2
Add `rustc_fluent_macro` to decouple fluent from `rustc_macros` Fluent, with all the icu4x it brings in, takes quite some time to compile. `fluent_messages!` is only needed in further downstream rustc crates, but is blocking more upstream crates like `rustc_index`. By splitting it out, we allow `rustc_macros` to be compiled earlier, which speeds up `x check compiler` by about 5 seconds (and even more after the needless dependency on `serde_json` is removed from `rustc_data_structures`).
2023-04-18Auto merge of #110083 - saethlin:encode-hashes-as-bytes, r=cjgillotbors-3/+4
Encode hashes as bytes, not varint In a few places, we store hashes as `u64` or `u128` and then apply `derive(Decodable, Encodable)` to the enclosing struct/enum. It is more efficient to encode hashes directly than try to apply some varint encoding. This PR adds two new types `Hash64` and `Hash128` which are produced by `StableHasher` and replace every use of storing a `u64` or `u128` that represents a hash. Distribution of the byte lengths of leb128 encodings, from `x build --stage 2` with `incremental = true` Before: ``` ( 1) 373418203 (53.7%, 53.7%): 1 ( 2) 196240113 (28.2%, 81.9%): 3 ( 3) 108157958 (15.6%, 97.5%): 2 ( 4) 17213120 ( 2.5%, 99.9%): 4 ( 5) 223614 ( 0.0%,100.0%): 9 ( 6) 216262 ( 0.0%,100.0%): 10 ( 7) 15447 ( 0.0%,100.0%): 5 ( 8) 3633 ( 0.0%,100.0%): 19 ( 9) 3030 ( 0.0%,100.0%): 8 ( 10) 1167 ( 0.0%,100.0%): 18 ( 11) 1032 ( 0.0%,100.0%): 7 ( 12) 1003 ( 0.0%,100.0%): 6 ( 13) 10 ( 0.0%,100.0%): 16 ( 14) 10 ( 0.0%,100.0%): 17 ( 15) 5 ( 0.0%,100.0%): 12 ( 16) 4 ( 0.0%,100.0%): 14 ``` After: ``` ( 1) 372939136 (53.7%, 53.7%): 1 ( 2) 196240140 (28.3%, 82.0%): 3 ( 3) 108014969 (15.6%, 97.5%): 2 ( 4) 17192375 ( 2.5%,100.0%): 4 ( 5) 435 ( 0.0%,100.0%): 5 ( 6) 83 ( 0.0%,100.0%): 18 ( 7) 79 ( 0.0%,100.0%): 10 ( 8) 50 ( 0.0%,100.0%): 9 ( 9) 6 ( 0.0%,100.0%): 19 ``` The remaining 9 or 10 and 18 or 19 are `u64` and `u128` respectively that have the high bits set. As far as I can tell these are coming primarily from `SwitchTargets`.
2023-04-18Add `rustc_fluent_macro` to decouple fluent from `rustc_macros`Nilstrieb-1/+2
Fluent, with all the icu4x it brings in, takes quite some time to compile. `fluent_messages!` is only needed in further downstream rustc crates, but is blocking more upstream crates like `rustc_index`. By splitting it out, we allow `rustc_macros` to be compiled earlier, which speeds up `x check compiler` by about 5 seconds (and even more after the needless dependency on `serde_json` is removed from `rustc_data_structures`).
2023-04-18Store hashes in special types so they aren't accidentally encoded as numbersBen Kimock-3/+4
2023-04-17Spelling - compilerJosh Soref-4/+4
* account * achieved * advising * always * ambiguous * analysis * annotations * appropriate * build * candidates * cascading * category * character * clarification * compound * conceptually * constituent * consts * convenience * corresponds * debruijn * debug * debugable * debuggable * deterministic * discriminant * display * documentation * doesn't * ellipsis * erroneous * evaluability * evaluate * evaluation * explicitly * fallible * fulfill * getting * has * highlighting * illustrative * imported * incompatible * infringing * initialized * into * intrinsic * introduced * javascript * liveness * metadata * monomorphization * nonexistent * nontrivial * obligation * obligations * offset * opaque * opportunities * opt-in * outlive * overlapping * paragraph * parentheses * poisson * precisely * predecessors * predicates * preexisting * propagated * really * reentrant * referent * responsibility * rustonomicon * shortcircuit * simplifiable * simplifications * specify * stabilized * structurally * suggestibility * translatable * transmuting * two * unclosed * uninhabited * visibility * volatile * workaround Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2023-04-17Rollup merge of #110394 - scottmcm:less-idx-new, r=WaffleLapkinMatthias Krüger-4/+1
Various minor Idx-related tweaks Nothing particularly exciting here, but a couple of things I noticed as I was looking for more index conversions to simplify. cc https://github.com/rust-lang/compiler-team/issues/606 r? `@WaffleLapkin`
2023-04-16Remove some unnecessary hash truncationsBen Kimock-1/+1
2023-04-16Various minor Idx-related tweaksScott McMurray-4/+1
Nothing particularly exciting here, but a couple of things I noticed as I was looking for more index conversions to simplify.
2023-04-12Auto merge of #109935 - michaelwoerister:fix-feed-in-eval-always, r=cjgillotbors-11/+33
incr.comp.: Make sure dependencies are recorded when feeding queries during eval-always queries. This PR makes sure we don't drop dependency edges when feeding queries during an eval-always query. Background: During eval-always queries, no dependencies are recorded because the system knows to unconditionally re-evaluate them regardless of any actual dependencies. This works fine for these queries themselves but leads to a problem when feeding other queries: When queries are fed, we set up their dependency edges by copying the current set of dependencies of the feeding query. But because this set is empty for eval-always queries, we record no edges at all -- which has the effect that the fed query instances always look "green" to the system, although they should always be "red". The fix is to explicitly add a dependency on the artificial "always red" dep-node when feeding during eval-always queries. Fixes https://github.com/rust-lang/rust/issues/108481 Maybe also fixes issue https://github.com/rust-lang/rust/issues/88488. cc `@jyn514` r? `@cjgillot` or `@oli-obk`
2023-04-09Fix some clippy::complexityNilstrieb-1/+3
2023-04-06Address commentsJohn Kåre Alsaker-3/+4
2023-04-06Don't rely on `Debug` impl for `Erased`John Kåre Alsaker-12/+25
2023-04-06Erase query cache valuesJohn Kåre Alsaker-19/+26
2023-04-04incr.comp.: Make sure dependencies are recorded when feeding queries during ↵Michael Woerister-11/+33
eval-always queries.
2023-04-04Remove a fishy Clone implOli Scherer-1/+6
2023-03-30Remove an out-of-date comment on `QueryCache::lookup`.Nicholas Nethercote-3/+0
2023-03-28Rollup merge of #108480 - Zoxc:rayon-tlv, r=cuvipernils-2/+2
Use Rayon's TLV directly This accesses Rayon's `TLV` thread local directly avoiding wrapper functions. This makes rustc work with https://github.com/rust-lang/rustc-rayon/pull/10. r? `@cuviper`
2023-03-27no shadow plzMichael Goulet-2/+1
2023-03-27Rollup merge of #109587 - cjgillot:no-hashmap-fingerprint, r=NilstriebMatthias Krüger-10/+4
Use an IndexVec to debug fingerprints. Uncontroversial part of https://github.com/rust-lang/rust/pull/109050
2023-03-25Auto merge of #109100 - Zoxc:merge-query-try, r=cjgillotbors-134/+134
Refactor `try_execute_query` This merges `JobOwner::try_start` into `try_execute_query`, removing `TryGetJob` in the processes. 3 new functions are extracted from `try_execute_query`: `execute_job`, `cycle_error` and `wait_for_query`. This makes the control flow a bit clearer and improves performance. Based on https://github.com/rust-lang/rust/pull/109046. <table><tr><td rowspan="2">Benchmark</td><td colspan="1"><b>Before</b></th><td colspan="2"><b>After</b></th></tr><tr><td align="right">Time</td><td align="right">Time</td><td align="right">%</th></tr><tr><td>🟣 <b>clap</b>:check</td><td align="right">1.7134s</td><td align="right">1.7061s</td><td align="right"> -0.43%</td></tr><tr><td>🟣 <b>hyper</b>:check</td><td align="right">0.2519s</td><td align="right">0.2510s</td><td align="right"> -0.35%</td></tr><tr><td>🟣 <b>regex</b>:check</td><td align="right">0.9517s</td><td align="right">0.9481s</td><td align="right"> -0.38%</td></tr><tr><td>🟣 <b>syn</b>:check</td><td align="right">1.5389s</td><td align="right">1.5338s</td><td align="right"> -0.33%</td></tr><tr><td>🟣 <b>syntex_syntax</b>:check</td><td align="right">5.9488s</td><td align="right">5.9258s</td><td align="right"> -0.39%</td></tr><tr><td>Total</td><td align="right">10.4048s</td><td align="right">10.3647s</td><td align="right"> -0.38%</td></tr><tr><td>Summary</td><td align="right">1.0000s</td><td align="right">0.9962s</td><td align="right"> -0.38%</td></tr></table> r? `@cjgillot`
2023-03-25Use an IndexVec to debug fingerprints.Camille GILLOT-10/+4
2023-03-25Pass `tcx` directlyJohn Kåre Alsaker-31/+26
2023-03-25Split the `if` to release the lock earlierJohn Kåre Alsaker-9/+14
2023-03-25Remove `DebugArg`John Kåre Alsaker-43/+5
2023-03-25Optimize `incremental_verify_ich`John Kåre Alsaker-49/+68
2023-03-25Update indexmap and rayon cratesJohn Kåre Alsaker-2/+2
2023-03-21Refactor `try_execute_query`John Kåre Alsaker-134/+134
2023-03-20Auto merge of #109046 - Zoxc:split-execute-job, r=cjgillot,michaelwoeristerbors-30/+42
Split `execute_job` into `execute_job_incr` and `execute_job_non_incr` `execute_job` was a bit large, so this splits it in 2. Performance was neutral locally, but this may affect bootstrap times.
2023-03-20Auto merge of #108524 - Zoxc:node-backtrace, r=cjgillotbors-51/+64
Optimize dep node backtrace and ignore fatal errors This attempts to optimize https://github.com/rust-lang/rust/pull/91742 while also passing through fatal errors. r? `@cjgillot`
2023-03-19Add some assertionsJohn Kåre Alsaker-0/+3
2023-03-19Split `execute_job` into `execute_job_incr` and `execute_job_non_incr`John Kåre Alsaker-30/+39
2023-03-12Auto merge of #108845 - Zoxc:par-fix-2, r=cjgillotbors-6/+21
Check that a query has not completed and is not executing before starting it This fixes a race in the query system where we only checked if the query was currently executing, but not if it was already completed, causing queries to re-execute. r? `@cjgillot`
2023-03-12Auto merge of #108820 - cjgillot:ensure-on-disk, r=oli-obkbors-8/+26
Ensure value is on the on-disk cache before returning from `ensure()`. The current logic for `ensure()` a query just checks that the node is green in the dependency graph. However, a lot of places use `ensure()` to prevent the query from being called later. This is the case before stealing a query result. If the query is actually green but the value is not available in the on-disk cache, `ensure` would return, but a subsequent call to the full query would run the code, and attempt to read from a stolen value. This PR conforms the query system to the usage by checking whether the queried value is loadable from disk before returning. Sadly, I can't manage to craft a proper test... Should fix all instances of "attempted to read from stolen value".
2023-03-12Use `Debug` for formatting the dep nodesJohn Kåre Alsaker-2/+1
2023-03-12Remove `graph` parameter from `try_force_from_dep_node`John Kåre Alsaker-7/+8
2023-03-12Optimize dep node backtrace and ignore fatal errorsJohn Kåre Alsaker-50/+63
2023-03-12Auto merge of #108682 - est31:simplify_dirs, r=davidtwcobors-1/+1
Simplify message paths This makes it easier to open the messages file. Right now I have to first click on the `locales` dir to open it, and then on the `en-US.ftl` file. `Cargo.toml` and `build.rs` files are also in the top level, and I think there should not be more than one file, so a directory isn't really needed. The [chosen strategy for pontoon adoption](https://rust-lang.zulipchat.com/#narrow/stream/336883-i18n/topic/pontoon.20and.20next.20steps) is out of tree. Even if this descision is changed in the future, the `messages.ftl` approach is also compatible with non-english translations living in-tree, as long as the non-english translations don't live in the `compiler/rustc_foo/` directories but in different ones. That would also be helpful for grepability purposes. The commit was the result of automated changes: ``` for p in compiler/rustc_*; do mv $p/locales/en-US.ftl $p/messages.ftl; rmdir $p/locales; done for p in compiler/rustc_*; do sed -i "s#\.\./locales/en-US.ftl#../messages.ftl#" $p/src/lib.rs; done ``` r? `@davidtwco`
2023-03-11Make the check for cache opt-in.Camille GILLOT-3/+9
2023-03-11Ensure value is on the on-disk cache before returning.Camille GILLOT-6/+18
2023-03-11Simplify message pathsest31-1/+1
This makes it easier to open the messages file while developing on features. The commit was the result of automatted changes: for p in compiler/rustc_*; do mv $p/locales/en-US.ftl $p/messages.ftl; rmdir $p/locales; done for p in compiler/rustc_*; do sed -i "s#\.\./locales/en-US.ftl#../messages.ftl#" $p/src/lib.rs; done
2023-03-09Remove `dep_node_index_of_opt` and `dep_node_index_of`John Kåre Alsaker-12/+2
2023-03-09Address commentsJohn Kåre Alsaker-16/+14
2023-03-09Move dep graph methods to DepGraphData to avoid branches and `unwrap`sJohn Kåre Alsaker-164/+224
2023-03-08Check that a query has not completed and is not executing before starting itJohn Kåre Alsaker-6/+21