[llvm] r361281 - [MergeICmps] Make sorting strongly stable on the rhs.
Clement Courbet via llvm-commits
llvm-commits at lists.llvm.org
Tue May 21 10:58:42 PDT 2019
Author: courbet
Date: Tue May 21 10:58:42 2019
New Revision: 361281
URL: http://llvm.org/viewvc/llvm-project?rev=361281&view=rev
Log:
[MergeICmps] Make sorting strongly stable on the rhs.
Summary:
Because the sort order was not strongly stable on the RHS, whether the
chain could merge would depend on the order of the blocks in the Phi.
EXPENSIVE_CHECKS would shuffle the blocks before sorting, resulting in
non-deterministic merging.
Reviewers: gchatelet
Subscribers: hiraditya, llvm-commits, RKSimon
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D62193
Modified:
llvm/trunk/lib/Transforms/Scalar/MergeICmps.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/MergeICmps.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MergeICmps.cpp?rev=361281&r1=361280&r2=361281&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/MergeICmps.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/MergeICmps.cpp Tue May 21 10:58:42 2019
@@ -507,7 +507,8 @@ BCECmpChain::BCECmpChain(const std::vect
// semantics because we are only accessing dereferencable memory.
llvm::sort(Comparisons_,
[](const BCECmpBlock &LhsBlock, const BCECmpBlock &RhsBlock) {
- return LhsBlock.Lhs() < RhsBlock.Lhs();
+ return std::tie(LhsBlock.Lhs(), LhsBlock.Rhs()) <
+ std::tie(RhsBlock.Lhs(), RhsBlock.Rhs());
});
#ifdef MERGEICMPS_DOT_ON
errs() << "AFTER REORDERING:\n\n";
More information about the llvm-commits
mailing list