Code Sinking: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
Line 1: Line 1:
'''Code sinking''', sometimes referred to as '''lazy code motion''', is a compiler optimization that moves computations into less frequently executed regions of code. If an operation is executed before a branch and only one branch uses its result, code sinking delays the computation and places it inside the branch so the operation is executed only on the path where it is needed.<ref>[https://en.wikipedia.org/wiki/Code_motion Wikipedia – Code Motion]</ref> By executing computations only when their results are required, code sinking can reduce the instruction's execution count, lower register pressure, and sometimes decrease code size. Unlike [[Dead Code Elimination|dead code elimination]], which removes instructions only if their results are never used, code sinking removes or moves instructions even when there is a possible use on some execution path, as long as redundant executions are avoided.<ref>[https://en.wikipedia.org/wiki/Code_motion Wikipedia – Code Motion]</ref> Modern compilers implement sinking as part of their code-motion passes; for example, LLVM’s <code>sink</code> pass moves instructions into successor blocks so they aren’t executed on paths where their results aren’t needed.<ref>[https://llvm.org/docs/Passes.html#sink-code-sinking LLVM Pass Documentation – Sink]</ref>
'''Code sinking''', sometimes referred to as '''lazy code motion''', is a compiler optimization that moves computations into less frequently executed regions of code. If an operation is executed before a branch and only one branch uses its result, code sinking delays the computation and places it inside the branch so the operation is executed only on the path where it is needed.<ref name=":0">[https://en.wikipedia.org/wiki/Code_motion Wikipedia – Code Motion]</ref> By executing computations only when their results are required, code sinking can reduce the instruction's execution count, lower register pressure, and sometimes decrease code size. Unlike [[Dead Code Elimination|dead code elimination]], which removes instructions only if their results are never used, code sinking removes or moves instructions even when there is a possible use on some execution path, as long as redundant executions are avoided.<ref name=":0" /> Modern compilers implement sinking as part of their code-motion passes; for example, LLVM’s <code>sink</code> pass moves instructions into successor blocks so they aren’t executed on paths where their results aren’t needed.<ref>[https://llvm.org/docs/Passes.html#sink-code-sinking LLVM Pass Documentation – Sink]</ref>


== Code Sinking Transformation in emmtrix Studio ==
== Code Sinking Transformation in emmtrix Studio ==
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,502

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Navigation menu