[llvm] [DAGCombiner] Slighty simplify code in visitBSWAP. NFC (PR #193896)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 23 22:34:46 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-selectiondag
Author: Craig Topper (topperc)
<details>
<summary>Changes</summary>
Use alignDown and do computation in bits instead of converting to bytes and back to bits. This is similar to what we do in InstCombineCalls for the same transform.
---
Full diff: https://github.com/llvm/llvm-project/pull/193896.diff
1 Files Affected:
- (modified) llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (+5-6)
``````````diff
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 01d7023799138..2cff5b485fcfa 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -12141,16 +12141,15 @@ SDValue DAGCombiner::visitBSWAP(SDNode *N) {
return DAG.getConstant(0, DL, VT);
// If only one byte of the operand may be nonzero, bswap becomes a shift
// to the mirror byte.
- unsigned Lo = Known.countMinTrailingZeros();
- unsigned Hi = BW - Known.countMinLeadingZeros();
- if (unsigned SrcByte = Lo / 8; SrcByte == (Hi - 1) / 8) {
- unsigned DstByte = (BW / 8) - 1 - SrcByte;
- unsigned Opc = DstByte > SrcByte ? ISD::SHL : ISD::SRL;
+ unsigned TZ = alignDown(Known.countMinTrailingZeros(), 8);
+ unsigned LZ = alignDown(Known.countMinLeadingZeros(), 8);
+ if (BW - LZ - TZ == 8) {
+ unsigned Opc = LZ > TZ ? ISD::SHL : ISD::SRL;
// Skip if the target would re-expand the produced shift post-legalize.
// Targets that custom-lower byte-multiple shifts via bswap (e.g. MSP430
// for shl i16) would loop with this combine.
if (!LegalOperations || hasOperation(Opc, VT)) {
- unsigned Amt = AbsoluteDifference(DstByte, SrcByte) * 8;
+ unsigned Amt = AbsoluteDifference(LZ, TZ);
SDNodeFlags Flags =
Opc == ISD::SHL ? SDNodeFlags::NoUnsignedWrap : SDNodeFlags::Exact;
return DAG.getNode(Opc, DL, VT, N0,
``````````
</details>
https://github.com/llvm/llvm-project/pull/193896
More information about the llvm-commits
mailing list