[llvm] 285d5e6 - [LegalizeVectorOps] Split most of ExpandStrictFPOp into a separate UnrollStrictFPOp method. Call that method from ExpandUINT_TO_FLOAT.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sat Jan 4 21:14:07 PST 2020


Author: Craig Topper
Date: 2020-01-04T17:03:50-08:00
New Revision: 285d5e6b8b1ecc70c25468b6c7458d2adadeddf3

URL: https://github.com/llvm/llvm-project/commit/285d5e6b8b1ecc70c25468b6c7458d2adadeddf3
DIFF: https://github.com/llvm/llvm-project/commit/285d5e6b8b1ecc70c25468b6c7458d2adadeddf3.diff

LOG: [LegalizeVectorOps] Split most of ExpandStrictFPOp into a separate UnrollStrictFPOp method. Call that method from ExpandUINT_TO_FLOAT.

ExpandStrictFPOp calls ExpandUINT_TO_FLOAT. Previously, ExpandUINT_TO_FLOAT
returned SDValue() if it wasn't able to handle and needed to unroll.
Then ExpandStrictFPOp would detect his SDValue() and do the unroll.

After this change, ExpandUINT_TO_FLOAT will directly call
UnrollStrictFPOp and return the unrolled result.

Added: 
    

Modified: 
    llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
index c4287b09780c..4127feda0e8f 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
@@ -148,6 +148,8 @@ class VectorLegalizer {
   SDValue ExpandFixedPointMul(SDValue Op);
   SDValue ExpandStrictFPOp(SDValue Op);
 
+  SDValue UnrollStrictFPOp(SDValue Op);
+
   /// Implements vector promotion.
   ///
   /// This is essentially just bitcasting the operands to a 
diff erent type and
@@ -1208,8 +1210,11 @@ SDValue VectorLegalizer::ExpandUINT_TO_FLOAT(SDValue Op) {
                          TargetLowering::Expand) ||
        (IsStrict && TLI.getOperationAction(ISD::STRICT_SINT_TO_FP, VT) ==
                         TargetLowering::Expand)) ||
-      TLI.getOperationAction(ISD::SRL, VT) == TargetLowering::Expand)
-    return IsStrict ? SDValue() : DAG.UnrollVectorOp(Op.getNode());
+      TLI.getOperationAction(ISD::SRL, VT) == TargetLowering::Expand) {
+    if (IsStrict)
+      return UnrollStrictFPOp(Op);
+    return DAG.UnrollVectorOp(Op.getNode());
+  }
 
   unsigned BW = VT.getScalarSizeInBits();
   assert((BW == 64 || BW == 32) &&
@@ -1386,11 +1391,13 @@ SDValue VectorLegalizer::ExpandFixedPointMul(SDValue Op) {
 }
 
 SDValue VectorLegalizer::ExpandStrictFPOp(SDValue Op) {
-  if (Op.getOpcode() == ISD::STRICT_UINT_TO_FP) {
-    if (SDValue Res = ExpandUINT_TO_FLOAT(Op))
-      return Res;
-  }
+  if (Op.getOpcode() == ISD::STRICT_UINT_TO_FP)
+    return ExpandUINT_TO_FLOAT(Op);
+
+  return UnrollStrictFPOp(Op);
+}
 
+SDValue VectorLegalizer::UnrollStrictFPOp(SDValue Op) {
   EVT VT = Op.getValue(0).getValueType();
   EVT EltVT = VT.getVectorElementType();
   unsigned NumElems = VT.getVectorNumElements();


        


More information about the llvm-commits mailing list