[llvm] [AMDGPU] Elide bitcast fold i64 imm to build_vector (PR #154115)
Janek van Oirschot via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 9 06:29:43 PDT 2025
================
@@ -14584,13 +14584,39 @@ SITargetLowering::performExtractVectorEltCombine(SDNode *N,
return V;
}
+ // EXTRACT_VECTOR_ELT (v2i32 bitcast (i64/f64:k), Idx)
+ // =>
+ // i32:Lo(k) if Idx == 0, or
+ // i32:Hi(k) if Idx == 1
+ auto *Idx = dyn_cast<ConstantSDNode>(N->getOperand(1));
+ if (Vec.getOpcode() == ISD::BITCAST && VecVT == MVT::v2i32 && Idx) {
+ SDLoc SL(N);
+ SDValue PeekThrough = peekThroughBitcasts(Vec);
+ auto *KImm = dyn_cast<ConstantSDNode>(PeekThrough);
+ if (KImm && KImm->getValueType(0).getSizeInBits() == 64) {
+ uint64_t KImmValue = KImm->getZExtValue();
+ if (Idx->getZExtValue() == 0)
+ return DAG.getConstant(Lo_32(KImmValue), SL, MVT::i32);
+ else
+ return DAG.getConstant(Hi_32(KImmValue), SL, MVT::i32);
----------------
JanekvO wrote:
Also had to explicitly mask the value
https://github.com/llvm/llvm-project/pull/154115
More information about the llvm-commits
mailing list