AVX: Handle full broadcast in VDPPS

Another trivial case that can be handled without crazy codegen.
This commit is contained in:
LC committed 2026-06-27 10:11:27 -04:00
1 parent 11fe95d8ea
commit ee2fb57f4e
2 files changed
+9 -54

No files matched your search

@@ -4679,8 +4679,12 @@ Ref OpDispatchBuilder::VDPPSOpImpl(OpcodeArgs, const X86Tables::DecodedOperand&
// Now using the destination mask we choose where the result ends up
// It can duplicate and zero results
Ref Result = ZeroVec;
if (DstMask == 0b1111) {
// Full broadcast
return _VDupElement(DstSize, ElementSize, Temp, 0);
}
Ref Result = ZeroVec;
for (size_t i = 0; i < IR::NumElements(DstSize, ElementSize); ++i) {
const auto Bit = 1U << (i % 4);
@@ -4688,7 +4692,6 @@ Ref OpDispatchBuilder::VDPPSOpImpl(OpcodeArgs, const X86Tables::DecodedOperand&
Result = _VInsElement(DstSize, ElementSize, i, 0, Result, Temp);
}
}
return Result;
}
+4 -52
View File
@@ -2846,7 +2846,7 @@
]
},
"vdpps ymm0, ymm1, ymm2, 11111111b": {
"ExpectedInstructionCount": 61,
"ExpectedInstructionCount": 13,
"Comment": [
"Map 3 0b01 0x40 128-bit"
],
@@ -2860,58 +2860,10 @@
"splice z3.d, p6, z3.d, z1.d",
"movprfx z0, z3",
"faddp z0.s, p7/m, z0.s, z2.s",
"uzp1 z3.s, z0.s, z0.s",
"uzp1 z2.s, z0.s, z0.s",
"uzp2 z1.s, z0.s, z0.s",
"splice z3.d, p6, z3.d, z1.d",
"mov z1.s, s3",
"mrs x0, nzcv",
"index z0.s, #-4, #1",
"cmpeq p0.s, p7/z, z0.s, #-4",
"mov z2.s, p0/m, z1.s",
"msr nzcv, x0",
"mov z1.s, s3",
"mrs x0, nzcv",
"index z0.s, #-4, #1",
"cmpeq p0.s, p7/z, z0.s, #-3",
"mov z2.s, p0/m, z1.s",
"msr nzcv, x0",
"mov z1.s, s3",
"mrs x0, nzcv",
"index z0.s, #-4, #1",
"cmpeq p0.s, p7/z, z0.s, #-2",
"mov z2.s, p0/m, z1.s",
"msr nzcv, x0",
"mov z1.s, s3",
"mrs x0, nzcv",
"index z0.s, #-4, #1",
"cmpeq p0.s, p7/z, z0.s, #-1",
"mov z2.s, p0/m, z1.s",
"msr nzcv, x0",
"mov z1.s, s3",
"mrs x0, nzcv",
"index z0.s, #-4, #1",
"cmpeq p0.s, p7/z, z0.s, #0",
"mov z2.s, p0/m, z1.s",
"msr nzcv, x0",
"mov z1.s, s3",
"mrs x0, nzcv",
"index z0.s, #-4, #1",
"cmpeq p0.s, p7/z, z0.s, #1",
"mov z2.s, p0/m, z1.s",
"msr nzcv, x0",
"mov z1.s, s3",
"mrs x0, nzcv",
"index z0.s, #-4, #1",
"cmpeq p0.s, p7/z, z0.s, #2",
"mov z2.s, p0/m, z1.s",
"msr nzcv, x0",
"mov z1.s, s3",
"mov z16.d, z2.d",
"mrs x0, nzcv",
"index z0.s, #-4, #1",
"cmpeq p0.s, p7/z, z0.s, #3",
"mov z16.s, p0/m, z1.s",
"msr nzcv, x0"
"splice z2.d, p6, z2.d, z1.d",
"mov z16.s, s2"
]
},
"vdppd xmm0, xmm1, xmm2, 00000000b": {