llvm-project/llvm/test
Max Kazantsev b09b5db793 [SCEV] Fix sorting order for AddRecExprs
The existing sorting order in defined CompareSCEVComplexity sorts AddRecExprs
by loop depth, but does not pay attention to dominance of loops. This can
lead us to the following buggy situation:

for (...) { // loop1
  op1 = {A,+,B}
}
for (...) { // loop2
  op2 = {A,+,B}
  S = add op1, op2
}

In this case there is no guarantee that in operand list of S the op2 comes
before op1 (loop depth is the same, so they will be sorted just
lexicographically), so we can incorrectly treat S as a recurrence of loop1,
which is wrong.

This patch changes the sorting logic so that it places the dominated recs
before the dominating recs. This ensures that when we pick the first recurrency
in the operands order, it will be the bottom-most in terms of domination tree.
The attached test set includes some tests that produce incorrect SCEV
estimations and crashes with oldlogic.

Reviewers: sanjoy, reames, apilipenko, anna

Reviewed By: sanjoy

Subscribers: llvm-commits, mzolotukhin

Differential Revision: https://reviews.llvm.org/D33121

llvm-svn: 303148
2017-05-16 07:27:06 +00:00
..
Analysis [SCEV] Fix sorting order for AddRecExprs 2017-05-16 07:27:06 +00:00
Assembler [IR] Allow attributes with global variables 2017-05-11 12:28:08 +00:00
Bindings
Bitcode Add "REQUIRES:" to the last few tests that use target specific intrinsics 2017-05-15 22:15:22 +00:00
BugPoint llvm/test/BugPoint/compile-custom.ll: Use %/s for its path not to be mis-escaped. 2017-04-13 11:40:32 +00:00
CodeGen [ShrinkWrapping] Handle restores on no-return paths 2017-05-15 23:13:35 +00:00
DebugInfo [llvm-pdbdump] Add the option to sort functions and data. 2017-05-14 01:13:40 +00:00
Examples
ExecutionEngine
Feature Add "REQUIRES:" to the last few tests that use target specific intrinsics 2017-05-15 22:15:22 +00:00
FileCheck
Instrumentation MSan: Mark MemorySanitizer tests that use x86 intrinsics as REQUIRES: x86 2017-05-13 16:24:38 +00:00
Integer
JitListener
LTO Add support for handling ifuncs to GlobalValue::getBaseObject 2017-05-15 18:28:29 +00:00
LibDriver
Linker Remap metadata attached to global variables. 2017-05-04 23:29:39 +00:00
MC AArch64: diagnose unrecognized features in .cpu directive. 2017-05-15 19:42:15 +00:00
Object Add support for handling ifuncs to GlobalValue::getBaseObject 2017-05-15 18:28:29 +00:00
ObjectYAML [WebAssembly] Improve libObject support for wasm imports and exports 2017-05-09 23:48:41 +00:00
Other [PM] Add ProfileSummaryAnalysis as a required pass in the new pipeline. 2017-05-04 16:58:45 +00:00
SymbolRewriter
TableGen [TableGen] Add EncoderMethod to RegisterOperand 2017-05-15 10:13:07 +00:00
ThinLTO/X86 Remove line and file from DINamespace. 2017-04-28 22:25:46 +00:00
Transforms Revert "[NewGVN] Replace predicate info leftovers." 2017-05-16 05:51:21 +00:00
Unit [Lit] Fix to prevent creation of "%SystemDrive%" directory on Windows. 2017-05-08 08:55:38 +00:00
Verifier Make it illegal for two Functions to point to the same DISubprogram 2017-05-09 19:47:37 +00:00
YAMLParser
tools [llvm-pdbdump] Add the option to sort functions and data. 2017-05-14 01:13:40 +00:00
.clang-format
CMakeLists.txt Add a dependency from llvm/test to llvm-cvtres. 2017-04-21 20:45:11 +00:00
TestRunner.sh
lit.cfg
lit.site.cfg.in