From: Simon Pilgrim Date: Sun, 10 Sep 2017 18:10:49 +0000 (+0000) Subject: [X86][SSE] Move combineTo call out of combineX86ShufflesConstants. NFCI. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=58716e880b76e79355b758e173c20dbc5df5c131;p=llvm [X86][SSE] Move combineTo call out of combineX86ShufflesConstants. NFCI. Move towards making it possible to use the shuffle combines for cases where we don't want to call DCI.CombineTo() with the result. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312886 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index c94fc5ed44b..75ac6d9d8d4 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -28087,11 +28087,12 @@ static SDValue combineX86ShuffleChain(ArrayRef Inputs, SDValue Root, // Attempt to constant fold all of the constant source ops. // Returns true if the entire shuffle is folded to a constant. // TODO: Extend this to merge multiple constant Ops and update the mask. -static bool combineX86ShufflesConstants(const SmallVectorImpl &Ops, - ArrayRef Mask, SDValue Root, - bool HasVariableMask, SelectionDAG &DAG, - TargetLowering::DAGCombinerInfo &DCI, - const X86Subtarget &Subtarget) { +static SDValue combineX86ShufflesConstants(const SmallVectorImpl &Ops, + ArrayRef Mask, SDValue Root, + bool HasVariableMask, + SelectionDAG &DAG, + TargetLowering::DAGCombinerInfo &DCI, + const X86Subtarget &Subtarget) { MVT VT = Root.getSimpleValueType(); unsigned SizeInBits = VT.getSizeInBits(); @@ -28108,14 +28109,14 @@ static bool combineX86ShufflesConstants(const SmallVectorImpl &Ops, OneUseConstantOp |= SrcOp.hasOneUse(); if (!getTargetConstantBitsFromNode(SrcOp, MaskSizeInBits, UndefEltsOps[i], RawBitsOps[i])) - return false; + return SDValue(); } // Only fold if at least one of the constants is only used once or // the combined shuffle has included a variable mask shuffle, this // is to avoid constant pool bloat. if (!OneUseConstantOp && !HasVariableMask) - return false; + return SDValue(); // Shuffle the constant bits according to the mask. APInt UndefElts(NumMaskElts, 0); @@ -28167,8 +28168,7 @@ static bool combineX86ShufflesConstants(const SmallVectorImpl &Ops, SDLoc DL(Root); SDValue CstOp = getConstVector(ConstantBitData, UndefElts, MaskVT, DAG, DL); DCI.AddToWorklist(CstOp.getNode()); - DCI.CombineTo(Root.getNode(), DAG.getBitcast(VT, CstOp)); - return true; + return DAG.getBitcast(VT, CstOp); } /// \brief Fully generic combining of x86 shuffle instructions. @@ -28375,9 +28375,11 @@ static bool combineX86ShufflesRecursively(ArrayRef SrcOps, return true; // Attempt to constant fold all of the constant source ops. - if (combineX86ShufflesConstants(Ops, Mask, Root, HasVariableMask, DAG, DCI, - Subtarget)) + if (SDValue Cst = combineX86ShufflesConstants( + Ops, Mask, Root, HasVariableMask, DAG, DCI, Subtarget)) { + DCI.CombineTo(Root.getNode(), Cst); return true; + } // We can only combine unary and binary shuffle mask cases. if (Ops.size() > 2)