Commit Graph

80018 Commits

Author SHA1 Message Date
Tom Hvitved
383cc5c2a7 Rust: Rename Bultins.qll -> Builtins.qll 2025-06-12 09:12:32 +02:00
Ana Scolari
a07ce30d30 Update java-code-scanning.qls.expected
removing line once this query precision is changed to Medium
2025-06-11 15:27:20 -07:00
Ana Scolari
374d7da4a2 Merge branch 'main' into update-precision-java-concatenated-command-line 2025-06-11 15:24:41 -07:00
Jon Janego
7f76f5b056 Merge pull request #19740 from github/changedocs-2.22.0
Changedocs 2.22.0
2025-06-11 17:18:16 -05:00
Jon Janego
94a2d0876c escaping 2025-06-11 17:02:26 -05:00
Jon Janego
62e17c108c RST sitedocs for 2.22.0 2025-06-11 16:55:14 -05:00
Jeroen Ketema
7d8d596a35 Merge pull request #19686 from github/idrissrio/lambdaparams
C++: Add boolean for explicit lambda parameter lists
2025-06-11 23:53:00 +02:00
Jon Janego
6ec48117b5 Merge pull request #19739 from github/changedocs-2.22.0
fixing some improperly escaped URLs
2025-06-11 16:24:29 -05:00
Jon Janego
6336e3d44b fixing another bracket 2025-06-11 16:02:28 -05:00
Chad Bentz
0135cf661f Attempt to edit swift change notes for CI failure 2025-06-11 21:49:26 +01:00
Jon Janego
8f55dcdd67 removing brackets around a url 2025-06-11 15:36:30 -05:00
Tom Hvitved
69e549f400 Rust: Generate canonical paths for builtins 2025-06-11 21:14:56 +02:00
Geoffrey White
bd21a03fc3 Merge pull request #19718 from geoffw0/taintreach
Rust: Adjust the taint reach metric for better stability.
2025-06-11 17:51:50 +01:00
Ana Scolari
b84f9d6c3c Update java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2025-06-11 08:55:45 -07:00
Ana Scolari
f915984b01 Update java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-11 08:55:34 -07:00
Paolo Tranquilli
97c2dfe23f Rust: fix tests 2025-06-11 17:32:43 +02:00
Paolo Tranquilli
bea5381420 Rust: replace last hand-written instances of Field[crate:: 2025-06-11 16:48:39 +02:00
Paolo Tranquilli
c6c52edbee MaD generator: tweak the scripts
* fix a bug where the order of model generation was determined by the
  order in the `download.json` file of the experiment rather than the
  order in the config file
* allow configuring `--ram` and `--threads` in the MaD generator scripts
* use no `--ram` and `--threads=0` by default in the bulk generator
  (single generator defaults are left unchanged)
* allow to pass `--dca` multiple times, taking DBs from experiments
  listed last. This allows to run a subset of the sources in a "fixup"
  experiment and use it to "patch" a previous run without rerunning
  everything.
2025-06-11 16:42:00 +02:00
Paolo Tranquilli
051704e59d Merge branch 'main' into redsun82/rust-mad 2025-06-11 16:39:10 +02:00
Geoffrey White
0c05fa48eb Rust: Update RegexInjectionExtensions to use getCanonicalPath. 2025-06-11 15:32:23 +01:00
Anders Schack-Mulligen
f27e310ba3 Java: Adjust references. 2025-06-11 15:53:02 +02:00
Anders Schack-Mulligen
b3bb71f2e2 Java: Update the CFG for assert statements to make them proper guards. 2025-06-11 15:38:29 +02:00
Tom Hvitved
18392a07ce Rust: Also apply adjustedAccessType in RelevantAccess 2025-06-11 15:00:35 +02:00
Tom Hvitved
31770edc26 Merge pull request #19725 from hvitved/rust/fix-bad-joins
Rust: Fix various bad joins
2025-06-11 14:51:20 +02:00
Asger F
423ffc78db Merge pull request #19078 from asgerf/js/name-resolution
JS: QL-side type/name resolution for TypeScript and JSDoc
2025-06-11 14:17:11 +02:00
Michael Nebel
f038e2f809 Merge pull request #19589 from michaelnebel/csharp/dereference
C#: Improve `cs/dereference-*` queries and add to the Code Quality suite.
2025-06-11 13:40:58 +02:00
Tom Hvitved
133aca0773 Rust: Simple type inference for index expressions 2025-06-11 13:15:21 +02:00
Tom Hvitved
301bd44a4c Rust: Add type inference tests for index expressions 2025-06-11 13:08:59 +02:00
Tom Hvitved
eeaccc5a9a Update shared/typeinference/codeql/typeinference/internal/TypeInference.qll
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-11 12:48:06 +02:00
Tom Hvitved
9f8a3abcff Rust: Add another type inference debug predicate 2025-06-11 12:44:17 +02:00
Tom Hvitved
b90e8679a9 Shared: Add elaborate QL doc to TypeInference.qll 2025-06-11 12:38:04 +02:00
Simon Friis Vindum
75caa182f5 Merge pull request #19724 from github/rust/type-inference-borrow
Rust: Implement type inference for ref expression as type equality
2025-06-11 12:36:43 +02:00
Paolo Tranquilli
58266e6ca8 Merge branch 'main' into redsun82/rust-extract-libs 2025-06-11 12:13:10 +02:00
Napalys Klicius
92084dd74f JS: add js/template-syntax-in-string-literal to the Code Quality suite. 2025-06-11 11:48:05 +02:00
idrissrio
645ce5bbda C++: update change note after review comments 2025-06-11 11:41:51 +02:00
idrissrio
2bae21cbcd C++: address review comments 2025-06-11 11:41:50 +02:00
idrissrio
f759550e5a C++: update stats file 2025-06-11 11:41:49 +02:00
idrissrio
e4a9a5aee8 C++: add upgrade and downgrade scripts 2025-06-11 11:41:48 +02:00
idrissrio
b0c0fb9699 C++: Add change node 2025-06-11 11:41:47 +02:00
idrissrio
cb17a35cbd C++: Add test to check lambda parameters emptyness 2025-06-11 11:41:46 +02:00
idrissrio
6c9959d8bc C++: Add predicates for lambda parameter list 2025-06-11 11:41:45 +02:00
idrissrio
3ecc4c9ad7 C++: Adapt existing code to use the new layout of the underlying lambda table 2025-06-11 11:41:44 +02:00
idrissrio
9ac9607cb7 C++: Add boolean for explicit lambda parameter list 2025-06-11 11:41:43 +02:00
Paolo Tranquilli
fbcd9eaf09 Merge pull request #19674 from github/redsun82/mad
Rust: regenerate MaD files using DCA
2025-06-11 11:10:08 +02:00
Napalys Klicius
6811cad687 Merge pull request #19711 from Napalys/js/quality/promote_duplicate_char_class
JS: Promote `js/regex/duplicate-in-character-class` to quality
2025-06-11 11:05:07 +02:00
Asger F
e848aa747b JS: Clarifying comment on commonStep 2025-06-11 10:24:21 +02:00
Tom Hvitved
3c9cbf186e Rust: Fix bad join in typeParametersEqualFromIndex
Before
```
Pipeline standard for TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndex/6#6471ea48@9c099swn was evaluated in 375 iterations totaling 154ms (delta sizes total: 0).
        16307861   ~1%    {5} r1 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypes/3#3b2e26a8#prev` ON FIRST 1 OUTPUT Rhs.2, Lhs.1, Lhs.0, Lhs.2, Rhs.1

           37736   ~1%    {7} r2 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789_0312#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.0, Rhs.2, Rhs.3, _
                          {6}    | REWRITE WITH Tmp.6 := 0, TEST InOut.5 != Tmp.6 KEEPING 6
               0   ~0%    {7}    | SCAN OUTPUT In.0, In.2, In.3, In.4, In.1, _, In.5
               0   ~0%    {7}    | REWRITE WITH Tmp.5 := 1, Out.5 := (InOut.6 - Tmp.5)
               0   ~0%    {6}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndex/6#6471ea48#prev` ON FIRST 6 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.6

               0   ~0%    {8} r3 = JOIN `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndex/6#6471ea48#prev_delta` WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypes/3#3b2e26a8#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, _, Lhs.5, _
                          {6}    | REWRITE WITH Tmp.5 := 1, Out.5 := (Tmp.5 + In.6), Tmp.7 := 0, TEST Out.5 != Tmp.7 KEEPING 6
               0   ~0%    {6}    | SCAN OUTPUT In.2, In.3, In.5, In.0, In.1, In.4
               0   ~0%    {7}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789` ON FIRST 3 OUTPUT Lhs.3, Rhs.3, Lhs.5, Lhs.4, Lhs.0, Lhs.1, Lhs.2
               0   ~0%    {6}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.3, Lhs.4, Lhs.5, Lhs.2, Lhs.6

        12808446   ~1%    {5} r4 = JOIN `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypes/3#3b2e26a8#prev_delta` WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.0, Lhs.1, Rhs.2

           22081   ~1%    {7} r5 = JOIN r4 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789_0312#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.0, Lhs.4, Rhs.2, Rhs.3, _
                          {6}    | REWRITE WITH Tmp.6 := 0, TEST InOut.5 != Tmp.6 KEEPING 6
               0   ~0%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.4, In.3, In.5
               0   ~0%    {8}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndex/6#6471ea48#prev` ON FIRST 5 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.4, Lhs.3, Lhs.5, Rhs.5, _
                          {8}    | REWRITE WITH Tmp.7 := 1, Out.7 := (InOut.5 - Tmp.7), TEST Out.7 = InOut.6
               0   ~0%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.4, In.3, In.5

           22081   ~1%    {8} r6 = JOIN r4 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789_0312#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.0, Lhs.1, Lhs.4, Rhs.2, Rhs.3, _
                          {7}    | REWRITE WITH Tmp.7 := 0, TEST InOut.6 = Tmp.7 KEEPING 7
           22081   ~0%    {7}    | SCAN OUTPUT In.2, In.5, _, In.3, In.0, In.1, In.4
           22081   ~0%    {7}    | REWRITE WITH Out.2 := 0
           22081   ~0%    {5}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789` ON FIRST 4 OUTPUT Lhs.0, Lhs.1, Lhs.4, Lhs.5, Lhs.6
               0   ~0%    {6}    | JOIN WITH `project#TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789#3` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.0, Lhs.1, Lhs.4, _
               0   ~0%    {6}    | REWRITE WITH Out.5 := 0

           37736   ~1%    {8} r7 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789_0312#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.1, Lhs.3, Lhs.4, Lhs.0, Rhs.2, Rhs.3, _
                          {7}    | REWRITE WITH Tmp.7 := 0, TEST InOut.6 = Tmp.7 KEEPING 7
           37736   ~0%    {7}    | SCAN OUTPUT In.4, In.5, _, In.1, In.0, In.2, In.3
           37736   ~0%    {7}    | REWRITE WITH Out.2 := 0
           37736   ~1%    {5}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789` ON FIRST 4 OUTPUT Lhs.0, Lhs.1, Lhs.4, Lhs.5, Lhs.6
               0   ~0%    {6}    | JOIN WITH `project#TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789#3` ON FIRST 2 OUTPUT Lhs.2, Lhs.4, Lhs.0, Lhs.1, Lhs.3, _
               0   ~0%    {6}    | REWRITE WITH Out.5 := 0

               0   ~0%    {6} r8 = r2 UNION r3 UNION r5 UNION r6 UNION r7
               0   ~0%    {6}    | AND NOT `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndex/6#6471ea48#prev`(FIRST 6)
                          return r8
```

After
```
Pipeline standard for TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndex/6#6471ea48@81728ywe was evaluated in 375 iterations totaling 2ms (delta sizes total: 0).
            0   ~0%    {6} r1 = JOIN `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndexBase/5#56e8595e#reorder_0_4_1_2_3#prev_delta` WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.4, Rhs.2, _
            0   ~0%    {6}    | REWRITE WITH Out.5 := 0

            0   ~0%    {6} r2 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndexBase/5#56e8595e#reorder_0_4_1_2_3#prev` ON FIRST 2 OUTPUT Lhs.0, Rhs.2, Rhs.3, Rhs.4, Lhs.2, _
            0   ~0%    {6}    | REWRITE WITH Out.5 := 0

        66609   ~1%    {3} r3 = SCAN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` OUTPUT In.0, In.2, In.1
            0   ~0%    {9}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndex/6#6471ea48#reorder_0_4_1_2_3_5#prev` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.1, Rhs.2, Rhs.3, Rhs.4, _, Rhs.5, _
                       {7}    | REWRITE WITH Tmp.6 := 1, Out.6 := (Tmp.6 + In.7), Tmp.8 := 0, TEST Out.6 != Tmp.8 KEEPING 7
            0   ~0%    {7}    | SCAN OUTPUT In.4, In.5, In.6, In.1, In.0, In.2, In.3
            0   ~0%    {6}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789` ON FIRST 4 OUTPUT Lhs.4, Lhs.6, Lhs.0, Lhs.1, Lhs.5, Lhs.2

            0   ~0%    {8} r4 = SCAN `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndex/6#6471ea48#prev_delta` OUTPUT In.0, In.1, In.2, In.3, In.4, _, In.5, _
                       {6}    | REWRITE WITH Tmp.5 := 1, Out.5 := (Tmp.5 + In.6), Tmp.7 := 0, TEST Out.5 != Tmp.7 KEEPING 6
            0   ~0%    {6}    | SCAN OUTPUT In.2, In.3, In.5, In.0, In.1, In.4
            0   ~0%    {7}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthTypeParameterPath/3#c3ea2789` ON FIRST 3 OUTPUT Lhs.3, Rhs.3, Lhs.5, Lhs.4, Lhs.0, Lhs.1, Lhs.2
            0   ~0%    {6}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.3, Lhs.4, Lhs.5, Lhs.2, Lhs.6

            0   ~0%    {6} r5 = r1 UNION r2 UNION r3 UNION r4
            0   ~0%    {6}    | AND NOT `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::typeParametersEqualFromIndex/6#6471ea48#prev`(FIRST 6)
                       return r5
```
2025-06-11 10:23:57 +02:00
Asger F
2aa5fa17f7 JS: Add comment and examples in FlowImpl doc 2025-06-11 10:21:24 +02:00
Tom Hvitved
79e1af04df Rust: Fix bad join in satisfiesConstraintTypeMention
Before
```
Pipeline standard for TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention/6#69a92324@e8671rw7 was evaluated in 378 iterations totaling 313ms (delta sizes total: 168323).
          462477    ~1%    {7} r1 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev_delta` WITH TypeInference::CallExprBaseMatching::AccessConstraint::MkRelevantAccess#8a6252ad#reorder_3_0_1_2#prev ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.4, Lhs.3, Rhs.1, Rhs.2, Rhs.3
          993561    ~2%    {9}    | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Rhs.3, Rhs.4, Lhs.3, Lhs.4, Lhs.5, Lhs.6
          993561   ~38%    {7}    | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 5 OUTPUT Lhs.0, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8, Lhs.3
                           {7}    | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2)
          772102  ~427%    {6}    | SCAN OUTPUT In.3, In.4, In.5, In.2, In.6, In.1

           56885    ~1%    {4} r2 = SCAN TypeInference::CallExprBaseMatching::AccessConstraint::MkRelevantAccess#8a6252ad#prev_delta OUTPUT In.3, In.0, In.1, In.2

               0    ~0%    {7} r3 = JOIN r2 WITH `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev` ON FIRST 1 OUTPUT Rhs.1, Rhs.2, Rhs.4, Lhs.1, Lhs.2, Lhs.3, Rhs.3
               0    ~0%    {9}    | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Rhs.3, Rhs.4, Lhs.3, Lhs.4, Lhs.5, Lhs.6
               0    ~0%    {7}    | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 5 OUTPUT Lhs.0, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8, Lhs.3
                           {7}    | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2)
               0    ~0%    {6}    | SCAN OUTPUT In.2, In.3, In.4, In.5, In.6, In.1

          462477    ~1%    {8} r4 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev_delta` WITH TypeInference::CallExprBaseMatching::AccessConstraint::MkRelevantAccess#8a6252ad#reorder_3_0_1_2#prev ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.4, Lhs.0, Lhs.3, Rhs.1, Rhs.2, Rhs.3
          993561   ~39%    {9}    | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 3 OUTPUT Lhs.0, Rhs.4, Lhs.3, Lhs.1, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Rhs.3
           23413    ~1%    {8}    | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 2 OUTPUT Lhs.3, Lhs.1, Lhs.2, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8
            2817    ~7%    {7}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Rhs.2
           11550    ~0%    {9}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.2, _, Lhs.6, Rhs.1
                           {7}    | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7
            2397    ~1%    {11}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, _, _, In.4, In.6, _, _
                           {7}    | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7
            2397    ~1%    {9}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _
                           {7}    | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7
            2397    ~1%    {6}    | SCAN OUTPUT In.1, In.2, In.3, In.0, In.5, In.4

           66727    ~0%    {6} r5 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH TypeInference::CallExprBaseMatching::AccessConstraint::MkRelevantAccess#8a6252ad#reorder_3_0_1_2#prev ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Rhs.1, Rhs.2, Rhs.3
        19305359    ~0%    {9}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.2, Rhs.3, Rhs.4
         3454881    ~1%    {10}    | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 1 OUTPUT Lhs.0, Lhs.6, Lhs.8, Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.7
          753104    ~1%    {9}    | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a_01243#join_rhs` ON FIRST 4 OUTPUT Lhs.1, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8, Lhs.9, Rhs.4
           32040   ~18%    {9}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 2 OUTPUT Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8, _, Rhs.2, Lhs.2
                           {7}    | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7
           13192   ~54%    {11}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, _, _, In.5, In.6, _, _
                           {7}    | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7
           13192   ~54%    {9}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _
                           {7}    | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7
           13192   ~55%    {6}    | SCAN OUTPUT In.1, In.2, In.3, In.4, In.5, In.0

               0    ~0%    {8} r6 = JOIN r2 WITH `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev` ON FIRST 1 OUTPUT Rhs.1, Rhs.2, Rhs.4, Lhs.1, Lhs.2, Lhs.3, Lhs.0, Rhs.3
               0    ~0%    {9}    | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 3 OUTPUT Lhs.0, Rhs.4, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.1, Lhs.7, Rhs.3
               0    ~0%    {8}    | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 2 OUTPUT Lhs.6, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.7, Lhs.8
               0    ~0%    {7}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 2 OUTPUT Lhs.5, Lhs.2, Lhs.3, Lhs.4, Lhs.6, Lhs.7, Rhs.2
               0    ~0%    {9}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.2, _, Lhs.6, Rhs.1
                           {7}    | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7
               0    ~0%    {11}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, _, _, In.4, In.6, _, _
                           {7}    | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7
               0    ~0%    {9}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _
                           {7}    | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7
               0    ~0%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, In.4

          787691  ~403%    {6} r7 = r1 UNION r3 UNION r4 UNION r5 UNION r6
          212766   ~54%    {6}    | AND NOT `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention/6#69a92324#prev`(FIRST 6)
                           return r7
```

After
```
Pipeline standard for TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention/6#69a92324@9c099xwn was evaluated in 380 iterations totaling 11ms (delta sizes total: 153004).
        768937    ~1%    {7} r1 = SCAN `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention0/9#c82a4f76#prev_delta` OUTPUT In.5, In.8, In.1, In.2, In.3, In.4, In.7
                         {7}    | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2)
        745524  ~423%    {6}    | SCAN OUTPUT In.2, In.3, In.4, In.5, In.6, In.1

         26916    ~0%    {9} r2 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention1/7#b265d17e#prev` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Rhs.2, Rhs.3, Rhs.4, Rhs.5, _, Rhs.6, Lhs.1
                         {7}    | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7
          8530    ~1%    {11}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, _, _, In.5, In.6, _, _
                         {7}    | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7
          8530    ~1%    {9}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _
                         {7}    | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7
          8530    ~1%    {6}    | SCAN OUTPUT In.1, In.2, In.3, In.4, In.5, In.0

         11763    ~1%    {9} r3 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention1/7#b265d17e#prev_delta` WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.2, _, Lhs.6, Rhs.1
                         {7}    | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7
          2461    ~1%    {11}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, _, _, In.4, In.6, _, _
                         {7}    | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7
          2461    ~1%    {9}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _
                         {7}    | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7
          2461    ~1%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, In.4

        756515  ~396%    {6} r4 = r1 UNION r2 UNION r3
        155599    ~6%    {6}    | AND NOT `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention/6#69a92324#prev`(FIRST 6)
                         return r4
