[llvm-branch-commits] [llvm] [GlobalISel] Add computeNumSignBits for G_SHUFFLE_VECTOR (PR #139505)
@@ -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::max(); +if (!!DemandedLHS) + Tmp = + computeNumSignBits(MI.getOperand(1).getReg(), DemandedLHS, Depth + 1); +if (!!DemandedRHS) { + unsigned Tmp2 = + computeNumSignBits(MI.getOperand(2).getReg(), DemandedRHS, Depth + 1); + Tmp = std::min(Tmp, Tmp2); +} +// If we don't know anything, early out and try computeKnownBits fall-back. +if (Tmp == 1) + break; +assert(Tmp <= TyBits && "Failed to determine minimum sign bits"); jayfoad wrote: I don't think this is particularly useful. You could just initialize `Tmp` to `TyBits` instead. https://github.com/llvm/llvm-project/pull/139505 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [GlobalISel] Add computeNumSignBits for G_SHUFFLE_VECTOR (PR #139505)
@@ -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::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 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [GlobalISel] Add computeNumSignBits for G_SHUFFLE_VECTOR (PR #139505)
https://github.com/jayfoad edited https://github.com/llvm/llvm-project/pull/139505 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits