llvm/llvm-project
Auf GitHub ansehen[AVX-512] Look for masked `vpmovqb` opportunities on Zen 4+
Open
#156.883 geöffnet am 4. Sept. 2025
backend:X86good first issuellvm:SelectionDAGmissed-optimization
Repository-Metriken
- Stars
- (26.378 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 1T 2h) (1.000 gemergte PRs in 30 T)
Beschreibung
Zig version: (Godbolt)
export fn foo(x: @Vector(8, u64), y: @Vector(8, u64)) @Vector(8, u8) {
return @select(u8, x == y, @popCount(x), @as(@Vector(8, u8), @splat(0)));
}
LLVM version: (Godbolt)
define dso_local range(i8 0, 65) <8 x i8> @foo(<8 x i64> %0, <8 x i64> %1) local_unnamed_addr {
Entry:
%2 = icmp eq <8 x i64> %0, %1
%3 = tail call range(i64 0, 65) <8 x i64> @llvm.ctpop.v8i64(<8 x i64> %0)
%4 = trunc nuw nsw <8 x i64> %3 to <8 x i8>
%5 = select <8 x i1> %2, <8 x i8> %4, <8 x i8> zeroinitializer
ret <8 x i8> %5
}
declare <8 x i64> @llvm.ctpop.v8i64(<8 x i64>) #1
Emits:
foo:
vpcmpeqq k1, zmm0, zmm1
vpopcntq zmm0, zmm0
vpmovqb xmm0, zmm0
vmovdqu8 xmm0 {k1} {z}, xmm0
vzeroupper
ret
Should be:
foo:
vpcmpeqq k1, zmm0, zmm1
vpopcntq zmm0, zmm0
vpmovqb xmm0 {k1}, zmm0
vzeroupper
ret