[PATCH] D80437: [CodeGen] Let computeKnownBits do something sensible for scalable vectors

David Sherwood via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 22 06:23:50 PDT 2020


david-arm created this revision.
david-arm added a reviewer: sdesmalen.
Herald added subscribers: llvm-commits, hiraditya, kristof.beyls.
Herald added a reviewer: rengolin.
Herald added a project: LLVM.
david-arm retitled this revision from "[CodeGen] Add support for extracting elements of scalable vectors" to "[CodeGen] Let computeKnownBits do something sensible for scalable vectors".
david-arm edited the summary of this revision.

Until we have a real need for computing known bits for scalable
vectors I have simply changed the code to bail out for now and
pretend we know nothing. I've also fixed up some simple callers of
computeKnownBits too.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D80437

Files:
  llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -2249,9 +2249,12 @@
 bool SelectionDAG::MaskedValueIsZero(SDValue V, const APInt &Mask,
                                      unsigned Depth) const {
   EVT VT = V.getValueType();
-  APInt DemandedElts = VT.isVector()
-                           ? APInt::getAllOnesValue(VT.getVectorNumElements())
-                           : APInt(1, 1);
+  APInt DemandedElts;
+  if (!VT.isScalableVector()) {
+    DemandedElts = VT.isVector()
+                       ? APInt::getAllOnesValue(VT.getVectorNumElements())
+                       : APInt(1, 1);
+  }
   return MaskedValueIsZero(V, Mask, DemandedElts, Depth);
 }
 
@@ -2521,9 +2524,12 @@
 /// every vector element.
 KnownBits SelectionDAG::computeKnownBits(SDValue Op, unsigned Depth) const {
   EVT VT = Op.getValueType();
-  APInt DemandedElts = VT.isVector()
-                           ? APInt::getAllOnesValue(VT.getVectorNumElements())
-                           : APInt(1, 1);
+  APInt DemandedElts;
+  if (!VT.isScalableVector()) {
+    DemandedElts = VT.isVector()
+                       ? APInt::getAllOnesValue(VT.getVectorNumElements())
+                       : APInt(1, 1);
+  }
   return computeKnownBits(Op, DemandedElts, Depth);
 }
 
@@ -2536,6 +2542,11 @@
 
   KnownBits Known(BitWidth);   // Don't know anything.
 
+  // TOOD: Until we have a plan for how to represent demanded elements for
+  // scalable vectors, we can just bail out for now.
+  if (Op.getValueType().isScalableVector())
+    return Known;
+
   if (auto *C = dyn_cast<ConstantSDNode>(Op)) {
     // We know all of the bits for a constant!
     Known.One = C->getAPIntValue();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D80437.265726.patch
Type: text/x-patch
Size: 1843 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200522/6b292c19/attachment.bin>


More information about the llvm-commits mailing list