Commit Graph

1531 Commits

Author SHA1 Message Date
Camille GILLOT d80eb3a498 Verify that the alloc_id is Memory. 2023-10-25 17:59:30 +00:00
Matthias Krüger a1ab16792b Rollup merge of #117141 - tmiasko:inline-target-features, r=oli-obk
Require target features to match exactly during inlining

In general it is not correct to inline a callee with a target features
that are subset of the callee. Require target features to match exactly
during inlining.

The exact match could be potentially relaxed, but this would require
identifying specific feature that are allowed to differ, those that need
to match, and those that can be present in caller but not in callee.

This resolves MIR part of #116573. For other concerns with respect to
the previous implementation also see areInlineCompatible in LLVM.
2023-10-25 19:51:14 +02:00
Oli Scherer 57d6a6f588 Only call mir_const_qualif if absolutely necessary 2023-10-25 14:32:14 +00:00
Camille GILLOT c4cc9ca060 Do not merge fn pointer casts. 2023-10-25 06:47:04 +00:00
Camille GILLOT 5e78b9cdb3 Disambiguate non-deterministic constants. 2023-10-25 06:46:48 +00:00
Camille GILLOT f08dc9be17 Take an AllocId in intern_const_alloc_for_constprop. 2023-10-25 06:46:48 +00:00
Camille GILLOT e3538d11f1 Do not require absence of metadata. 2023-10-25 06:46:48 +00:00
Camille GILLOT 59235a7907 Fortify transmute check. 2023-10-25 06:46:48 +00:00
Camille GILLOT fbf0a0c5ff Explain why we check variant equality. 2023-10-25 06:46:48 +00:00
Camille GILLOT ff6812cd20 Move provenance checks out of interning method. 2023-10-25 06:46:48 +00:00
Camille GILLOT ebc87bf567 Directly intern values instead of copying them. 2023-10-25 06:46:48 +00:00
Camille GILLOT 8162dc2433 Do not intern GVN temps. 2023-10-25 06:46:48 +00:00
Camille GILLOT dbf9ea30dd Transform large arrays into Repeat expressions when possible. 2023-10-25 06:46:48 +00:00
Camille GILLOT 80a5e8522d Extract simplify_aggregate. 2023-10-25 06:46:47 +00:00
Camille GILLOT 23d4857080 Do not compute actual aggregate type. 2023-10-25 06:46:47 +00:00
Camille GILLOT f110f22060 Simplify repeat expressions. 2023-10-25 06:46:47 +00:00
Camille GILLOT 48d2157a89 Simplify aggregate projections. 2023-10-25 06:46:47 +00:00
Camille GILLOT 692e528647 Simplify projections in GVN. 2023-10-25 06:46:47 +00:00
Camille GILLOT 9389373127 Do not transmute immediates to non-immediates. 2023-10-25 06:46:47 +00:00
Camille GILLOT db9bd9bd8c Do not intern too large aggregates. 2023-10-25 06:46:47 +00:00
Camille GILLOT 38c86b0798 Evaluate computed values to constants. 2023-10-25 06:46:47 +00:00
Camille GILLOT afd631cc0c Do not visit rvalues twice. 2023-10-25 06:46:47 +00:00
Camille GILLOT d28405972f Do not remove unused definitions inside GVN. 2023-10-25 06:46:45 +00:00
bors df871fbf05 Auto merge of #115796 - cjgillot:const-prop-rvalue, r=oli-obk
Generate aggregate constants in DataflowConstProp.
2023-10-24 21:47:53 +00:00
Tomasz Miąsko 011b260cc8 Require target features to match exactly during inlining
In general it is not correct to inline a callee with a target features
that are subset of the callee. Require target features to match exactly
during inlining.

The exact match could be potentially relaxed, but this would require
identifying specific feature that are allowed to differ, those that need
to match, and those that can be present in caller but not in callee.

This resolves MIR part of #116573. For other concerns with respect to
the previous implementation also see areInlineCompatible in LLVM.
2023-10-24 22:49:15 +02:00
bors cd674d6179 Auto merge of #116300 - cjgillot:split-move, r=petrochenkov
Separate move path tracking between borrowck and drop elaboration.

The primary goal of this PR is to skip creating a `MovePathIndex` for path that do not need dropping in drop elaboration.

The 2 first commits are cleanups.

The next 2 commits displace `move` errors from move-path builder to borrowck. Move-path builder keeps the same logic, but does not carry error information any more.

