llvm-project/llvm/lib/Transforms
Peter Collingbourne df49d1bbb2 WholeProgramDevirt: introduce.
This pass implements whole program optimization of virtual calls in cases
where we know (via bitset information) that the list of callees is fixed. This
includes the following:

- Single implementation devirtualization: if a virtual call has a single
  possible callee, replace all calls with a direct call to that callee.

- Virtual constant propagation: if the virtual function's return type is an
  integer <=64 bits and all possible callees are readnone, for each class and
  each list of constant arguments: evaluate the function, store the return
  value alongside the virtual table, and rewrite each virtual call as a load
  from the virtual table.

- Uniform return value optimization: if the conditions for virtual constant
  propagation hold and each function returns the same constant value, replace
  each virtual call with that constant.

- Unique return value optimization for i1 return values: if the conditions
  for virtual constant propagation hold and a single vtable's function
  returns 0, or a single vtable's function returns 1, replace each virtual
  call with a comparison of the vptr against that vtable's address.

Differential Revision: http://reviews.llvm.org/D16795

llvm-svn: 260312
2016-02-09 22:50:34 +00:00
..
Hello Remove autoconf support 2016-01-26 21:29:08 +00:00
IPO WholeProgramDevirt: introduce. 2016-02-09 22:50:34 +00:00
InstCombine [InstCombine][GC] Handle gc.relocations of vector type 2016-02-09 21:09:22 +00:00
Instrumentation [PGO] Revert r260146 as it breaks Darwin platforms. 2016-02-08 23:11:16 +00:00
ObjCARC Add support for objc_unsafeClaimAutoreleasedReturnValue to the 2016-01-27 19:05:08 +00:00
Scalar Factor out UnrollAnalyzer to Analysis, and add unit tests for it. 2016-02-08 23:03:59 +00:00
Utils rangify; NFC 2016-02-08 21:32:43 +00:00
Vectorize [SCEV][LAA] Re-commit r260085 and r260086, this time with a fix for the memory 2016-02-08 17:02:45 +00:00
CMakeLists.txt
LLVMBuild.txt