forked from OSchip/llvm-project
[SLP][NFC]Fix non-determinism in reordering, NFC.
Need to clear CurrentOrder order mask if it is determined that extractelements form identity order and need to use a vector-like construct when iterating over ordered entries in the reorderTopToBottom function.
This commit is contained in:
parent
db83e3e507
commit
e0efedd2c3
|
@ -3040,7 +3040,7 @@ Optional<BoUpSLP::OrdersType> BoUpSLP::getReorderingData(const TreeEntry &TE,
|
|||
|
||||
void BoUpSLP::reorderTopToBottom() {
|
||||
// Maps VF to the graph nodes.
|
||||
DenseMap<unsigned, SmallPtrSet<TreeEntry *, 4>> VFToOrderedEntries;
|
||||
DenseMap<unsigned, SetVector<TreeEntry *>> VFToOrderedEntries;
|
||||
// ExtractElement gather nodes which can be vectorized and need to handle
|
||||
// their ordering.
|
||||
DenseMap<const TreeEntry *, OrdersType> GathersToOrders;
|
||||
|
@ -3066,7 +3066,7 @@ void BoUpSLP::reorderTopToBottom() {
|
|||
// Try to find the most profitable order. We just are looking for the most
|
||||
// used order and reorder scalar elements in the nodes according to this
|
||||
// mostly used order.
|
||||
const SmallPtrSetImpl<TreeEntry *> &OrderedEntries = It->getSecond();
|
||||
ArrayRef<TreeEntry *> OrderedEntries = It->second.getArrayRef();
|
||||
// All operands are reordered and used only in this node - propagate the
|
||||
// most used order to the user node.
|
||||
MapVector<OrdersType, unsigned,
|
||||
|
@ -4459,6 +4459,8 @@ bool BoUpSLP::canReuseExtract(ArrayRef<Value *> VL, Value *OpValue,
|
|||
CurrentOrder.clear();
|
||||
return false;
|
||||
}
|
||||
if (ShouldKeepOrder)
|
||||
CurrentOrder.clear();
|
||||
|
||||
return ShouldKeepOrder;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue