llvm-project/llvm/test/CodeGen/WinEH
David Majnemer 7e5937b775 [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
2016-02-17 18:37:11 +00:00
..
lit.local.cfg
wineh-cloning.ll Revert r258580 and r258581. 2016-02-01 03:29:38 +00:00
wineh-demotion.ll Revert r258580 and r258581. 2016-02-01 03:29:38 +00:00
wineh-intrinsics-invalid.ll [WinEH] Add llvm.eh.exceptionpointer intrinsic 2015-09-03 09:15:32 +00:00
wineh-intrinsics.ll [IR] Reformulate LLVM's EH funclet IR 2015-12-12 05:38:55 +00:00
wineh-no-demotion.ll Revert r258580 and r258581. 2016-02-01 03:29:38 +00:00
wineh-noret-cleanup.ll [WinEH] Prevent EH state numbering from skipping nested cleanup pads that never return 2016-02-12 21:10:16 +00:00
wineh-statenumbering-cleanups.ll [WinEH] Don't perform state stores in cleanups 2016-01-29 05:33:15 +00:00
wineh-statenumbering.ll [WinEH] Optimize WinEH state stores 2016-02-17 18:37:11 +00:00