WholeProgramDevirt: introduce.

Description

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

Details

Committed
pccFeb 9 2016, 2:50 PM
Differential Revision
D16795: WholeProgramDevirt: introduce.
Parents
rL260311: Update documentation to reflect that libc++abi provides __cxa_thread_atexit…
Branches
Unknown
Tags
Unknown