diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2016-02-17 18:37:11 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2016-02-17 18:37:11 +0000 |
| commit | 7e5937b775410a81b5a57c45fb087ef99e971308 (patch) | |
| tree | 2117ecf2317c374e0837094cf3fd7ccde45b2eb6 /llvm/test/CodeGen/Generic/vector-redux.ll | |
| parent | cef252ea4c6cd44ac5a1253ffc1836b400cef3ec (diff) | |
| download | bcm5719-llvm-7e5937b775410a81b5a57c45fb087ef99e971308.tar.gz bcm5719-llvm-7e5937b775410a81b5a57c45fb087ef99e971308.zip | |
[WinEH] Optimize WinEH state stores
32-bit x86 Windows targets use a linked-list of nodes allocated on the
stack, referenced to via thread-local storage. The personality routine
interprets one of the fields in the node as a 'state number' which
indicates where the personality routine should transfer control.
State transitions are possible only before call-sites which may throw
exceptions. Our previous scheme had us update the state number before
all call-sites which may throw.
Instead, we can try to minimize the number of times we need to store by
reasoning about the nearest store which dominates the current call-site.
If the last store agrees with the current call-site, then we know that
the state-update is redundant and can be elided.
This is largely straightforward: an RPO walk of the blocks allows us to
correctly forward propagate the information when the function is a DAG.
Currently, loops are not handled optimally and may trigger superfluous
state stores.
Differential Revision: http://reviews.llvm.org/D16763
llvm-svn: 261122
Diffstat (limited to 'llvm/test/CodeGen/Generic/vector-redux.ll')
0 files changed, 0 insertions, 0 deletions

