================
@@ -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

Reply via email to