[llvm] [NVPTX] Use PRMT instruction to lower i16 bswap (PR #168968)
Princeton Ferro via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 21 16:13:18 PST 2025
================
@@ -2570,6 +2572,44 @@ static SDValue lowerTcgen05St(SDValue Op, SelectionDAG &DAG) {
return Tcgen05StNode;
}
+static SDValue lowerBSWAP(SDValue Op, SelectionDAG &DAG) {
+ SDLoc DL(Op);
+ SDValue Src = Op.getOperand(0);
+ EVT VT = Op.getValueType();
+
+ switch (VT.getSimpleVT().SimpleTy) {
+ case MVT::i16: {
+ SDValue Extended = DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i32, Src);
+ SDValue Swapped =
+ getPRMT(Extended, DAG.getConstant(0, DL, MVT::i32), 0x7701, DL, DAG);
+ return DAG.getNode(ISD::TRUNCATE, DL, MVT::i16, Swapped);
+ }
+ case MVT::i32: {
+ return getPRMT(Src, DAG.getConstant(0, DL, MVT::i32), 0x0123, DL, DAG);
+ }
+ case MVT::v2i16: {
+ SDValue Converted = DAG.getBitcast(MVT::i32, Src);
+ SDValue Swapped =
+ getPRMT(Converted, DAG.getConstant(0, DL, MVT::i32), 0x2301, DL, DAG);
+ return DAG.getNode(ISD::BITCAST, DL, MVT::v2i16, Swapped);
+ }
+ case MVT::i64: {
----------------
Prince781 wrote:
Handle v2i32?
https://github.com/llvm/llvm-project/pull/168968
More information about the llvm-commits
mailing list