[llvm] [AMDGPU][SDAG] Legalise v2i32 or/xor/and instructions to make use of 64-bit wide instructions (PR #140694)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 2 12:31:29 PDT 2025
================
@@ -4048,6 +4048,72 @@ SDValue AMDGPUTargetLowering::splitBinaryBitConstantOpImpl(
return DAG.getNode(ISD::BITCAST, SL, MVT::i64, Vec);
}
+// Each shift has an optimisation to transform a 64-bit shift into a 32-bit
+// shift coupled with an AND if the shift amount is within certain bounds. The
+// vector code for this was being completely scalarised by the vector legalizer,
+// but when v2i32 is legal the vector legaliser only partially scalarises the
+// vector operations and the and is not elided. This function
+// scalarises the AND for this optimisation case, ensuring it is elided.
+static SDValue getShiftForReduction(SDNode *N, SelectionDAG &DAG) {
----------------
LU-JOHN wrote:
Can you add before and after patterns in the comments showing the intended transformation?
https://github.com/llvm/llvm-project/pull/140694
More information about the llvm-commits
mailing list