Skip to content

Commit 9a696b6

Browse files
committed
Revert "[NVPTX] Prefer prmt.b32 over bfi.b32 (#110766)"
This reverts commit 3f9998a. It breaks downstream tests with egregious numerical differences. Unfortunately no upstream tests are broken, but the fact that a prior iteration of the commit (pre-optimization) does work with our downstream tests (coming from the Triton repo) supports the claim that the final version of the commit is incorrect. Reverting now so that the original author can evaluate.
1 parent 26b832a commit 9a696b6

File tree

3 files changed

+328
-335
lines changed

3 files changed

+328
-335
lines changed

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

+14-17
Original file line numberDiff line numberDiff line change
@@ -2332,23 +2332,20 @@ SDValue NVPTXTargetLowering::LowerBUILD_VECTOR(SDValue Op,
23322332
// Lower non-const v4i8 vector as byte-wise constructed i32, which allows us
23332333
// to optimize calculation of constant parts.
23342334
if (VT == MVT::v4i8) {
2335-
SDValue PRMT__10 = DAG.getNode(
2336-
NVPTXISD::PRMT, DL, MVT::v4i8,
2337-
{DAG.getAnyExtOrTrunc(Op->getOperand(0), DL, MVT::i32),
2338-
DAG.getAnyExtOrTrunc(Op->getOperand(1), DL, MVT::i32),
2339-
DAG.getConstant(0x3340, DL, MVT::i32),
2340-
DAG.getConstant(NVPTX::PTXPrmtMode::NONE, DL, MVT::i32)});
2341-
SDValue PRMT32__ = DAG.getNode(
2342-
NVPTXISD::PRMT, DL, MVT::v4i8,
2343-
{DAG.getAnyExtOrTrunc(Op->getOperand(2), DL, MVT::i32),
2344-
DAG.getAnyExtOrTrunc(Op->getOperand(3), DL, MVT::i32),
2345-
DAG.getConstant(0x4033, DL, MVT::i32),
2346-
DAG.getConstant(NVPTX::PTXPrmtMode::NONE, DL, MVT::i32)});
2347-
SDValue PRMT3210 = DAG.getNode(
2348-
NVPTXISD::PRMT, DL, MVT::v4i8,
2349-
{PRMT__10, PRMT32__, DAG.getConstant(0x5410, DL, MVT::i32),
2350-
DAG.getConstant(NVPTX::PTXPrmtMode::NONE, DL, MVT::i32)});
2351-
return DAG.getNode(ISD::BITCAST, DL, VT, PRMT3210);
2335+
SDValue C8 = DAG.getConstant(8, DL, MVT::i32);
2336+
SDValue E01 = DAG.getNode(
2337+
NVPTXISD::BFI, DL, MVT::i32,
2338+
DAG.getAnyExtOrTrunc(Op->getOperand(1), DL, MVT::i32),
2339+
DAG.getAnyExtOrTrunc(Op->getOperand(0), DL, MVT::i32), C8, C8);
2340+
SDValue E012 =
2341+
DAG.getNode(NVPTXISD::BFI, DL, MVT::i32,
2342+
DAG.getAnyExtOrTrunc(Op->getOperand(2), DL, MVT::i32),
2343+
E01, DAG.getConstant(16, DL, MVT::i32), C8);
2344+
SDValue E0123 =
2345+
DAG.getNode(NVPTXISD::BFI, DL, MVT::i32,
2346+
DAG.getAnyExtOrTrunc(Op->getOperand(3), DL, MVT::i32),
2347+
E012, DAG.getConstant(24, DL, MVT::i32), C8);
2348+
return DAG.getNode(ISD::BITCAST, DL, VT, E0123);
23522349
}
23532350
return Op;
23542351
}

0 commit comments

Comments
 (0)