about summary refs log tree commit diff
path: root/tests/mir-opt/pre-codegen
AgeCommit message (Collapse)AuthorLines
2025-07-18Rollup merge of #143271 - cjgillot:gvn-types, r=oli-obkMatthias Krüger-4/+1
Store the type of each GVN value MIR is fully typed, so type information is an integral part of what defines a value. GVN currently tries to circumvent storing types, which creates all sorts of complexities. This PR stores the type along with the enum `Value` when defining a value index. This allows to simplify a lot of code. Fixes rust-lang/rust#128094 Fixes rust-lang/rust#135128 r? ``````@ghost`````` for perf
2025-07-14Update SUMMARY.mdfuder.eth-1/+1
Update README.md
2025-07-10Propagate from borrowed locals in CopyPropTomasz Miąsko-112/+80
2025-07-06Do not unify borrowed locals in CopyProp.Camille GILLOT-80/+112
2025-07-01Remove extraneous types.Camille GILLOT-4/+1
2025-06-12intrinsics: rename min_align_of to align_ofRalf Jung-2/+2
2025-05-30`slice.get(i)` should use a slice projection in MIR, like `slice[i]` doesScott McMurray-66/+26
2025-05-21Add some track_caller info to precondition panicsBen Kimock-37/+37
2025-04-21mir-opt: execute MatchBranchSimplification after GVNdianqk-0/+23
This can provide more opportunities for MatchBranchSimplification.
2025-04-04Allow GVN to produce places and not just locals.Camille GILLOT-0/+7
2025-04-03Auto merge of #132527 - DianQK:gvn-stmt-iter, r=oli-obkbors-170/+139
gvn: Invalid dereferences for all non-local mutations Fixes #132353. This PR removes the computation value by traversing SSA locals through `for_each_assignment_mut`. Because the `for_each_assignment_mut` traversal skips statements which have side effects, such as dereference assignments, the computation may be unsound. Instead of `for_each_assignment_mut`, we compute values by traversing in reverse postorder. Because we compute and use the symbolic representation of values on the fly, I invalidate all old values when encountering a dereference assignment. The current approach does not prevent the optimization of a clone to a copy. In the future, we may add an alias model, or dominance information for dereference assignments, or SSA form to help GVN. r? cjgillot cc `@jieyouxu` #132356 cc `@RalfJung` #133474
2025-04-03Remove `unsound-mir-opts` for `simplify_aggregate_to_copy`dianqk-11/+5
2025-04-02Make slice iterator constructors unstably constDaniel Bloom-140/+128
2025-04-02Bless testsdianqk-158/+134
2025-04-02Revert "comment out the old tests instead of adjusting them"dianqk-1/+0
This reverts commit 906f66fb4c22daa8a6f97e5c048e9f6ab3fd9051.
2025-03-23Rollup merge of #138135 - scottmcm:chaining-ord, r=Mark-SimulacrumJacob Pratt-0/+156
Simplify `PartialOrd` on tuples containing primitives We noticed in https://github.com/rust-lang/rust/pull/133984#issuecomment-2704011800 that currently the tuple comparison code, while it [does optimize down](https://github.com/rust-lang/rust/blob/master/tests/codegen/comparison-operators-2-tuple.rs) today, is kinda huge: <https://rust.godbolt.org/z/xqMoeYbhE> This PR changes the tuple code to go through an overridable "chaining" version of the comparison functions, so that for simple things like `(i16, u16)` and `(f32, f32)` (as seen in the new MIR pre-codegen test) we just directly get the ```rust if lhs.0 == rhs.0 { lhs.0 OP rhs.0 } else { lhs.1 OP rhs.1 } ``` version in MIR, rather than emitting a mess for LLVM to have to clean up. Test added in the first commit, so you can see the MIR diff in the second one.
2025-03-23Stop using specialization for thisScott McMurray-2/+2
Uses `__`-named `doc(hidden)` methods instead.
2025-03-19Add chaining versions of lt/le/gt/ge and use them in tuple PartialOrdScott McMurray-314/+72
2025-03-19Add a MIR pre-codegen test for tuple comparisonsScott McMurray-0/+398
We have codegen ones, but it looks like we could make those less flakey by just doing something better in the first place...
2025-03-15Add MIR pre-codegen tests to track 138544Scott McMurray-4/+315
2025-03-12Allow more top-down inlining for single-BB calleesScott McMurray-81/+93
This means that things like `<usize as Step>::forward_unchecked` and `<PartialOrd for f32>::le` will inline even if we've already done a bunch of inlining to find the calls to them.
2025-03-05Make `is_le` and friends work like clang'sScott McMurray-12/+27
2025-03-05Also add a MIR pre-codegen test for the derived `PartialOrd::le`Scott McMurray-0/+98
2025-03-03Inline FnOnce once againMichael Goulet-1/+5
2025-02-14Go back to `Some` instead of transmuting to it.Scott McMurray-163/+204
This adds a few more statements to `next`, but optimizes better in the loops (saving 2 blocks in `forward_loop`, for example)
2025-02-14Save another BB by using `SubUnchecked` instead of a call to `arith_offset`Scott McMurray-315/+251
Probably reasonable anyway since it more obviously drops provenance.
2025-02-14Simplify `slice::Iter::next` enough that it inlinesScott McMurray-140/+751
2025-02-12`transmute` should also assume non-null pointersScott McMurray-64/+52
Previously it only did integer-ABI things, but this way it does data pointers too. That gives more information in general to the backend, and allows slightly simplifying one of the helpers in slice iterators.
2025-02-10Auto merge of #135701 - calebzulawski:sync-from-portable-simd-2025-01-18, ↵bors-6/+6
r=workingjubilee Portable SIMD subtree update r? `@workingjubilee`
2025-01-30std::rangePeter Jaszkowiak-16/+16
2025-01-27Reapply "Auto merge of #133734 - scottmcm:lower-indexing-to-ptrmetadata, ↵Michael Goulet-171/+151
r=davidtwco,RalfJung" This reverts commit 122a55bb442bd1995df9cf9b36e6f65ed3ef4a1d.
2025-01-20Rollup merge of #133695 - x17jiri:hint_likely, r=AmanieuMatthias Krüger-4/+4
Reexport likely/unlikely in std::hint Since `likely`/`unlikely` should be working now, we could reexport them in `std::hint`. I'm not sure if this is already approved or if it requires approval Tracking issue: #26179
2025-01-18Update tests for std::simd subtree syncCaleb Zulawski-6/+6
2025-01-18Revert "Auto merge of #133734 - scottmcm:lower-indexing-to-ptrmetadata, ↵Rémy Rakic-151/+171
r=davidtwco,RalfJung" This reverts commit b57d93d8b9525fa261404b4cd9c0670eeb1264b8, reversing changes made to 0aeaa5eb22180fdf12a8489e63c4daa18da6f236.
2025-01-15Less unsafe in `dangling`/`without_provenance`Scott McMurray-38/+50
2025-01-15Export likely(), unlikely() and cold_path() in std::hintJiri Bobek-4/+4
2025-01-08Refactor the cast-then-cast cases together, and support transmute-then-transmuteScott McMurray-18/+30
2025-01-08[mir-opt] GVN some more transmute casesScott McMurray-495/+403
We already did `Transmute`-then-`PtrToPtr`; this adds the nearly-identical `PtrToPtr`-then-`Transmute`. It also adds `transmute(Foo(x))` → `transmute(x)`, when `Foo` is a single-field transparent type. That's useful for things like `NonNull { pointer: p }.as_ptr()`. Found these as I was looking at MCP807-related changes.
2024-12-14Auto merge of #133734 - scottmcm:lower-indexing-to-ptrmetadata, ↵bors-171/+151
r=davidtwco,RalfJung Bounds-check with PtrMetadata instead of Len in MIR Rather than emitting `Len(*_n)` in array index bounds checks, emit `PtrMetadata(copy _n)` instead -- with some asterisks for arrays and `&mut` that need it to be done slightly differently. We're getting pretty close to removing `Len` entirely, actually. I think just one more PR after this (for slice drop shims). r? mir
2024-12-10We don't need `NonNull::as_ptr` debuginfoScott McMurray-98/+60
Stop pessimizing the use of local variables in core by skipping debug info for MIR temporaries in tiny (single-BB) functions. For functions as simple as this -- `Pin::new`, etc -- nobody every actually wants debuginfo for them in the first place. They're more like intrinsics than real functions, and stepping over them is good.
2024-12-04Rollup merge of #133651 - scottmcm:nonnull-nonzero-no-field-projection, ↵Matthias Krüger-481/+525
r=oli-obk Update `NonZero` and `NonNull` to not field-project (per MCP#807) https://github.com/rust-lang/compiler-team/issues/807#issuecomment-2506098540 was accepted, so this is the first PR towards moving the library to not using field projections into `[rustc_layout_scalar_valid_range_*]` types. `NonZero` was already using `transmute` nearly everywhere, so there are very few changes to it. `NonNull` needed more changes, but they're mostly simple, changing `.pointer` to `.as_ptr()`. r? libs cc #133324, which will tidy up some of the MIR from this a bit more, but isn't a blocker.
2024-12-03Update `NonZero` and `NonNull` to not field-project (per MCP807)Scott McMurray-481/+525
2024-12-03Bounds-check with PtrMetadata instead of Len in MIRScott McMurray-171/+151
2024-11-25comment out the old tests instead of adjusting themRalf Jung-0/+1
2024-11-25Do not unify dereferences in GVN.Camille GILLOT-145/+181
2024-11-25Add test.Camille GILLOT-0/+154
2024-11-17Likely unlikely fixJiri Bobek-24/+22
2024-11-07Rollup merge of #131913 - jieyouxu:only_debug_assertions, r=onur-ozkanJubilee-3/+4
Add `{ignore,needs}-{rustc,std}-debug-assertions` directive support Add `{ignore,needs}-{rustc,std}-debug-assertions` compiletest directives and retire the old `{ignore,only}-debug` directives. The old `{ignore,only}-debug` directives were ambiguous because you could have std built with debug assertions but rustc not built with debug assertions or vice versa. If we want to support the use case of controlling test run based on if rustc was built with debug assertions, then having `{ignore,only}-debug` will be very confusing. cc ````@matthiaskrgr```` Closes #123987. r? bootstrap (or compiler tbh)
2024-10-31tests: `ignore-debug` -> `ignore-std-debug-assertions`许杰友 Jieyou Xu (Joe)-3/+4
2024-10-31Mark `simplify_aggregate_to_copy` mir-opt as unsound许杰友 Jieyou Xu (Joe)-29/+47
Co-authored-by: DianQK <dianqk@dianqk.net>