```
2025-06-11 10:04:15 +02:00
Tom Hvitved
f9915e66a7 Rust: Fix bad join in satisfiesConcreteTypesFromIndex
Before

```
Pipeline standard for TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9@061312x0 was evaluated in 367 iterations totaling 3484ms (delta sizes total: 563408).
            66609   ~0%    {3} r1 = SCAN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` OUTPUT In.1, In.2, In.0
        867138261   ~1%    {4}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1_210#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Rhs.2, Lhs.0, Lhs.1
            29320   ~0%    {5}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput::potentialInstantiationOf/3#1239e45f#reorder_0_2_1#prev` ON FIRST 2 OUTPUT Rhs.2, Lhs.3, Lhs.0, Lhs.2, Lhs.1
                           {5}    | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2)
            29320   ~1%    {4}    | SCAN OUTPUT In.4, In.3, In.2, In.0

            29320   ~0%    {5} r2 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthPath/2#8b978a80_021#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.0, Lhs.3, Rhs.2, _
                           {4}    | REWRITE WITH Tmp.4 := 0, TEST InOut.3 != Tmp.4 KEEPING 4
            29320   ~0%    {5}    | SCAN OUTPUT In.0, In.2, In.1, _, In.3
            29320   ~0%    {5}    | REWRITE WITH Tmp.3 := 1, Out.3 := (InOut.4 - Tmp.3)
            29296   ~1%    {4}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 4 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.4

            29320   ~0%    {6} r3 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthPath/2#8b978a80_021#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.1, Lhs.0, Lhs.3, Rhs.2, _
                           {5}    | REWRITE WITH Tmp.5 := 0, TEST InOut.4 = Tmp.5 KEEPING 5
                0   ~0%    {5}    | SCAN OUTPUT In.2, _, In.1, In.0, In.3
                0   ~0%    {5}    | REWRITE WITH Out.1 := 0
                0   ~0%    {4}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthPath/2#8b978a80` ON FIRST 3 OUTPUT Lhs.3, Lhs.4, Lhs.0, _
                0   ~0%    {4}    | REWRITE WITH Out.3 := 0

           563353   ~1%    {4} r4 = SCAN `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9#prev_delta` OUTPUT In.0, In.2, In.1, In.3
           563353   ~1%    {6}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput::potentialInstantiationOf/3#1239e45f#reorder_0_2_1#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, Lhs.1, _, Lhs.3, _
                           {4}    | REWRITE WITH Tmp.3 := 1, Out.3 := (Tmp.3 + In.4), Tmp.5 := 0, TEST Out.3 != Tmp.5 KEEPING 4
           563353   ~0%    {4}    | SCAN OUTPUT In.2, In.3, In.0, In.1

           258647   ~1%    {5} r5 = JOIN r4 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthPath/2#8b978a80` ON FIRST 2 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.1, Rhs.2
           102998   ~1%    {6}    | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.4, Lhs.1, Lhs.0, Lhs.3
            52485   ~1%    {6}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5

           258647   ~0%    {5} r6 = JOIN r4 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthPath/2#8b978a80` ON FIRST 2 OUTPUT Lhs.0, Rhs.2, Lhs.2, Lhs.3, Lhs.1
           259340   ~1%    {6}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1_021#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.1, Rhs.2, Lhs.3, Lhs.0, Lhs.4
            16033   ~0%    {6}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.4, Lhs.5, Lhs.1
                           {6}    | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2)
            15992   ~1%    {6}    | SCAN OUTPUT In.3, In.1, In.5, In.2, In.0, In.4

            68477   ~1%    {6} r7 = r5 UNION r6
            68477   ~0%    {4}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 3 OUTPUT Lhs.3, Lhs.4, Lhs.0, Lhs.5

           465635   ~0%    {3} r8 = SCAN `TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput::potentialInstantiationOf/3#1239e45f#reorder_0_2_1#prev_delta` OUTPUT In.1, In.0, In.2

           465635   ~0%    {5} r9 = JOIN r8 WITH `_TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAc__#join_rhs` ON FIRST 1 OUTPUT Lhs.0, _, Rhs.2, Lhs.1, Lhs.2
           465635   ~1%    {5}    | REWRITE WITH Out.1 := 0

           465635   ~1%    {5} r10 = JOIN r9 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthPath/2#8b978a80` ON FIRST 3 OUTPUT Lhs.4, Lhs.0, _, Lhs.2, Lhs.3
           465635   ~1%    {5}    | REWRITE WITH Out.2 := 0

           275069   ~0%    {5} r11 = JOIN r8 WITH `_TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAc__#join_rhs#1` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.0, Rhs.1, Rhs.2
                0   ~0%    {7}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 3 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.0, Lhs.1, Rhs.3, _
                0   ~0%    {7}    | REWRITE WITH Tmp.6 := 1, Out.6 := (InOut.1 - Tmp.6), TEST Out.6 = InOut.5

                0   ~0%    {5} r12 = SCAN r11 OUTPUT In.4, In.0, In.1, In.2, In.3

           465635   ~1%    {5} r13 = r10 UNION r12
            94444   ~1%    {6}    | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.3, Lhs.2, Lhs.4, Lhs.0
                6  ~20%    {6}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5

           465635   ~0%    {5} r14 = JOIN r9 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::AwaitExprMatching::AccessConstraint::RelevantAccess,TypeInference::AwaitExprMatching::AccessConstraint::IsInstantiationOfInput>::getNthPath/2#8b978a80` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, _, Lhs.3, Lhs.4
           465635   ~1%    {5}    | REWRITE WITH Out.2 := 0

                0   ~0%    {5} r15 = SCAN r11 OUTPUT In.0, In.2, In.1, In.3, In.4

           465635   ~1%    {5} r16 = r14 UNION r15
           465635   ~0%    {6}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1_021#join_rhs` ON FIRST 2 OUTPUT Lhs.3, Lhs.1, Rhs.2, Lhs.0, Lhs.2, Lhs.4
           465635   ~0%    {6}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.5, Lhs.2, Lhs.3, Lhs.4, Lhs.1, Lhs.0
                           {6}    | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2)
           465629   ~1%    {6}    | SCAN OUTPUT In.2, In.1, In.4, In.3, In.5, In.0

           465635   ~1%    {6} r17 = r13 UNION r16
           465635   ~1%    {4}    | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 3 OUTPUT Lhs.4, Lhs.5, Lhs.0, Lhs.3

           563408   ~1%    {4} r18 = r2 UNION r3 UNION r7 UNION r17
           563408   ~1%    {4}    | AND NOT `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9#prev`(FIRST 4)
                           return r18
