Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel de Icaza <miguel@gnome.org>2003-04-17 03:26:42 +0400
committerMiguel de Icaza <miguel@gnome.org>2003-04-17 03:26:42 +0400
commita9a495b2a936ba8c444ba67fbf02597acaade434 (patch)
treed68dc7ac80c97b795ebe0b44dc28d22fe6471772 /docs/mini-doc.txt
parent5fabf25603432031f8439cd1c8eb6b9847b80ae2 (diff)
Update mini docs
svn path=/trunk/mono/; revision=13697
Diffstat (limited to 'docs/mini-doc.txt')
-rw-r--r--docs/mini-doc.txt44
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.