Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[perf experiment] A MIR pass removing unneded temporary locals #136788

Closed
wants to merge 3 commits into from

Conversation

FractalFir
Copy link
Contributor

Experiment with early MIR optimization removing temporary locals

Motivation

Currently, a lot of MIR contains unneded assigements to temporaries:

Rust

fn add_points(lhs:(f32,f32,f32),rhs:(f32,f32,f32))->(f32,f32,f32){
    (lhs.0 + rhs.0, lhs.1 + rhs.1, lhs.2 + rhs.2)
}

Orignal MIR

bb0: {
        StorageLive(_3);
        StorageLive(_4);
        // _4 and _5 are not needed!
        _4 = copy (_1.0: f32);
        StorageLive(_5);
        _5 = copy (_2.0: f32);
        _3 = Add(move _4, move _5);
        StorageDead(_5);
        StorageDead(_4);
        StorageLive(_6);
        StorageLive(_7);
        // _7 and _8 are not needed!
        _7 = copy (_1.1: f32);
        StorageLive(_8);
        _8 = copy (_2.1: f32);
        _6 = Add(move _7, move _8);
        StorageDead(_8);
        StorageDead(_7);
        StorageLive(_9);
        StorageLive(_10);
        // _10 and _9 are not needed!
        _10 = copy (_1.2: f32);
        StorageLive(_11);
        _11 = copy (_2.2: f32);
        _9 = Add(move _10, move _11);
        StorageDead(_11);
        StorageDead(_10);
        _0 = (move _3, move _6, move _9);
        StorageDead(_9);
        StorageDead(_6);
        StorageDead(_3);
        return;
    }

This pass tries to remove as such many temporaries as possible. This leads to reduced MIR sizes, which should hopefully speed the next passes up.

fn add_points(_1: (f32, f32, f32), _2: (f32, f32, f32)) -> (f32, f32, f32) {
    debug lhs => _1;
    debug rhs => _2;
    let mut _0: (f32, f32, f32);
    let mut _3: f32;
    let mut _4: f32;
    let mut _5: f32;

    bb0: {
        StorageLive(_3);
        _3 = Add(copy (_1.0: f32), copy (_2.0: f32));
        StorageLive(_4);
        _4 = Add(copy (_1.1: f32), copy (_2.1: f32));
        StorageLive(_5);
        _5 = Add(copy (_1.2: f32), copy (_2.2: f32));
        _0 = (move _3, move _4, move _5);
        StorageDead(_5);
        StorageDead(_4);
        StorageDead(_3);
        return;
    }
}

This PR is not yet meant for merging!
The current version is still a bit from being done: it does not optimize locals used in calls, and some parts may need tweaking.

Still, I belive it is at least worth timing at this point, which is why I am requesting a perf run.

@rustbot
Copy link
Collaborator

rustbot commented Feb 9, 2025

r? @matthewjasper

rustbot has assigned @matthewjasper.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 9, 2025
@rustbot
Copy link
Collaborator

rustbot commented Feb 9, 2025

Some changes occurred to MIR optimizations

cc @rust-lang/wg-mir-opt

@compiler-errors
Copy link
Member

Doesn't GVN already perform these optimizations?

@FractalFir
Copy link
Contributor Author

FractalFir commented Feb 9, 2025

I don't think so. I run some of those MIR samples with -Z mir-opt-level=3, and it did not seem to get optimized away. I think GVN is enabled with -Z mir-opt-level=3, but I will have to double-check.
EDIT:
GVN seems to be enabled with with opt-level 3 - if I am understanding things correctly:

