diff options
author | Miguel de Icaza <miguel@gnome.org> | 2003-04-17 03:26:42 +0400 |
---|---|---|
committer | Miguel de Icaza <miguel@gnome.org> | 2003-04-17 03:26:42 +0400 |
commit | a9a495b2a936ba8c444ba67fbf02597acaade434 (patch) | |
tree | d68dc7ac80c97b795ebe0b44dc28d22fe6471772 /docs/mini-doc.txt | |
parent | 5fabf25603432031f8439cd1c8eb6b9847b80ae2 (diff) |
Update mini docs
svn path=/trunk/mono/; revision=13697
Diffstat (limited to 'docs/mini-doc.txt')
-rw-r--r-- | docs/mini-doc.txt | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/docs/mini-doc.txt b/docs/mini-doc.txt index cfe1a91d365..4c6f57c42d0 100644 --- a/docs/mini-doc.txt +++ b/docs/mini-doc.txt @@ -525,18 +525,48 @@ * SSA-based optimizations - SSA form simplifies many optimization because each variable has exactly - one definition site. All uses of a variable are "dominated" by its - definition, which enables us to implement algorithm like: + SSA form simplifies many optimization because each variable + has exactly one definition site. This means that each + variable is only initialized once. - * conditional constant propagation + For example, code like this: - * array bound check removal + a = 1 + .. + a = 2 + call (a) - * dead code elimination + Is internally turned into: - And we can implement those algorithm in a efficient way using SSA. + a1 = 1 + .. + a2 = 2 + call (a2) + In the presence of branches, like: + + if (x) + a = 1 + else + a = 2 + + call (a) + + The code is turned into: + + if (x) + a1 = 1; + else + a2 = 2; + a3 = phi (a1, a2) + call (a3) + + All uses of a variable are "dominated" by its definition + + This representation is useful as it simplifies the + implementation of a number of optimizations like conditional + constant propagation, array bounds check removal and dead code + elimination. * Register allocation. |