The remaining commits allow to filter `MovePathIndex` creation according to types. This is used in drop elaboration, to avoid computing dataflow for paths that do not need dropping.
2023-10-24 00:25:32 +00:00
bors 1322f92634 Auto merge of #107009 - cjgillot:jump-threading, r=pnkfelix
Implement jump threading MIR opt

This pass is an attempt to generalize `ConstGoto` and `SeparateConstSwitch` passes into a more complete jump threading pass.

This pass is rather heavy, as it performs a truncated backwards DFS on MIR starting from each `SwitchInt` terminator. This backwards DFS remains very limited, as it only walks through `Goto` terminators.

It is build to support constants and discriminants, and a propagating through a very limited set of operations.

The pass successfully manages to disentangle the `Some(x?)` use case and the DFA use case. It still needs a few tests before being ready.
2023-10-23 18:05:44 +00:00
Camille GILLOT 8c1b039d48 Use a ConstValue instead. 2023-10-21 16:26:05 +00:00
Camille GILLOT 31d101093c Generate ValTrees in DataflowConstProp. 2023-10-21 16:20:46 +00:00
Camille GILLOT c8f33ec35f Typo. 2023-10-21 12:14:17 +00:00
Camille GILLOT 547af00019 Remove on_all_drop_children_bits.
As drop elaboration only tracks places that need dropping, is has become
equivalent to `on_all_children_bits`.
2023-10-21 10:33:37 +00:00
Camille GILLOT c9c0c0cbca Do not create move paths that do not need dropping. 2023-10-21 10:32:59 +00:00
Camille GILLOT f038882fc0 Give collect_drop_flags and elaborate_drops closer structure. 2023-10-21 10:32:21 +00:00
Camille GILLOT 252c64722f Parametrize gather_moves by filter. 2023-10-21 10:31:39 +00:00
Camille GILLOT 8d535070a2 Do not report errors from move path builder. 2023-10-21 10:29:40 +00:00
Matthias Krüger e9df0b6b40 Rollup merge of #116974 - Zalathar:signature-spans, r=oli-obk,cjgillot
coverage: Fix inconsistent handling of function signature spans

While doing some more cleanup of `spans`, I noticed a strange inconsistency in how function signatures are handled. Normally the function signature span is treated as though it were executable as part of the start of the function, but in some cases the signature span disappears entirely from coverage, for no obvious reason.

This is caused by the fact that spans created by `CoverageSpan::for_fn_sig` don't add the span to their `merged_spans` field (unlike normal statement/terminator spans). In cases where the span-processing code looks at those merged spans, it thinks the signature span is no longer visible and deletes it.

Adding the signature span to `merged_spans` resolves the inconsistency.

(Prior to #116409 this wouldn't have been possible, because there was no case in the old `CoverageStatement` enum representing a signature. Now that `merged_spans` is just a list of spans, that's no longer an obstacle.)
2023-10-21 10:08:17 +02:00
Camille GILLOT dd08dd42e5 Expand comment on disappearing edge. 2023-10-21 07:08:53 +00:00
Camille GILLOT 8fb99afb02 Correct loop_headers logic. 2023-10-21 07:08:53 +00:00
Camille GILLOT 54b61d6e1a Reword TO application comments. 2023-10-21 07:08:53 +00:00
Camille GILLOT 66ec098ea7 Simplify static if handling. 2023-10-21 07:08:53 +00:00
Camille GILLOT d5b21ef96b Explicit notation. 2023-10-21 07:08:53 +00:00
Camille GILLOT 98b86fa9e5 Document Condition. 2023-10-21 07:03:23 +00:00
Camille GILLOT 47056248e5 Make polarity an enum. 2023-10-21 07:02:45 +00:00
Camille GILLOT b5aa1ef9b4 Document mutated_statement. 2023-10-21 07:02:06 +00:00
Camille GILLOT 4abea83663 Improve naming and comments. 2023-10-21 07:01:25 +00:00
Camille GILLOT df9e5ee038 Handle more terminators. 2023-10-21 07:01:24 +00:00
Camille GILLOT 0d0a536777 Do not thread through loop headers. 2023-10-21 06:59:37 +00:00
Camille GILLOT 751a079413 Implement JumpThreading pass. 2023-10-21 06:58:38 +00:00
Camille GILLOT 3cb0c2e385 Make instance an option in CostChecker. 2023-10-21 06:58:00 +00:00
Camille GILLOT 8252ad02c4 Extract cost checker from inliner. 2023-10-21 06:57:49 +00:00