Stream: git-wasmtime

Topic: wasmtime / issue #3262 Optimize lowering for popcnt(x) == 1


view this post on Zulip Wasmtime GitHub notifications bot (Aug 29 2021 at 09:30):

MaxGraey opened issue #3262:

Feature

This is fairly common pattern that generates LLVM-based languages for power of two code (x != 0 & (x & (x - 1) == 0 => popcnt(x) == 1). This is a pretty compact and fast representation, but not for platforms which don't support popcnt instructions, such as armv8 or x86 before Nehalem architecture.

Benefit

https://godbolt.org/z/dM4fqvozn

Implementation

During lowering I propose lower popcnt(x) == 1 pattern to x != 0 & (x & (x - 1) == 0 for some archs.

view this post on Zulip Wasmtime GitHub notifications bot (Aug 29 2021 at 09:32):

MaxGraey edited issue #3262:

Feature

This is fairly common pattern that generates LLVM-based languages for power of two code (x != 0 & (x & (x - 1) == 0 => popcnt(x) == 1). This is a pretty compact and fast representation, but not for platforms which don't support popcnt instructions, such as armv8 or x86 before Nehalem architecture. AArch64 could also benefit from this.

Benefit

https://godbolt.org/z/dM4fqvozn

Implementation

During lowering I propose lower popcnt(x) == 1 pattern to x != 0 & (x & (x - 1) == 0 for some archs.

view this post on Zulip Wasmtime GitHub notifications bot (Aug 29 2021 at 09:36):

MaxGraey edited issue #3262:

Feature

This is fairly common pattern that generates LLVM-based languages for power of two code (x != 0 & (x & (x - 1) == 0 => popcnt(x) == 1). This is a pretty compact and fast representation, but not for platforms which don't support popcnt instructions, such as armv8 or x86 before Nehalem architecture. AArch64 could also benefit from this.

Benefit

https://godbolt.org/z/dM4fqvozn

Implementation

During lowering I propose lower popcnt(x) == 1 pattern to (x != 0) & ((x & (x - 1) == 0) for some archs.


Last updated: Oct 23 2024 at 20:03 UTC