[llvm] [AMDGPU] Fold high-half 16-bit extracts into VOP3 op_sel (PR #222255)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 13 13:14:16 PDT 2026
================
@@ -4221,16 +4221,28 @@ bool AMDGPUDAGToDAGISel::SelectSWMMACIndex32(SDValue In, SDValue &Src,
bool AMDGPUDAGToDAGISel::SelectVOP3OpSel(SDValue In, SDValue &Src,
SDValue &SrcMods) const {
+ unsigned Mods = SISrcMods::NONE;
Src = In;
- // FIXME: Handle op_sel
- SrcMods = CurDAG->getTargetConstant(0, SDLoc(In), MVT::i32);
+ if (!Subtarget->useRealTrue16Insts() && In.getValueSizeInBits() == 16 &&
+ isExtractHiElt(Src, Src))
+ Mods |= SISrcMods::OP_SEL_0;
+ SrcMods = CurDAG->getTargetConstant(Mods, SDLoc(In), MVT::i32);
return true;
}
bool AMDGPUDAGToDAGISel::SelectVOP3OpSelMods(SDValue In, SDValue &Src,
SDValue &SrcMods) const {
- // FIXME: Handle op_sel
- return SelectVOP3Mods(In, Src, SrcMods);
+ unsigned Mods;
+ if (!SelectVOP3ModsImpl(In, Src, Mods, /*IsCanonicalizing=*/true,
+ /*AllowAbs=*/true))
+ return false;
+
+ if (!Subtarget->useRealTrue16Insts() && In.getValueSizeInBits() == 16 &&
----------------
arsenm wrote:
Why does true16 matter?
https://github.com/llvm/llvm-project/pull/222255
More information about the llvm-commits
mailing list