================ @@ -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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits