[PATCH] D53289: [DAGCombiner] Limit the number of chains in findBetterChains().
Clement Courbet via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 15 07:39:51 PDT 2018
courbet updated this revision to Diff 169705.
courbet added a comment.
revert formatting changes
Repository:
rL LLVM
https://reviews.llvm.org/D53289
Files:
include/llvm/CodeGen/TargetLowering.h
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
lib/CodeGen/TargetLoweringBase.cpp
Index: lib/CodeGen/TargetLoweringBase.cpp
===================================================================
--- lib/CodeGen/TargetLoweringBase.cpp
+++ lib/CodeGen/TargetLoweringBase.cpp
@@ -558,6 +558,7 @@
PrefFunctionAlignment = 0;
PrefLoopAlignment = 0;
GatherAllAliasesMaxDepth = 18;
+ FindBetterChainsMaxChains = 32;
MinStackArgumentAlignment = 1;
// TODO: the default will be switched to 0 in the next commit, along
// with the Target-specific changes necessary.
Index: lib/CodeGen/SelectionDAG/DAGCombiner.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -17394,7 +17394,7 @@
NewMask.push_back(M < 0 ? -1 : Scale * M + s);
return NewMask;
};
-
+
SDValue BC0 = peekThroughOneUseBitcasts(N0);
if (BC0.getOpcode() == ISD::VECTOR_SHUFFLE && BC0.hasOneUse()) {
EVT SVT = VT.getScalarType();
@@ -18946,8 +18946,9 @@
// Walk up the chain and look for nodes with offsets from the same
// base pointer. Stop when reaching an instruction with a different kind
- // or instruction which has a different base pointer.
+ // or instruction or a different base pointer.
StoreSDNode *Index = St;
+ const unsigned MaxChains = TLI.getFindBetterChainsMaxChains();
while (Index) {
// If the chain has more than one use, then we can't reorder the mem ops.
if (Index != St && !SDValue(Index, 0)->hasOneUse())
@@ -18974,7 +18975,8 @@
break;
}
ChainedStores.push_back(STn);
- Index = STn;
+ // Stop if we have too many chains.
+ Index = ChainedStores.size() >= MaxChains ? nullptr : STn;
break;
} else if (LoadSDNode *Ldn = dyn_cast<LoadSDNode>(NextInChain)) {
NextInChain = Ldn->getChain().getNode();
Index: include/llvm/CodeGen/TargetLowering.h
===================================================================
--- include/llvm/CodeGen/TargetLowering.h
+++ include/llvm/CodeGen/TargetLowering.h
@@ -1235,6 +1235,10 @@
return GatherAllAliasesMaxDepth;
}
+ unsigned getFindBetterChainsMaxChains() const {
+ return FindBetterChainsMaxChains;
+ }
+
/// Returns the size of the platform's va_list object.
virtual unsigned getVaListSizeInBits(const DataLayout &DL) const {
return getPointerTy(DL).getSizeInBits();
@@ -2585,6 +2589,14 @@
/// expected to be merged.
unsigned GatherAllAliasesMaxDepth;
+ // Number of chains that are considered when looking back for mergeable stores
+ // in DAGCombiner::findBetterNeighborChains. This should be larger than the
+ // maximum number of stores to be merged for a target (e.g. setting this to
+ // 8 will allow merging 8 consecutive i8 stores to one i64). Increasing this
+ // value further will allow discovering and merging potentially
+ // non-consecutive stores to be merged.
+ unsigned FindBetterChainsMaxChains;
+
/// Specify maximum number of store instructions per memset call.
///
/// When lowering \@llvm.memset this field specifies the maximum number of
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D53289.169705.patch
Type: text/x-patch
Size: 3121 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181015/24113907/attachment-0001.bin>
More information about the llvm-commits
mailing list