llvm-6502/lib
Chandler Carruth ed90ed077a Add a new visitor for walking the uses of a pointer value.
This visitor provides infrastructure for recursively traversing the
use-graph of a pointer-producing instruction like an alloca or a malloc.
It maintains a worklist of uses to visit, so it can handle very deep
recursions. It automatically looks through instructions which simply
translate one pointer to another (bitcasts and GEPs). It tracks the
offset relative to the original pointer as long as that offset remains
constant and exposes it during the visit as an APInt offset. Finally, it
performs conservative escape analysis.

However, currently it has some limitations that should be addressed
going forward:
1) It doesn't handle vectors of pointers.
2) It doesn't provide a cheaper visitor when the constant offset
   tracking isn't needed.
3) It doesn't support non-instruction pointer values.

The current functionality is exactly what is required to implement the
SROA pointer-use visitors in terms of this one, rather than in terms of
their own ad-hoc base visitor, which was always very poorly specified.
SROA has been converted to use this, and the code there deleted which
this utility now provides.

Technically speaking, using this new visitor allows SROA to handle a few
more cases than it previously did. It is now more aggressive in ignoring
chains of instructions which look like they would defeat SROA, but in
fact do not because they never result in a read or write of memory.
While this is "neat", it shouldn't be interesting for real programs as
any such chains should have been removed by others passes long before we
get to SROA. As a consequence, I've not added any tests for these
features -- it shouldn't be part of SROA's contract to perform such
heroics.

The goal is to extend the functionality of this visitor going forward,
and re-use it from passes like ASan that can benefit from doing
a detailed walk of the uses of a pointer.

Thanks to Ben Kramer for the code review rounds and lots of help
reviewing and debugging this patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169728 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-10 08:28:39 +00:00
..
Analysis Add a new visitor for walking the uses of a pointer value. 2012-12-10 08:28:39 +00:00
Archive Sort includes for all of the .h files under the 'lib' tree. These were 2012-12-04 07:12:27 +00:00
AsmParser Reorganize FastMathFlags to be a wrapper around unsigned, and streamline some interfaces. 2012-12-09 21:12:04 +00:00
Bitcode Reorganize FastMathFlags to be a wrapper around unsigned, and streamline some interfaces. 2012-12-09 21:12:04 +00:00
CodeGen Teach DAG combine to handle vector add/sub with vectors of all 0s. 2012-12-10 08:12:29 +00:00
DebugInfo Sort includes for all of the .h files under the 'lib' tree. These were 2012-12-04 07:12:27 +00:00
ExecutionEngine Adjust JIT target triple on OS X to match the current architecture. 2012-12-05 19:09:13 +00:00
Linker Use the new script to sort the includes of every file under lib. 2012-12-03 16:50:05 +00:00
MC Add C API for specifying CPU to the disassembler. 2012-12-07 23:53:27 +00:00
Object Use the new script to sort the includes of every file under lib. 2012-12-03 16:50:05 +00:00
Option Copy clang/Driver/<Option parsing stuff> to llvm. 2012-12-05 00:29:32 +00:00
Support Make NaCl naming consistent. The triple OSType is called NaCl and is represented 2012-12-04 18:37:26 +00:00
TableGen Sort includes for all of the .h files under the 'lib' tree. These were 2012-12-04 07:12:27 +00:00
Target [CMake] Update dependencies to intrinsics_gen corresponding to r169711. 2012-12-10 05:27:15 +00:00
Transforms Add a new visitor for walking the uses of a pointer value. 2012-12-10 08:28:39 +00:00
VMCore s/AttrListPtr/AttributeSet/g to better label what this class is going to be in the near future. 2012-12-07 23:16:57 +00:00
CMakeLists.txt Copy clang/Driver/<Option parsing stuff> to llvm. 2012-12-05 00:29:32 +00:00
LLVMBuild.txt Copy clang/Driver/<Option parsing stuff> to llvm. 2012-12-05 00:29:32 +00:00
Makefile Copy clang/Driver/<Option parsing stuff> to llvm. 2012-12-05 00:29:32 +00:00