impl<'tcx> crate::MirPass<'tcx> for GVN {
    fn is_enabled(&self, sess: &rustc_session::Session) -> bool {
        sess.mir_opt_level() >= 2
    }

I took the "Original" MIR in the example form nightly with opt-level 3:
https://godbolt.org/z/33cqo6aPe

@compiler-errors
Copy link
Member

Oh, nvm, GVN doesn't propagate non-local operands like this, so it won't replace e.g. _2 = copy (_1.0) where _2 is used.

Regarding the structure of this pass, I wonder if it should use more sophisticated machinery rather than this new notion of statement pairs. Seems somewhat ad-hoc, whereas we already have tools that use the MIR graph to detect where assignments can be considered live for propagation like this.

@compiler-errors
Copy link
Member

anyways, I guess here's a perf run

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Feb 9, 2025
bors added a commit to rust-lang-ci/rust that referenced this pull request Feb 9, 2025
[perf experiment]  A MIR pass removing unneded temporary locals

Experiment with early MIR optimization removing temporary locals

# Motivation

Currently, a lot of MIR contains unneded assigements to temporaries:
### Rust
```rust
fn add_points(lhs:(f32,f32,f32),rhs:(f32,f32,f32))->(f32,f32,f32){
    (lhs.0 + rhs.0, lhs.1 + rhs.1, lhs.2 + rhs.2)
}
```
### Orignal MIR
```mir
bb0: {
        StorageLive(_3);
        StorageLive(_4);
        // _4 and _5 are not needed!
        _4 = copy (_1.0: f32);
        StorageLive(_5);
        _5 = copy (_2.0: f32);
        _3 = Add(move _4, move _5);
        StorageDead(_5);
        StorageDead(_4);
        StorageLive(_6);
        StorageLive(_7);
        // _7 and _8 are not needed!
        _7 = copy (_1.1: f32);
        StorageLive(_8);
        _8 = copy (_2.1: f32);
        _6 = Add(move _7, move _8);
        StorageDead(_8);
        StorageDead(_7);
        StorageLive(_9);
        StorageLive(_10);
        // _10 and _9 are not needed!
        _10 = copy (_1.2: f32);
        StorageLive(_11);
        _11 = copy (_2.2: f32);
        _9 = Add(move _10, move _11);
        StorageDead(_11);
        StorageDead(_10);
        _0 = (move _3, move _6, move _9);
        StorageDead(_9);
        StorageDead(_6);
        StorageDead(_3);
        return;
    }
```
This pass tries to remove as such many temporaries as possible. This leads to reduced MIR sizes, which should hopefully speed the next passes up.
```mir
fn add_points(_1: (f32, f32, f32), _2: (f32, f32, f32)) -> (f32, f32, f32) {
    debug lhs => _1;
    debug rhs => _2;
    let mut _0: (f32, f32, f32);
    let mut _3: f32;
    let mut _4: f32;
    let mut _5: f32;

    bb0: {
        StorageLive(_3);
        _3 = Add(copy (_1.0: f32), copy (_2.0: f32));
        StorageLive(_4);
        _4 = Add(copy (_1.1: f32), copy (_2.1: f32));
        StorageLive(_5);
        _5 = Add(copy (_1.2: f32), copy (_2.2: f32));
        _0 = (move _3, move _4, move _5);
        StorageDead(_5);
        StorageDead(_4);
        StorageDead(_3);
        return;
    }
}
```
**This PR is not yet meant for merging!**
The current version is still a bit from being done: it does not optimize locals used in calls, and some parts may need tweaking.

Still, I belive it is at least worth timing at this point, which is why I am requesting a perf run.
@bors
Copy link
Collaborator

bors commented Feb 9, 2025

⌛ Trying commit 3e56b39 with merge e730bff...

@rust-log-analyzer

This comment has been minimized.

@bors
Copy link
Collaborator

bors commented Feb 9, 2025

☀️ Try build successful - checks-actions
Build commit: e730bff (e730bff8403a94d234a9abef6e3ad38430ff4e62)

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (e730bff): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please indicate this with @rustbot label: +perf-regression-triaged along with sufficient written justification. If you cannot justify the regressions please fix the regressions and do another perf run. If the next run shows neutral or positive results, the label will be automatically removed.

@bors rollup=never
@rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

mean range count
Regressions ❌
(primary)
0.5% [0.1%, 1.1%] 15
Regressions ❌
(secondary)
0.7% [0.1%, 1.8%] 8
Improvements ✅
(primary)
-0.6% [-2.5%, -0.2%] 11
Improvements ✅
(secondary)
-0.6% [-2.1%, -0.0%] 17
All ❌✅ (primary) 0.0% [-2.5%, 1.1%] 26

Max RSS (memory usage)

Results (primary -3.5%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-3.5% [-8.8%, -1.1%] 4
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -3.5% [-8.8%, -1.1%] 4

Cycles

Results (primary -1.8%, secondary -2.4%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-1.8% [-2.6%, -1.1%] 2
Improvements ✅
(secondary)
-2.4% [-2.4%, -2.4%] 1
All ❌✅ (primary) -1.8% [-2.6%, -1.1%] 2

Binary size

Results (primary -0.0%, secondary 0.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
0.2% [0.0%, 0.6%] 34
Regressions ❌
(secondary)
0.2% [0.0%, 0.4%] 44
Improvements ✅
(primary)
-0.2% [-0.8%, -0.0%] 45
Improvements ✅
(secondary)
-1.3% [-2.6%, -0.2%] 8
All ❌✅ (primary) -0.0% [-0.8%, 0.6%] 79

Bootstrap: 779.273s -> 776.343s (-0.38%)
Artifact size: 329.09 MiB -> 329.08 MiB (-0.00%)

@rustbot rustbot added perf-regression Performance regression. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Feb 10, 2025
@rust-log-analyzer

This comment has been minimized.

@dianqk
Copy link
Member

dianqk commented Feb 11, 2025

Maybe let's let GVN handles this. After #132527, GVN can handle this, I guess.
However, I'm not sure if this is an improved. For example:

// -Copt-level=0 -Zmir-enable-passes=+PropTrivialLocals
fn add_points(lhs: (f32, f32, f32)) -> (f32, f32, f32) {
    (lhs.0, lhs.0, lhs.0)
}

This should be (copy _3, copy _3, copy _3);, not (move _3, copy (_1.0: f32), copy (_1.0: f32));. And GVN reverts your pass. The --emit=mir -Copt-level=3 -Zmir-enable-passes=+PropTrivialLocals,-GVN output is:

fn add_points(_1: (f32, f32, f32)) -> (f32, f32, f32) {
    debug lhs => _1;
    let mut _0: (f32, f32, f32);
    let mut _2: f32;

    bb0: {
        StorageLive(_2);
        _2 = copy (_1.0: f32);
        _0 = (move _2, copy (_1.0: f32), copy (_1.0: f32));
        StorageDead(_2);
        return;
    }
}

The --emit=mir -Copt-level=3 -Zmir-enable-passes=+PropTrivialLocals,+GVN output is:

fn add_points(_1: (f32, f32, f32)) -> (f32, f32, f32) {
    debug lhs => _1;
    let mut _0: (f32, f32, f32);
    let mut _2: f32;

    bb0: {
        _2 = copy (_1.0: f32);
        _0 = (copy _2, copy _2, copy _2);
        return;
    }
}

I think the temporary local can make some passes easier, we can directly reuse the local when needed or known places are the same local. After inlined, the temporary local may be reused:

fn add_points(lhs: (i32, i32)) -> i32 {
    lhs.0 + bar(&lhs)
}

#[inline(always)]
fn bar(lhs: &(i32, i32)) -> i32 {
    lhs.0 + lhs.1
}

@alex-semenyuk
Copy link
Member

Triage: failing build and some comment to consider
@rustbot label: +S-waiting-on-author, -S-waiting-on-review

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 12, 2025
@rustbot rustbot added the has-merge-commits PR has merge commits, merge with caution. label Mar 14, 2025
@rustbot
Copy link
Collaborator

rustbot commented Mar 14, 2025

There are merge commits (commits with multiple parents) in your changes. We have a no merge policy so these commits will need to be removed for this pull request to be merged.

You can start a rebase with the following commands:

$ # rebase
$ git pull --rebase https://github.com/rust-lang/rust.git master
$ git push --force-with-lease

The following commits are merge commits:

@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-llvm-18 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
#19 exporting to docker image format
#19 sending tarball 19.7s done
#19 DONE 25.6s
##[endgroup]
Setting extra environment values for docker:  --env ENABLE_GCC_CODEGEN=1 --env GCC_EXEC_PREFIX=/usr/lib/gcc/
[CI_JOB_NAME=x86_64-gnu-llvm-18]
[CI_JOB_NAME=x86_64-gnu-llvm-18]
debug: `DISABLE_CI_RUSTC_IF_INCOMPATIBLE` configured.
---
sccache: Listening on address 127.0.0.1:4226
##[group]Configure the build
configure: processing command line
configure: 
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--llvm-root=/usr/lib/llvm-18', '--enable-llvm-link-shared', '--set', 'rust.randomize-layout=true', '--set', 'rust.thin-lto-import-instr-limit=10', '--set', 'build.print-step-timings', '--enable-verbose-tests', '--set', 'build.metrics', '--enable-verbose-configure', '--enable-sccache', '--disable-manage-submodules', '--enable-locked-deps', '--enable-cargo-native-static', '--set', 'rust.codegen-units-std=1', '--set', 'dist.compression-profile=balanced', '--dist-compression-formats=xz', '--set', 'rust.lld=false', '--disable-dist-src', '--release-channel=nightly', '--enable-debug-assertions', '--enable-overflow-checks', '--enable-llvm-assertions', '--set', 'rust.verify-llvm-ir', '--set', 'rust.codegen-backends=llvm,cranelift,gcc', '--set', 'llvm.static-libstdcpp', '--enable-new-symbol-mangling']
configure: build.build          := x86_64-unknown-linux-gnu
configure: target.x86_64-unknown-linux-gnu.llvm-config := /usr/lib/llvm-18/bin/llvm-config
configure: llvm.link-shared     := True
configure: rust.randomize-layout := True
configure: rust.thin-lto-import-instr-limit := 10
---
  Number of decisions:   4447
  longest path:          1159 (code:    152)
  longest backtrack:       66 (code:    428)
Shared 86733 out of 152951 states by creating 14756 new states, saving 71977
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/expmed.cc: In function ‘rtx_def* extract_bit_field_1(rtx, poly_uint64, poly_uint64, int, rtx, machine_mode, machine_mode, bool, bool, rtx_def**)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/expmed.cc:1864:45: warning: ‘*(unsigned int*)((char*)&imode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ may be used uninitialized [-Wmaybe-uninitialized]
 1864 |       rtx sub = extract_bit_field_as_subreg (mode1, op0, imode,
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
 1865 |                                              bitsize, bitnum);
      |                                              ~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/expmed.cc:1824:19: note: ‘*(unsigned int*)((char*)&imode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ was declared here
 1824 |   scalar_int_mode imode;
      |                   ^~~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-everything’ may have been intended to silence earlier diagnostics
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gimple-range-gori.cc: In member function ‘void range_def_chain::dump(FILE*, basic_block, const char*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gimple-range-gori.cc:319:19: warning: format not a string literal and no format arguments [-Wformat-security]
---
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-everything’ may have been intended to silence earlier diagnostics
In file included from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-playback.h:31,
                 from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/dummy-frontend.cc:25:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h: In member function ‘virtual bool gcc::jit::recording::type::is_same_type_as(gcc::jit::recording::type*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h:640:20: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
  640 |     if ((is_int () && other->is_int () || is_float() && other->is_float())
      |          ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-everything’ may have been intended to silence earlier diagnostics
In file included from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/libgccjit.cc:30:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h: In member function ‘virtual bool gcc::jit::recording::type::is_same_type_as(gcc::jit::recording::type*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h:640:20: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
  640 |     if ((is_int () && other->is_int () || is_float() && other->is_float())
      |          ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/libgccjit.cc: In function ‘gcc_jit_type* gcc_jit_context_new_array_type(gcc_jit_context*, gcc_jit_location*, gcc_jit_type*, long unsigned int)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/libgccjit.cc:807:37: warning: comparison of unsigned expression in ‘>= 0’ is always true [-Wtype-limits]
  807 |   RETURN_NULL_IF_FAIL (num_elements >= 0, ctxt, NULL, "negative size");
---
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-everything’ may have been intended to silence earlier diagnostics
In file included from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-playback.h:31,
                 from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-builtins.cc:24:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h: In member function ‘virtual bool gcc::jit::recording::type::is_same_type_as(gcc::jit::recording::type*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h:640:20: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
  640 |     if ((is_int () && other->is_int () || is_float() && other->is_float())
      |          ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/omp-builtins.def: At global scope:
./options.h:6899:37: warning: narrowing conversion of ‘global_options.gcc_options::x_flag_openacc’ from ‘int’ to ‘bool’ [-Wnarrowing]
 6899 | #define flag_openacc global_options.x_flag_openacc
      |                      ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-builtins.cc:58:23: note: in definition of macro ‘DEF_BUILTIN’
   58 |   {NAME, CLASS, TYPE, BOTH_P, FALLBACK_P, ATTRS, IMPLICIT},
      |                       ^~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/builtins.def:223:16: note: in expansion of macro ‘flag_openacc’
  223 |                flag_openacc, true, true, ATTRS, false, true)
      |                ^~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/omp-builtins.def:55:1: note: in expansion of macro ‘DEF_GOACC_BUILTIN_COMPILER’
   55 | DEF_GOACC_BUILTIN_COMPILER (BUILT_IN_ACC_ON_DEVICE, "acc_on_device",
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~
./options.h:6911:36: warning: narrowing conversion of ‘global_options.gcc_options::x_flag_openmp’ from ‘int’ to ‘bool’ [-Wnarrowing]
 6911 | #define flag_openmp global_options.x_flag_openmp
      |                     ~~~~~~~~~~~~~~~^~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-builtins.cc:58:23: note: in definition of macro ‘DEF_BUILTIN’
   58 |   {NAME, CLASS, TYPE, BOTH_P, FALLBACK_P, ATTRS, IMPLICIT},
      |                       ^~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/builtins.def:238:16: note: in expansion of macro ‘flag_openmp’
  238 |                flag_openmp, true, true, ATTRS, false, flag_openmp)
      |                ^~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/omp-builtins.def:72:1: note: in expansion of macro ‘DEF_GOMP_BUILTIN_COMPILER’
   72 | DEF_GOMP_BUILTIN_COMPILER (BUILT_IN_OMP_IS_INITIAL_DEVICE,
      | ^~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: note: unrecognized command-line option ‘-Wno-everything’ may have been intended to silence earlier diagnostics
In file included from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-playback.h:31,
                 from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-playback.cc:49:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h: In member function ‘virtual bool gcc::jit::recording::type::is_same_type_as(gcc::jit::recording::type*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h:640:20: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
  640 |     if ((is_int () && other->is_int () || is_float() && other->is_float())
      |          ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-everything’ may have been intended to silence earlier diagnostics
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gengtype-lex.l: In function ‘int yylex(const char**)’:
---
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gcc.cc:7930:9: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 7930 |   write (fd, "\n\n", 2);
      |   ~~~~~~^~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gcc.cc: In member function ‘void driver::final_actions() const’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gcc.cc:9307:13: warning: ignoring return value of ‘int truncate(const char*, __off_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 9307 |     truncate(totruncate_file, 0);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-everything’ may have been intended to silence earlier diagnostics
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto-wrapper.cc: In function ‘bool find_and_merge_options(int, off_t, const char*, vec<cl_decoded_option>, bool, vec<cl_decoded_option>*, const char*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto-wrapper.cc:1165:8: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
---
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc: In function ‘void lto_resolution_read(splay_tree, FILE*, lto_file*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc:2091:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2091 |   fscanf (resolution, " ");   /* Read white space.  */
      |   ~~~~~~~^~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc:2093:9: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2093 |   fread (obj_name, sizeof (char), name_len, resolution);
      |   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc:2113:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2113 |   fscanf (resolution, "%u", &num_symbols);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-everything’ may have been intended to silence earlier diagnostics
In file included from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.cc:32:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h: In member function ‘virtual bool gcc::jit::recording::type::is_same_type_as(gcc::jit::recording::type*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.h:640:20: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
  640 |     if ((is_int () && other->is_int () || is_float() && other->is_float())
      |          ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.cc: In member function ‘virtual void gcc::jit::recording::memento_of_set_personality_function::replay_into(gcc::jit::replayer*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.cc:7595:72: warning: unused parameter ‘r’ [-Wunused-parameter]
 7595 | recording::memento_of_set_personality_function::replay_into (replayer *r)
---
Applying io_quotes_use            to linux/blkzoned.h
Applying io_quotes_use            to linux/ipmi.h
Applying io_quotes_use            to linux/psp-dbc.h
Applying io_quotes_use            to linux/bt-bmc.h
Applying io_quotes_use            to linux/tps6594_pfsm.h
Applying io_quotes_use            to linux/cxl_mem.h
Applying io_quotes_use            to linux/wmi.h
Applying io_quotes_use            to linux/auto_fs.h
Applying io_quotes_use            to linux/mmtimer.h
Applying io_quotes_use            to linux/f2fs.h
Applying io_quotes_use            to linux/vhost.h
---
Applying machine_name             to x86_64-linux-gnu/bits/unistd_ext.h
Applying io_quotes_use            to x86_64-linux-gnu/asm/mtrr.h
Applying io_quotes_use            to x86_64-linux-gnu/asm/amd_hsmp.h
Applying machine_name             to openssl/e_os2.h
Applying io_quotes_use            to drm/xe_drm.h
Applying io_quotes_use            to drm/radeon_drm.h
Applying io_quotes_use            to drm/panfrost_drm.h
Applying io_quotes_use            to drm/etnaviv_drm.h
Applying io_quotes_use            to drm/lima_drm.h
Applying io_quotes_use            to drm/qaic_accel.h
Applying io_quotes_use            to drm/vc4_drm.h
Applying io_quotes_use            to drm/i915_drm.h
Applying io_quotes_use            to drm/omap_drm.h
Applying io_quotes_use            to drm/pvr_drm.h
Applying io_quotes_use            to drm/amdgpu_drm.h
Applying io_quotes_use            to drm/vgem_drm.h
Applying io_quotes_use            to drm/msm_drm.h
Applying io_quotes_use            to drm/v3d_drm.h
Applying io_quotes_use            to drm/exynos_drm.h
Applying io_quotes_use            to drm/nouveau_drm.h
Applying io_quotes_use            to drm/drm.h
Applying io_quotes_use            to drm/habanalabs_accel.h
Applying io_quotes_use            to drm/tegra_drm.h
Applying io_quotes_use            to rdma/rdma_user_ioctl.h
cc1: note: self-tests are not enabled in this build
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/c++tools/server.cc: In function ‘void server(bool, int, module_resolver*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/c++tools/server.cc:620:10: warning: ignoring return value of ‘int pipe(int*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
---
---- [coverage-map] tests/coverage/bad_counter_ids.rs stdout ----
Saved the actual cov-map to "/checkout/obj/build/x86_64-unknown-linux-gnu/test/coverage/bad_counter_ids.coverage-map/bad_counter_ids.cov-map"
diff of cov-map:

1 Function name: bad_counter_ids::eq_bad
- Raw bytes (14): 0x[01, 01, 00, 02, 01, 24, 01, 02, 1f, 00, 03, 01, 00, 02]
+ Raw bytes (14): 0x[01, 01, 00, 02, 01, 24, 01, 02, 1f, 05, 03, 01, 00, 02]
3 Number of files: 1
4 - file 0 => global file 1
5 Number of expressions: 0

6 Number of file 0 mappings: 2
7 - Code(Counter(0)) at (prev + 36, 1) to (start + 2, 31)
- - Code(Zero) at (prev + 3, 1) to (start + 0, 2)
- Highest counter ID seen: c0
+ - Code(Counter(1)) at (prev + 3, 1) to (start + 0, 2)
+ Highest counter ID seen: c1
10 
11 Function name: bad_counter_ids::eq_bad_message
- Raw bytes (19): 0x[01, 01, 00, 03, 01, 29, 01, 02, 0f, 01, 02, 20, 00, 2b, 00, 01, 01, 00, 02]
+ Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 29, 01, 02, 0f, 02, 02, 20, 00, 2b, 05, 01, 01, 00, 02]
13 Number of files: 1
14 - file 0 => global file 1
- Number of expressions: 0
+ Number of expressions: 1
+ - expression 0 operands: lhs = Counter(0), rhs = Counter(1)
16 Number of file 0 mappings: 3
17 - Code(Counter(0)) at (prev + 41, 1) to (start + 2, 15)
- - Code(Counter(0)) at (prev + 2, 32) to (start + 0, 43)
- - Code(Zero) at (prev + 1, 1) to (start + 0, 2)
- Highest counter ID seen: c0
+ - Code(Expression(0, Sub)) at (prev + 2, 32) to (start + 0, 43)
+     = (c0 - c1)
+ - Code(Counter(1)) at (prev + 1, 1) to (start + 0, 2)
+ Highest counter ID seen: c1
21 
22 Function name: bad_counter_ids::eq_good
- Raw bytes (14): 0x[01, 01, 00, 02, 01, 10, 01, 02, 1f, 01, 03, 01, 00, 02]
+ Raw bytes (14): 0x[01, 01, 00, 02, 01, 10, 01, 02, 1f, 05, 03, 01, 00, 02]
24 Number of files: 1
25 - file 0 => global file 1
26 Number of expressions: 0

27 Number of file 0 mappings: 2
28 - Code(Counter(0)) at (prev + 16, 1) to (start + 2, 31)
- - Code(Counter(0)) at (prev + 3, 1) to (start + 0, 2)
- Highest counter ID seen: c0
+ - Code(Counter(1)) at (prev + 3, 1) to (start + 0, 2)
+ Highest counter ID seen: c1
31 
32 Function name: bad_counter_ids::eq_good_message
- Raw bytes (19): 0x[01, 01, 00, 03, 01, 15, 01, 02, 0f, 00, 02, 20, 00, 2b, 01, 01, 01, 00, 02]
+ Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 15, 01, 02, 0f, 02, 02, 20, 00, 2b, 05, 01, 01, 00, 02]
34 Number of files: 1
35 - file 0 => global file 1
- Number of expressions: 0
+ Number of expressions: 1
+ - expression 0 operands: lhs = Counter(0), rhs = Counter(1)
37 Number of file 0 mappings: 3
38 - Code(Counter(0)) at (prev + 21, 1) to (start + 2, 15)
- - Code(Zero) at (prev + 2, 32) to (start + 0, 43)
- - Code(Counter(0)) at (prev + 1, 1) to (start + 0, 2)
- Highest counter ID seen: c0
+ - Code(Expression(0, Sub)) at (prev + 2, 32) to (start + 0, 43)
+     = (c0 - c1)
+ - Code(Counter(1)) at (prev + 1, 1) to (start + 0, 2)
+ Highest counter ID seen: c1
42 
43 Function name: bad_counter_ids::ne_bad
- Raw bytes (14): 0x[01, 01, 00, 02, 01, 2e, 01, 02, 1f, 00, 03, 01, 00, 02]
+ Raw bytes (16): 0x[01, 01, 01, 01, 05, 02, 01, 2e, 01, 02, 1f, 02, 03, 01, 00, 02]
45 Number of files: 1
46 - file 0 => global file 1
- Number of expressions: 0
+ Number of expressions: 1
+ - expression 0 operands: lhs = Counter(0), rhs = Counter(1)
48 Number of file 0 mappings: 2
49 - Code(Counter(0)) at (prev + 46, 1) to (start + 2, 31)
- - Code(Zero) at (prev + 3, 1) to (start + 0, 2)
+ - Code(Expression(0, Sub)) at (prev + 3, 1) to (start + 0, 2)
+     = (c0 - c1)
51 Highest counter ID seen: c0
52 
53 Function name: bad_counter_ids::ne_bad_message

- Raw bytes (19): 0x[01, 01, 00, 03, 01, 33, 01, 02, 0f, 01, 02, 20, 00, 2b, 00, 01, 01, 00, 02]
+ Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 33, 01, 02, 0f, 05, 02, 20, 00, 2b, 02, 01, 01, 00, 02]
55 Number of files: 1
56 - file 0 => global file 1
- Number of expressions: 0
+ Number of expressions: 1
+ - expression 0 operands: lhs = Counter(0), rhs = Counter(1)
58 Number of file 0 mappings: 3
59 - Code(Counter(0)) at (prev + 51, 1) to (start + 2, 15)
- - Code(Counter(0)) at (prev + 2, 32) to (start + 0, 43)
- - Code(Zero) at (prev + 1, 1) to (start + 0, 2)
- Highest counter ID seen: c0
+ - Code(Counter(1)) at (prev + 2, 32) to (start + 0, 43)
+ - Code(Expression(0, Sub)) at (prev + 1, 1) to (start + 0, 2)
+     = (c0 - c1)
+ Highest counter ID seen: c1
63 
64 Function name: bad_counter_ids::ne_good
- Raw bytes (14): 0x[01, 01, 00, 02, 01, 1a, 01, 02, 1f, 01, 03, 01, 00, 02]
+ Raw bytes (16): 0x[01, 01, 01, 01, 05, 02, 01, 1a, 01, 02, 1f, 02, 03, 01, 00, 02]
66 Number of files: 1
67 - file 0 => global file 1
- Number of expressions: 0
+ Number of expressions: 1
+ - expression 0 operands: lhs = Counter(0), rhs = Counter(1)
69 Number of file 0 mappings: 2
70 - Code(Counter(0)) at (prev + 26, 1) to (start + 2, 31)
- - Code(Counter(0)) at (prev + 3, 1) to (start + 0, 2)
+ - Code(Expression(0, Sub)) at (prev + 3, 1) to (start + 0, 2)
+     = (c0 - c1)
72 Highest counter ID seen: c0
73 
74 Function name: bad_counter_ids::ne_good_message

- Raw bytes (19): 0x[01, 01, 00, 03, 01, 1f, 01, 02, 0f, 00, 02, 20, 00, 2b, 01, 01, 01, 00, 02]
+ Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 1f, 01, 02, 0f, 05, 02, 20, 00, 2b, 02, 01, 01, 00, 02]
76 Number of files: 1
77 - file 0 => global file 1
- Number of expressions: 0
+ Number of expressions: 1
+ - expression 0 operands: lhs = Counter(0), rhs = Counter(1)
79 Number of file 0 mappings: 3
80 - Code(Counter(0)) at (prev + 31, 1) to (start + 2, 15)
- - Code(Zero) at (prev + 2, 32) to (start + 0, 43)
- - Code(Counter(0)) at (prev + 1, 1) to (start + 0, 2)
- Highest counter ID seen: c0
+ - Code(Counter(1)) at (prev + 2, 32) to (start + 0, 43)
+ - Code(Expression(0, Sub)) at (prev + 1, 1) to (start + 0, 2)
+     = (c0 - c1)
+ Highest counter ID seen: c1
84 
85 


The actual cov-map differed from the expected cov-map.

error: an error occurred comparing coverage output.
status: exit status: 0
command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/coverage-dump" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/coverage/bad_counter_ids.coverage-map/bad_counter_ids.ll"
--- stdout -------------------------------
Function name: bad_counter_ids::eq_bad
Raw bytes (14): 0x[01, 01, 00, 02, 01, 24, 01, 02, 1f, 05, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
- Code(Counter(0)) at (prev + 36, 1) to (start + 2, 31)
- Code(Counter(1)) at (prev + 3, 1) to (start + 0, 2)
Highest counter ID seen: c1

Function name: bad_counter_ids::eq_bad_message
Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 29, 01, 02, 0f, 02, 02, 20, 00, 2b, 05, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 3
- Code(Counter(0)) at (prev + 41, 1) to (start + 2, 15)
- Code(Expression(0, Sub)) at (prev + 2, 32) to (start + 0, 43)
    = (c0 - c1)
- Code(Counter(1)) at (prev + 1, 1) to (start + 0, 2)
Highest counter ID seen: c1

Function name: bad_counter_ids::eq_good
Raw bytes (14): 0x[01, 01, 00, 02, 01, 10, 01, 02, 1f, 05, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 2
- Code(Counter(0)) at (prev + 16, 1) to (start + 2, 31)
- Code(Counter(1)) at (prev + 3, 1) to (start + 0, 2)
Highest counter ID seen: c1

Function name: bad_counter_ids::eq_good_message
Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 15, 01, 02, 0f, 02, 02, 20, 00, 2b, 05, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 3
- Code(Counter(0)) at (prev + 21, 1) to (start + 2, 15)
- Code(Expression(0, Sub)) at (prev + 2, 32) to (start + 0, 43)
    = (c0 - c1)
- Code(Counter(1)) at (prev + 1, 1) to (start + 0, 2)
Highest counter ID seen: c1

Function name: bad_counter_ids::ne_bad
Raw bytes (16): 0x[01, 01, 01, 01, 05, 02, 01, 2e, 01, 02, 1f, 02, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 2
- Code(Counter(0)) at (prev + 46, 1) to (start + 2, 31)
- Code(Expression(0, Sub)) at (prev + 3, 1) to (start + 0, 2)
    = (c0 - c1)
Highest counter ID seen: c0

Function name: bad_counter_ids::ne_bad_message
Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 33, 01, 02, 0f, 05, 02, 20, 00, 2b, 02, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 3
- Code(Counter(0)) at (prev + 51, 1) to (start + 2, 15)
- Code(Counter(1)) at (prev + 2, 32) to (start + 0, 43)
- Code(Expression(0, Sub)) at (prev + 1, 1) to (start + 0, 2)
    = (c0 - c1)
Highest counter ID seen: c1

Function name: bad_counter_ids::ne_good
Raw bytes (16): 0x[01, 01, 01, 01, 05, 02, 01, 1a, 01, 02, 1f, 02, 03, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 2
- Code(Counter(0)) at (prev + 26, 1) to (start + 2, 31)
- Code(Expression(0, Sub)) at (prev + 3, 1) to (start + 0, 2)
    = (c0 - c1)
Highest counter ID seen: c0

Function name: bad_counter_ids::ne_good_message
Raw bytes (21): 0x[01, 01, 01, 01, 05, 03, 01, 1f, 01, 02, 0f, 05, 02, 20, 00, 2b, 02, 01, 01, 00, 02]
Number of files: 1
- file 0 => global file 1
Number of expressions: 1
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
Number of file 0 mappings: 3
- Code(Counter(0)) at (prev + 31, 1) to (start + 2, 15)
- Code(Counter(1)) at (prev + 2, 32) to (start + 0, 43)
- Code(Expression(0, Sub)) at (prev + 1, 1) to (start + 0, 2)
    = (c0 - c1)
Highest counter ID seen: c1
------------------------------------------
stderr: none


---- [coverage-map] tests/coverage/conditions.rs stdout ----
Saved the actual cov-map to "/checkout/obj/build/x86_64-unknown-linux-gnu/test/coverage/conditions.coverage-map/conditions.cov-map"
diff of cov-map:

1 Function name: conditions::main
- Raw bytes (533): 0x[01, 01, 47, 05, 09, 01, 05, 09, 5d, 09, 27, 5d, 61, 27, 65, 5d, 61, 09, 23, 27, 65, 5d, 61, 01, 03, 03, 0d, 11, 51, 11, 4f, 51, 55, 4f, 59, 51, 55, 11, 4b, 4f, 59, 51, 55, 03, 97, 01, 0d, 11, 0d, 11, 0d, 11, 0d, 11, 0d, 11, 97, 01, 15, 0d, 11, 19, 45, 19, 8f, 01, 45, 49, 8f, 01, 4d, 45, 49, 19, 8b, 01, 8f, 01, 4d, 45, 49, 97, 01, db, 01, 0d, 11, 15, 19, 15, 19, 15, 19, 1d, 21, 15, 19, db, 01, 1d, 15, 19, 21, 39, 21, d3, 01, 39, 3d, d3, 01, 41, 39, 3d, 21, cf, 01, d3, 01, 41, 39, 3d, db, 01, 97, 02, 15, 19, 1d, 21, 25, 29, 1d, 21, 97, 02, 25, 1d, 21, 29, 2d, 29, 8f, 02, 2d, 31, 8f, 02, 35, 2d, 31, 29, 8b, 02, 8f, 02, 35, 2d, 31, 97, 02, 9b, 02, 1d, 21, 25, 29, 44, 01, 03, 01, 02, 0c, 01, 02, 0d, 02, 06, 00, 02, 05, 00, 06, 03, 03, 09, 00, 0a, 01, 00, 10, 00, 1d, 05, 01, 09, 01, 0a, 06, 02, 0f, 00, 1c, 09, 01, 0c, 00, 19, 0a, 00, 1d, 00, 2a, 0e, 00, 2e, 00, 3c, 23, 00, 3d, 02, 0a, 1e, 02, 09, 00, 0a, 09, 01, 09, 01, 12, 2a, 03, 09, 00, 0f, 03, 03, 09, 01, 0c, 03, 01, 0d, 02, 06, 00, 02, 05, 00, 06, 03, 02, 08, 00, 15, 0d, 00, 16, 02, 06, 2e, 02, 0f, 00, 1c, 11, 01, 0c, 00, 19, 32, 00, 1d, 00, 2a, 36, 00, 2e, 00, 3c, 4b, 00, 3d, 02, 0a, 46, 02, 09, 00, 0a, 11, 01, 09, 00, 17, 52, 02, 09, 00, 0f, 97, 01, 03, 08, 00, 0c, 97, 01, 01, 0d, 01, 10, 97, 01, 01, 11, 02, 0a, 00, 02, 09, 00, 0a, 97, 01, 02, 0c, 00, 19, 15, 00, 1a, 02, 0a, 6a, 04, 11, 00, 1e, 19, 01, 10, 00, 1d, 72, 00, 21, 00, 2e, 76, 00, 32, 00, 40, 8b, 01, 00, 41, 02, 0e, 86, 01, 02, 0d, 00, 0e, 19, 01, 0d, 00, 1b, 92, 01, 02, 0d, 00, 13, 00, 02, 05, 00, 06, db, 01, 02, 09, 01, 0c, db, 01, 01, 0d, 02, 06, 00, 02, 05, 00, 06, 97, 02, 02, 09, 00, 0a, db, 01, 00, 10, 00, 1d, 1d, 00, 1e, 02, 06, ae, 01, 02, 0f, 00, 1c, 21, 01, 0c, 00, 19, b6, 01, 00, 1d, 00, 2a, ba, 01, 00, 2e, 00, 3c, cf, 01, 00, 3d, 02, 0a, ca, 01, 02, 09, 00, 0a, 21, 01, 09, 00, 17, d6, 01, 02, 0d, 02, 0f, 9b, 02, 05, 09, 00, 0a, 97, 02, 00, 10, 00, 1d, 25, 00, 1e, 02, 06, ea, 01, 02, 0f, 00, 1c, 29, 01, 0c, 00, 19, f2, 01, 00, 1d, 00, 2a, f6, 01, 00, 2e, 00, 3c, 8b, 02, 00, 3d, 02, 0a, 86, 02, 02, 09, 00, 0a, 29, 01, 09, 00, 17, 92, 02, 02, 09, 00, 0f, 01, 02, 01, 00, 02]
+ Raw bytes (471): 0x[01, 01, 33, 05, 09, 01, 05, 09, 51, 09, 13, 51, 55, 01, 03, 03, 0d, 11, 49, 11, 27, 49, 4d, 03, 5b, 0d, 11, 0d, 11, 0d, 11, 0d, 11, 0d, 11, 5b, 15, 0d, 11, 19, 41, 19, 53, 41, 45, 5b, 8b, 01, 0d, 11, 15, 19, 15, 19, 15, 19, 1d, 21, 15, 19, 8b, 01, 1d, 15, 19, 21, 39, 21, 83, 01, 39, 3d, 8b, 01, c7, 01, 15, 19, 1d, 21, 25, 29, 1d, 21, c7, 01, 25, 1d, 21, 29, 2d, 29, bf, 01, 2d, 31, bf, 01, 35, 2d, 31, 29, bb, 01, bf, 01, 35, 2d, 31, c7, 01, cb, 01, 1d, 21, 25, 29, 44, 01, 03, 01, 02, 0c, 01, 02, 0d, 02, 06, 00, 02, 05, 00, 06, 03, 03, 09, 00, 0a, 01, 00, 10, 00, 1d, 05, 01, 09, 01, 0a, 06, 02, 0f, 00, 1c, 09, 01, 0c, 00, 19, 0a, 00, 1d, 00, 2a, 0e, 00, 2e, 00, 3c, 09, 00, 3d, 02, 0a, 00, 02, 09, 00, 0a, 09, 01, 09, 01, 12, 16, 03, 09, 00, 0f, 03, 03, 09, 01, 0c, 03, 01, 0d, 02, 06, 00, 02, 05, 00, 06, 03, 02, 08, 00, 15, 0d, 00, 16, 02, 06, 1a, 02, 0f, 00, 1c, 11, 01, 0c, 00, 19, 1e, 00, 1d, 00, 2a, 22, 00, 2e, 00, 3c, 11, 00, 3d, 02, 0a, 00, 02, 09, 00, 0a, 11, 01, 09, 00, 17, 2a, 02, 09, 00, 0f, 5b, 03, 08, 00, 0c, 5b, 01, 0d, 01, 10, 5b, 01, 11, 02, 0a, 00, 02, 09, 00, 0a, 5b, 02, 0c, 00, 19, 15, 00, 1a, 02, 0a, 42, 04, 11, 00, 1e, 19, 01, 10, 00, 1d, 4a, 00, 21, 00, 2e, 4e, 00, 32, 00, 40, 19, 00, 41, 02, 0e, 00, 02, 0d, 00, 0e, 19, 01, 0d, 00, 1b, 56, 02, 0d, 00, 13, 00, 02, 05, 00, 06, 8b, 01, 02, 09, 01, 0c, 8b, 01, 01, 0d, 02, 06, 00, 02, 05, 00, 06, c7, 01, 02, 09, 00, 0a, 8b, 01, 00, 10, 00, 1d, 1d, 00, 1e, 02, 06, 72, 02, 0f, 00, 1c, 21, 01, 0c, 00, 19, 7a, 00, 1d, 00, 2a, 7e, 00, 2e, 00, 3c, 21, 00, 3d, 02, 0a, 00, 02, 09, 00, 0a, 21, 01, 09, 00, 17, 86, 01, 02, 0d, 02, 0f, cb, 01, 05, 09, 00, 0a, c7, 01, 00, 10, 00, 1d, 25, 00, 1e, 02, 06, 9a, 01, 02, 0f, 00, 1c, 29, 01, 0c, 00, 19, a2, 01, 00, 1d, 00, 2a, a6, 01, 00, 2e, 00, 3c, bb, 01, 00, 3d, 02, 0a, b6, 01, 02, 09, 00, 0a, 29, 01, 09, 00, 17, c2, 01, 02, 09, 00, 0f, 01, 02, 01, 00, 02]
3 Number of files: 1
4 - file 0 => global file 1
- Number of expressions: 71
+ Number of expressions: 51
6 - expression 0 operands: lhs = Counter(1), rhs = Counter(2)
7 - expression 1 operands: lhs = Counter(0), rhs = Counter(1)
- - expression 2 operands: lhs = Counter(2), rhs = Counter(23)
- - expression 3 operands: lhs = Counter(2), rhs = Expression(9, Add)
- - expression 4 operands: lhs = Counter(23), rhs = Counter(24)
- - expression 5 operands: lhs = Expression(9, Add), rhs = Counter(25)
- - expression 6 operands: lhs = Counter(23), rhs = Counter(24)
- - expression 7 operands: lhs = Counter(2), rhs = Expression(8, Add)
- - expression 8 operands: lhs = Expression(9, Add), rhs = Counter(25)
- - expression 9 operands: lhs = Counter(23), rhs = Counter(24)
- - expression 10 operands: lhs = Counter(0), rhs = Expression(0, Add)
- - expression 11 operands: lhs = Expression(0, Add), rhs = Counter(3)
- - expression 12 operands: lhs = Counter(4), rhs = Counter(20)
- - expression 13 operands: lhs = Counter(4), rhs = Expression(19, Add)
- - expression 14 operands: lhs = Counter(20), rhs = Counter(21)
- - expression 15 operands: lhs = Expression(19, Add), rhs = Counter(22)
- - expression 16 operands: lhs = Counter(20), rhs = Counter(21)
- - expression 17 operands: lhs = Counter(4), rhs = Expression(18, Add)
- - expression 18 operands: lhs = Expression(19, Add), rhs = Counter(22)
- - expression 19 operands: lhs = Counter(20), rhs = Counter(21)
- - expression 20 operands: lhs = Expression(0, Add), rhs = Expression(37, Add)
- - expression 21 operands: lhs = Counter(3), rhs = Counter(4)
+ - expression 2 operands: lhs = Counter(2), rhs = Counter(20)
+ - expression 3 operands: lhs = Counter(2), rhs = Expression(4, Add)
+ - expression 4 operands: lhs = Counter(20), rhs = Counter(21)
+ - expression 5 operands: lhs = Counter(0), rhs = Expression(0, Add)
+ - expression 6 operands: lhs = Expression(0, Add), rhs = Counter(3)
+ - expression 7 operands: lhs = Counter(4), rhs = Counter(18)
+ - expression 8 operands: lhs = Counter(4), rhs = Expression(9, Add)
+ - expression 9 operands: lhs = Counter(18), rhs = Counter(19)
+ - expression 10 operands: lhs = Expression(0, Add), rhs = Expression(22, Add)
+ - expression 11 operands: lhs = Counter(3), rhs = Counter(4)
+ - expression 12 operands: lhs = Counter(3), rhs = Counter(4)
+ - expression 13 operands: lhs = Counter(3), rhs = Counter(4)
+ - expression 14 operands: lhs = Counter(3), rhs = Counter(4)
+ - expression 15 operands: lhs = Counter(3), rhs = Counter(4)
+ - expression 16 operands: lhs = Expression(22, Add), rhs = Counter(5)
+ - expression 17 operands: lhs = Counter(3), rhs = Counter(4)
+ - expression 18 operands: lhs = Counter(6), rhs = Counter(16)
+ - expression 19 operands: lhs = Counter(6), rhs = Expression(20, Add)
+ - expression 20 operands: lhs = Counter(16), rhs = Counter(17)
+ - expression 21 operands: lhs = Expression(22, Add), rhs = Expression(34, Add)
28 - expression 22 operands: lhs = Counter(3), rhs = Counter(4)
- - expression 23 operands: lhs = Counter(3), rhs = Counter(4)
- - expression 24 operands: lhs = Counter(3), rhs = Counter(4)
- - expression 25 operands: lhs = Counter(3), rhs = Counter(4)
- - expression 26 operands: lhs = Expression(37, Add), rhs = Counter(5)
- - expression 27 operands: lhs = Counter(3), rhs = Counter(4)
- - expression 28 operands: lhs = Counter(6), rhs = Counter(17)
- - expression 29 operands: lhs = Counter(6), rhs = Expression(35, Add)
- - expression 30 operands: lhs = Counter(17), rhs = Counter(18)
- - expression 31 operands: lhs = Expression(35, Add), rhs = Counter(19)
- - expression 32 operands: lhs = Counter(17), rhs = Counter(18)
- - expression 33 operands: lhs = Counter(6), rhs = Expression(34, Add)
- - expression 34 operands: lhs = Expression(35, Add), rhs = Counter(19)
- - expression 35 operands: lhs = Counter(17), rhs = Counter(18)
- - expression 36 operands: lhs = Expression(37, Add), rhs = Expression(54, Add)
- - expression 37 operands: lhs = Counter(3), rhs = Counter(4)
- - expression 38 operands: lhs = Counter(5), rhs = Counter(6)
- - expression 39 operands: lhs = Counter(5), rhs = Counter(6)
- - expression 40 operands: lhs = Counter(5), rhs = Counter(6)
- - expression 41 operands: lhs = Counter(7), rhs = Counter(8)
- - expression 42 operands: lhs = Counter(5), rhs = Counter(6)
- - expression 43 operands: lhs = Expression(54, Add), rhs = Counter(7)
- - expression 44 operands: lhs = Counter(5), rhs = Counter(6)
- - expression 45 operands: lhs = Counter(8), rhs = Counter(14)
- - expression 46 operands: lhs = Counter(8), rhs = Expression(52, Add)
- - expression 47 operands: lhs = Counter(14), rhs = Counter(15)
- - expression 48 operands: lhs = Expression(52, Add), rhs = Counter(16)
- - expression 49 operands: lhs = Counter(14), rhs = Counter(15)
- - expression 50 operands: lhs = Counter(8), rhs = Expression(51, Add)
- - expression 51 operands: lhs = Expression(52, Add), rhs = Counter(16)
- - expression 52 operands: lhs = Counter(14), rhs = Counter(15)
- - expression 53 operands: lhs = Expression(54, Add), rhs = Expression(69, Add)
- - expression 54 operands: lhs = Counter(5), rhs = Counter(6)
- - expression 55 operands: lhs = Counter(7), rhs = Counter(8)
- - expression 56 operands: lhs = Counter(9), rhs = Counter(10)
- - expression 57 operands: lhs = Counter(7), rhs = Counter(8)
- - expression 58 operands: lhs = Expression(69, Add), rhs = Counter(9)
- - expression 59 operands: lhs = Counter(7), rhs = Counter(8)
- - expression 60 operands: lhs = Counter(10), rhs = Counter(11)
- - expression 61 operands: lhs = Counter(10), rhs = Expression(67, Add)
- - expression 62 operands: lhs = Counter(11), rhs = Counter(12)
- - expression 63 operands: lhs = Expression(67, Add), rhs = Counter(13)
- - expression 64 operands: lhs = Counter(11), rhs = Counter(12)
- - expression 65 operands: lhs = Counter(10), rhs = Expression(66, Add)
- - expression 66 operands: lhs = Expression(67, Add), rhs = Counter(13)
- - expression 67 operands: lhs = Counter(11), rhs = Counter(12)
- - expression 68 operands: lhs = Expression(69, Add), rhs = Expression(70, Add)
- - expression 69 operands: lhs = Counter(7), rhs = Counter(8)
- - expression 70 operands: lhs = Counter(9), rhs = Counter(10)
+ - expression 23 operands: lhs = Counter(5), rhs = Counter(6)
+ - expression 24 operands: lhs = Counter(5), rhs = Counter(6)
+ - expression 25 operands: lhs = Counter(5), rhs = Counter(6)
+ - expression 26 operands: lhs = Counter(7), rhs = Counter(8)
+ - expression 27 operands: lhs = Counter(5), rhs = Counter(6)
+ - expression 28 operands: lhs = Expression(34, Add), rhs = Counter(7)
+ - expression 29 operands: lhs = Counter(5), rhs = Counter(6)
+ - expression 30 operands: lhs = Counter(8), rhs = Counter(14)
+ - expression 31 operands: lhs = Counter(8), rhs = Expression(32, Add)
+ - expression 32 operands: lhs = Counter(14), rhs = Counter(15)
+ - expression 33 operands: lhs = Expression(34, Add), rhs = Expression(49, Add)
+ - expression 34 operands: lhs = Counter(5), rhs = Counter(6)
+ - expression 35 operands: lhs = Counter(7), rhs = Counter(8)
+ - expression 36 operands: lhs = Counter(9), rhs = Counter(10)
+ - expression 37 operands: lhs = Counter(7), rhs = Counter(8)
+ - expression 38 operands: lhs = Expression(49, Add), rhs = Counter(9)
+ - expression 39 operands: lhs = Counter(7), rhs = Counter(8)
+ - expression 40 operands: lhs = Counter(10), rhs = Counter(11)
+ - expression 41 operands: lhs = Counter(10), rhs = Expression(47, Add)
+ - expression 42 operands: lhs = Counter(11), rhs = Counter(12)
+ - expression 43 operands: lhs = Expression(47, Add), rhs = Counter(13)
+ - expression 44 operands: lhs = Counter(11), rhs = Counter(12)
+ - expression 45 operands: lhs = Counter(10), rhs = Expression(46, Add)
+ - expression 46 operands: lhs = Expression(47, Add), rhs = Counter(13)
+ - expression 47 operands: lhs = Counter(11), rhs = Counter(12)
+ - expression 48 operands: lhs = Expression(49, Add), rhs = Expression(50, Add)
+ - expression 49 operands: lhs = Counter(7), rhs = Counter(8)
+ - expression 50 operands: lhs = Counter(9), rhs = Counter(10)
77 Number of file 0 mappings: 68
78 - Code(Counter(0)) at (prev + 3, 1) to (start + 2, 12)
79 - Code(Counter(0)) at (prev + 2, 13) to (start + 2, 6)

86     = (c0 - c1)
87 - Code(Counter(2)) at (prev + 1, 12) to (start + 0, 25)
88 - Code(Expression(2, Sub)) at (prev + 0, 29) to (start + 0, 42)
-     = (c2 - c23)
+     = (c2 - c20)
90 - Code(Expression(3, Sub)) at (prev + 0, 46) to (start + 0, 60)
-     = (c2 - (c23 + c24))
- - Code(Expression(8, Add)) at (prev + 0, 61) to (start + 2, 10)
-     = ((c23 + c24) + c25)
- - Code(Expression(7, Sub)) at (prev + 2, 9) to (start + 0, 10)
-     = (c2 - ((c23 + c24) + c25))
+     = (c2 - (c20 + c21))
+ - Code(Counter(2)) at (prev + 0, 61) to (start + 2, 10)
+ - Code(Zero) at (prev + 2, 9) to (start + 0, 10)
96 - Code(Counter(2)) at (prev + 1, 9) to (start + 1, 18)
- - Code(Expression(10, Sub)) at (prev + 3, 9) to (start + 0, 15)
+ - Code(Expression(5, Sub)) at (prev + 3, 9) to (start + 0, 15)
98     = (c0 - (c1 + c2))
99 - Code(Expression(0, Add)) at (prev + 3, 9) to (start + 1, 12)
100     = (c1 + c2)

104 - Code(Expression(0, Add)) at (prev + 2, 8) to (start + 0, 21)
105     = (c1 + c2)
106 - Code(Counter(3)) at (prev + 0, 22) to (start + 2, 6)
- - Code(Expression(11, Sub)) at (prev + 2, 15) to (start + 0, 28)
+ - Code(Expression(6, Sub)) at (prev + 2, 15) to (start + 0, 28)
108     = ((c1 + c2) - c3)
109 - Code(Counter(4)) at (prev + 1, 12) to (start + 0, 25)
- - Code(Expression(12, Sub)) at (prev + 0, 29) to (start + 0, 42)
-     = (c4 - c20)
- - Code(Expression(13, Sub)) at (prev + 0, 46) to (start + 0, 60)
-     = (c4 - (c20 + c21))
- - Code(Expression(18, Add)) at (prev + 0, 61) to (start + 2, 10)
-     = ((c20 + c21) + c22)
- - Code(Expression(17, Sub)) at (prev + 2, 9) to (start + 0, 10)
-     = (c4 - ((c20 + c21) + c22))
+ - Code(Expression(7, Sub)) at (prev + 0, 29) to (start + 0, 42)
+     = (c4 - c18)
+ - Code(Expression(8, Sub)) at (prev + 0, 46) to (start + 0, 60)
+     = (c4 - (c18 + c19))
+ - Code(Counter(4)) at (prev + 0, 61) to (start + 2, 10)
+ - Code(Zero) at (prev + 2, 9) to (start + 0, 10)
118 - Code(Counter(4)) at (prev + 1, 9) to (start + 0, 23)
- - Code(Expression(20, Sub)) at (prev + 2, 9) to (start + 0, 15)
+ - Code(Expression(10, Sub)) at (prev + 2, 9) to (start + 0, 15)
120     = ((c1 + c2) - (c3 + c4))
- - Code(Expression(37, Add)) at (prev + 3, 8) to (start + 0, 12)
+ - Code(Expression(22, Add)) at (prev + 3, 8) to (start + 0, 12)
122     = (c3 + c4)
- - Code(Expression(37, Add)) at (prev + 1, 13) to (start + 1, 16)
+ - Code(Expression(22, Add)) at (prev + 1, 13) to (start + 1, 16)
124     = (c3 + c4)
- - Code(Expression(37, Add)) at (prev + 1, 17) to (start + 2, 10)
+ - Code(Expression(22, Add)) at (prev + 1, 17) to (start + 2, 10)
126     = (c3 + c4)
127 - Code(Zero) at (prev + 2, 9) to (start + 0, 10)
- - Code(Expression(37, Add)) at (prev + 2, 12) to (start + 0, 25)
+ - Code(Expression(22, Add)) at (prev + 2, 12) to (start + 0, 25)
129     = (c3 + c4)
130 - Code(Counter(5)) at (prev + 0, 26) to (start + 2, 10)
- - Code(Expression(26, Sub)) at (prev + 4, 17) to (start + 0, 30)
+ - Code(Expression(16, Sub)) at (prev + 4, 17) to (start + 0, 30)
132     = ((c3 + c4) - c5)
133 - Code(Counter(6)) at (prev + 1, 16) to (start + 0, 29)
- - Code(Expression(28, Sub)) at (prev + 0, 33) to (start + 0, 46)
-     = (c6 - c17)
- - Code(Expression(29, Sub)) at (prev + 0, 50) to (start + 0, 64)
-     = (c6 - (c17 + c18))
- - Code(Expression(34, Add)) at (prev + 0, 65) to (start + 2, 14)
-     = ((c17 + c18) + c19)
- - Code(Expression(33, Sub)) at (prev + 2, 13) to (start + 0, 14)
-     = (c6 - ((c17 + c18) + c19))
+ - Code(Expression(18, Sub)) at (prev + 0, 33) to (start + 0, 46)
+     = (c6 - c16)
+ - Code(Expression(19, Sub)) at (prev + 0, 50) to (start + 0, 64)
+     = (c6 - (c16 + c17))
+ - Code(Counter(6)) at (prev + 0, 65) to (start + 2, 14)
+ - Code(Zero) at (prev + 2, 13) to (start + 0, 14)
142 - Code(Counter(6)) at (prev + 1, 13) to (start + 0, 27)
- - Code(Expression(36, Sub)) at (prev + 2, 13) to (start + 0, 19)
+ - Code(Expression(21, Sub)) at (prev + 2, 13) to (start + 0, 19)
144     = ((c3 + c4) - (c5 + c6))
145 - Code(Zero) at (prev + 2, 5) to (start + 0, 6)
- - Code(Expression(54, Add)) at (prev + 2, 9) to (start + 1, 12)
+ - Code(Expression(34, Add)) at (prev + 2, 9) to (start + 1, 12)
147     = (c5 + c6)
- - Code(Expression(54, Add)) at (prev + 1, 13) to (start + 2, 6)
+ - Code(Expression(34, Add)) at (prev + 1, 13) to (start + 2, 6)
149     = (c5 + c6)
150 - Code(Zero) at (prev + 2, 5) to (start + 0, 6)
- - Code(Expression(69, Add)) at (prev + 2, 9) to (start + 0, 10)
+ - Code(Expression(49, Add)) at (prev + 2, 9) to (start + 0, 10)
152     = (c7 + c8)
- - Code(Expression(54, Add)) at (prev + 0, 16) to (start + 0, 29)
+ - Code(Expression(34, Add)) at (prev + 0, 16) to (start + 0, 29)
154     = (c5 + c6)
155 - Code(Counter(7)) at (prev + 0, 30) to (start + 2, 6)
- - Code(Expression(43, Sub)) at (prev + 2, 15) to (start + 0, 28)
+ - Code(Expression(28, Sub)) at (prev + 2, 15) to (start + 0, 28)
157     = ((c5 + c6) - c7)
158 - Code(Counter(8)) at (prev + 1, 12) to (start + 0, 25)
- - Code(Expression(45, Sub)) at (prev + 0, 29) to (start + 0, 42)
+ - Code(Expression(30, Sub)) at (prev + 0, 29) to (start + 0, 42)
160     = (c8 - c14)
- - Code(Expression(46, Sub)) at (prev + 0, 46) to (start + 0, 60)
+ - Code(Expression(31, Sub)) at (prev + 0, 46) to (start + 0, 60)
162     = (c8 - (c14 + c15))
- - Code(Expression(51, Add)) at (prev + 0, 61) to (start + 2, 10)
-     = ((c14 + c15) + c16)
- - Code(Expression(50, Sub)) at (prev + 2, 9) to (start + 0, 10)
-     = (c8 - ((c14 + c15) + c16))
+ - Code(Counter(8)) at (prev + 0, 61) to (start + 2, 10)
+ - Code(Zero) at (prev + 2, 9) to (start + 0, 10)
167 - Code(Counter(8)) at (prev + 1, 9) to (start + 0, 23)
- - Code(Expression(53, Sub)) at (prev + 2, 13) to (start + 2, 15)
+ - Code(Expression(33, Sub)) at (prev + 2, 13) to (start + 2, 15)
169     = ((c5 + c6) - (c7 + c8))
- - Code(Expression(70, Add)) at (prev + 5, 9) to (start + 0, 10)
+ - Code(Expression(50, Add)) at (prev + 5, 9) to (start + 0, 10)
171     = (c9 + c10)
- - Code(Expression(69, Add)) at (prev + 0, 16) to (start + 0, 29)
+ - Code(Expression(49, Add)) at (prev + 0, 16) to (start + 0, 29)

@FractalFir FractalFir closed this Mar 15, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
has-merge-commits PR has merge commits, merge with caution. perf-regression Performance regression. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants