bytecodealliance / bytecodealliance/wasmtime

Cranelift: scoped elaboration duplicates pure operations even when there is no partial redundancy to avoid

Open
#8,959 1 comment 0 reactions 0 assignees View on GitHub
bug cranelift
Dominant language
Rust
Stars
18.6k
Forks
1.8k
Avg merge
1d 18h
Merged PRs (30d)
126

Description

### `.clif` Test Case

```
test optimize
set opt_level=speed
target x86_64

function %f(i32, i32, i32) -> i32 {
block0(v0: i32, v1: i32, v2: i32):
v3 = imul.i32 v0, v1
brif v2, block1, block2
block1:
return v3
block2:
v4 = iconst.i32 1
v5 = iadd.i32 v3, v4
return v5

}

;; check that the two occurrences of v3 are still the same value after optimization
; check: return v3
; check: iadd.i32 v3, v4
```

### Steps to Reproduce

* `clif-util test meow.clif`

### Expected Results

The `imul` stays in `block0`.

### Actual Results

The `imul` is needlessly duplicated between `block1` and `block2`.

### Versions and Environment

Cranelift version or commit: de29ce35982eba2060709491309ccc93b397168c (main at the time of writing)

Operating system: Linux

Architecture: x86_64

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.