llvm / llvm/llvm-project

Missed optimization: Fold (xor (xor %1, (and %2, -2)), 1) into (xor %1, (or %2, 1))

Open
#195,019 1 comment 0 reactions 0 assignees View on GitHub
llvm:optimizations missed-optimization
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

The following reduced IR is derived from https://github.com/python/cpython/blob/234c12c/Modules/sha1module.c#L166

Godbolt: https://godbolt.org/z/7MhE4Yc6d
alive2 proof: https://alive2.llvm.org/ce/z/bBT2e9

```llvm
define void @update(ptr %0, i32 %1, i32 %2) {
%.masked = and i32 %2, -2
%4 = xor i32 %1, %.masked
%5 = xor i32 %4, 1
store i32 %5, ptr %0, align 4
ret void
}
```

expected:
```llvm
define void @tgt(ptr %0, i32 %1, i32 %2) {
%4 = or i32 %2, 1
%5 = xor i32 %1, %4
store i32 %5, ptr %0, align 4
ret void
}
```

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.