```

After

```
Pipeline standard for TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9@e8671bx7 was evaluated in 376 iterations totaling 245ms (delta sizes total: 563353).
        563353   ~1%    {6} r1 = SCAN `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9#prev_delta` OUTPUT In.0, In.1, In.2, _, In.3, _
        563353   ~1%    {4}    | REWRITE WITH Tmp.3 := 1, Out.3 := (Tmp.3 + In.4), Tmp.5 := 0, TEST Out.3 != Tmp.5 KEEPING 4

        259340   ~1%    {5} r2 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::resolveTypeAt/5#77e2181d#prev` ON FIRST 4 OUTPUT Lhs.1, Rhs.5, Lhs.0, Lhs.2, Lhs.3
         52485   ~0%    {4}    | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 2 OUTPUT Lhs.2, Lhs.0, Lhs.3, Lhs.4

        259340   ~1%    {6} r3 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::resolveTypeAt/5#77e2181d#prev` ON FIRST 4 OUTPUT Lhs.0, Rhs.4, Rhs.5, Lhs.1, Lhs.2, Lhs.3
         16033   ~0%    {5}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.4, Lhs.5
                        {5}    | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2)
         15992   ~0%    {4}    | SCAN OUTPUT In.2, In.0, In.3, In.4

        741397   ~1%    {7} r4 = SCAN `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::resolveTypeAt/5#77e2181d#prev_delta` OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _
        465635   ~1%    {6}    | REWRITE WITH Tmp.6 := 0, TEST InOut.3 = Tmp.6 KEEPING 6

        465635   ~1%    {5} r5 = SCAN r4 OUTPUT In.1, In.5, In.0, In.2, _
        465635   ~0%    {5}    | REWRITE WITH Out.4 := 0

        741397   ~1%    {7} r6 = SCAN `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::resolveTypeAt/5#77e2181d#prev_delta` OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _
        275762   ~1%    {6}    | REWRITE WITH Tmp.6 := 0, TEST InOut.3 != Tmp.6 KEEPING 6

             0   ~0%    {7} r7 = JOIN r6 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.5, Rhs.3, _
                        {7}    | REWRITE WITH Tmp.6 := 1, Out.6 := (InOut.3 - Tmp.6), TEST Out.6 = InOut.5
             0   ~0%    {5}    | SCAN OUTPUT In.1, In.4, In.0, In.2, In.3

        465635   ~0%    {5} r8 = r5 UNION r7
             6   ~0%    {4}    | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 2 OUTPUT Lhs.2, Lhs.0, Lhs.3, Lhs.4

         29310   ~0%    {5} r9 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::resolveTypeAt/5#77e2181d#reorder_0_4_5_1_2_3#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, Rhs.3, Rhs.4, Rhs.5

         29310   ~0%    {6} r10 = SCAN r9 OUTPUT In.0, In.1, In.2, In.3, In.4, _
                        {5}    | REWRITE WITH Tmp.5 := 0, TEST InOut.4 = Tmp.5 KEEPING 5
             0   ~0%    {5}    | SCAN OUTPUT In.2, In.1, In.0, In.3, _
             0   ~0%    {5}    | REWRITE WITH Out.4 := 0

         29310   ~0%    {6} r11 = SCAN r9 OUTPUT In.0, In.1, In.2, In.3, In.4, _
                        {5}    | REWRITE WITH Tmp.5 := 0, TEST InOut.4 != Tmp.5 KEEPING 5
         29310   ~1%    {6}    | SCAN OUTPUT In.0, In.2, In.3, _, In.1, In.4
         29310   ~1%    {6}    | REWRITE WITH Tmp.3 := 1, Out.3 := (InOut.5 - Tmp.3)
         29241   ~0%    {5}    | JOIN WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 4 OUTPUT Lhs.1, Lhs.4, Lhs.0, Lhs.2, Lhs.5

         29241   ~0%    {5} r12 = r10 UNION r11
                        {5}    | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2)
         29241   ~1%    {4}    | SCAN OUTPUT In.2, In.0, In.3, In.4

        465635   ~0%    {6} r13 = SCAN r4 OUTPUT In.0, In.4, In.5, In.1, In.2, _
        465635   ~1%    {6}    | REWRITE WITH Out.5 := 0

             0   ~0%    {8} r14 = JOIN r6 WITH `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.3, _
                        {8}    | REWRITE WITH Tmp.7 := 1, Out.7 := (InOut.3 - Tmp.7), TEST Out.7 = InOut.6
             0   ~0%    {6}    | SCAN OUTPUT In.0, In.4, In.5, In.1, In.2, In.3

        465635   ~1%    {6} r15 = r13 UNION r14
        465635   ~0%    {5}    | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.4, Lhs.5
                        {5}    | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2)
        465629   ~1%    {4}    | SCAN OUTPUT In.2, In.0, In.3, In.4

        563353   ~1%    {4} r16 = r2 UNION r3 UNION r8 UNION r12 UNION r15
        563353   ~1%    {4}    | AND NOT `TypeInference::M2::IsInstantiationOf<TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess,TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput>::satisfiesConcreteTypesFromIndex/4#716280b9#prev`(FIRST 4)
                        return r16
```
2025-06-11 09:15:17 +02:00