IR: Fold ClampToZero into the 31-bit packs

Vec4ClampToZero and Vec2ClampToZero only ever fed Vec4Pack31To8 and
Vec2Pack31To16, for vi2uc and vi2us. The packs now clamp negative lanes
to zero themselves, which saves an op and a vector temp, and lets x64
clamp with PACKUSWB's saturation after an arithmetic shift.

While at it, RISC-V compiles Vec2Unpack16To31, Vec2Pack31To16 and
Vec4Pack32To8, and LoongArch Vec2Unpack16To31, Vec2Pack31To16 and the
non-LSX Vec4Pack32To8, all of which went to the IR interpreter.
LoongArch's Vec2Pack32To16 and Vec2Unpack16To32 now take their scalar
path with LSX too, instead of falling back.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Henrik RydgårdandClaude Opus 5.5 committed 2026-09-24 14:31:22 -06:00
1 parent 3db7c65e86
commit eaf55c467b
15 files changed
+162 -213

No files matched your search

-5
View File
@@ -422,11 +422,6 @@ void IRNativeBackend::CompileIRInst(IRInst inst) {
CompIR_VecPack(inst);
break;
case IROp::Vec4ClampToZero:
case IROp::Vec2ClampToZero:
CompIR_VecClamp(inst);
break;
case IROp::FSin:
case IROp::FCos:
case IROp::FRSqrt: