[llvm-branch-commits] [llvm] [GlobalISel] Add computeNumSignBits for G_SHUFFLE_VECTOR (PR #139505)
Jay Foad via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon May 12 05:38:34 PDT 2025
================
@@ -874,6 +874,30 @@ unsigned GISelValueTracking::computeNumSignBits(Register R,
SrcTy.getScalarSizeInBits());
break;
}
+ case TargetOpcode::G_SHUFFLE_VECTOR: {
+ // Collect the minimum number of sign bits that are shared by every vector
+ // element referenced by the shuffle.
+ APInt DemandedLHS, DemandedRHS;
+ unsigned NumElts = MRI.getType(MI.getOperand(1).getReg()).getNumElements();
+ if (!getShuffleDemandedElts(NumElts, MI.getOperand(3).getShuffleMask(),
+ DemandedElts, DemandedLHS, DemandedRHS))
+ return 1;
+
+ unsigned Tmp = std::numeric_limits<unsigned>::max();
+ if (!!DemandedLHS)
+ Tmp =
+ computeNumSignBits(MI.getOperand(1).getReg(), DemandedLHS, Depth + 1);
----------------
jayfoad wrote:
Should early-out here if Tmp is 1, to save a second expensive call to computeNumSignBits.
https://github.com/llvm/llvm-project/pull/139505
More information about the llvm-branch-commits
mailing list