llvm-6502/include/llvm
Chandler Carruth c13c09106e [SCEV] Add some asserts to the recently improved trip count computation
routines and fix all of the bugs they expose.

I hit a test case that crashed even without these asserts due to passing
a non-exiting latch to the ExitingBlock parameter of the trip count
computation machinery. However, when I add the nice asserts, it turns
out we have plenty of coverage of these bugs, they just didn't manifest
in crashers.

The core problem seems to stem from an assumption that the latch *is*
the exiting block. While this is often true, and somewhat the "normal"
way to think about loops, it isn't necessarily true. The correct way to
call the trip count routines in a *generic* fashion (that is, without
a particular exit in mind) is to just use the loop's single exiting
block if it has one. The trip count can't be computed generically unless
it does. This works great for the loop vectorizer. The loop unroller
actually *wants* to select the latch when it has to chose between
multiple exits because for unrolling it is the latch trips that matter.
But if this is the desire, it needs to explicitly guard for non-exiting
latches and check for the generic trip count in that case.

I've added the asserts, and added convenience APIs for querying the trip
count generically that check for a single exit block. I've kept the APIs
consistent between computing trip count and trip multiples.

Thansk to Mark for the help debugging and tracking down the *right* fix
here!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219550 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-11 00:12:11 +00:00
..
ADT [ADT] Add an (ADL-friendly) abs free function for APFloat that returns 2014-10-10 08:27:22 +00:00
Analysis [SCEV] Add some asserts to the recently improved trip count computation 2014-10-11 00:12:11 +00:00
AsmParser Pass a MemoryBufferRef when we can avoid taking ownership. 2014-08-26 21:49:01 +00:00
Bitcode Spell out the template args for compilers having issues with the injected class 2014-09-15 16:13:33 +00:00
CodeGen Add couple of missing 'override' keyword. NFC. 2014-10-10 17:34:30 +00:00
Config Re-land r219354: Use llvm-symbolizer to symbolize LLVM/Clang crash dumps. 2014-10-10 22:06:59 +00:00
DebugInfo [dwarfdump] Resolve also variable specifications/abstract_origins. 2014-10-10 15:51:02 +00:00
ExecutionEngine [MCJIT] Turn the getSymbolAddress free function created in r218626 into a static 2014-10-01 04:11:13 +00:00
IR Add isInfinity to ConstantFP 2014-10-10 02:15:04 +00:00
IRReader Pass a MemoryBufferRef when we can avoid taking ownership. 2014-08-26 21:49:01 +00:00
LineEditor
Linker
LTO unique_ptrify LTOCodeGenerator::NativeObjectFile 2014-09-02 18:21:06 +00:00
MC don't repeat function name in comments 2014-10-07 17:28:04 +00:00
Object Object, COFF: Relax aux symbols for section definitions 2014-10-10 06:58:11 +00:00
Option Add an overload of getLastArgNoClaim taking two OptSpecifiers. 2014-09-12 19:42:53 +00:00
ProfileData InstrProf: Avoid linear search in a hot loop 2014-10-02 17:14:18 +00:00
Support Add ApplePropertyString dump helper to Dwarf.{h|cpp}. 2014-10-09 20:43:04 +00:00
TableGen [TableGen] Fully resolve class-instance values before defs in multiclasses 2014-09-16 17:14:13 +00:00
Target Remove unused field from Operand 2014-10-09 19:15:18 +00:00
Transforms [SimplifyCFG] threshold for folding branches with common destination 2014-09-30 22:23:38 +00:00
CMakeLists.txt Remove llvm_headers_do_not_build for the benefit of XCode and Visual Studio users. 2014-08-14 00:51:47 +00:00
InitializePasses.h Add a new pass FunctionTargetTransformInfo. This pass serves as a 2014-09-18 00:34:14 +00:00
LinkAllIR.h
LinkAllPasses.h Make AAMDNodes ctor and operator bool (!!!) explicit, mop up bugs and weirdness exposed by it. 2014-10-04 22:44:29 +00:00
module.modulemap Nuke MCAnalysis. 2014-09-02 22:32:20 +00:00
module.modulemap.build
Pass.h
PassAnalysisSupport.h
PassInfo.h
PassManager.h
PassRegistry.h [PM] Remove an unused and rather expensive mapping from an analysis 2014-10-06 00:30:59 +00:00
PassSupport.h