[Mono-bugs] [Bug 71577][Wis] Changed - The JIT shouldn't generate code for initlocals if not needed

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Fri, 21 Jan 2005 11:28:01 -0500 (EST)


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by bmaurer@users.sf.net.

http://bugzilla.ximian.com/show_bug.cgi?id=71577

--- shadow/71577	2005-01-21 10:45:52.000000000 -0500
+++ shadow/71577.tmp.30715	2005-01-21 11:28:01.000000000 -0500
@@ -1,14 +1,14 @@
 Bug#: 71577
 Product: Mono: Runtime
 Version: unspecified
-OS: 
+OS: unknown
 OS Details: 
 Status: NEW   
 Resolution: 
-Severity: 
+Severity: Unknown
 Priority: Wishlist
 Component: JIT
 AssignedTo: mono-bugs@ximian.com                            
 ReportedBy: vargaz@gmail.com               
 QAContact: mono-bugs@ximian.com
 TargetMilestone: ---
@@ -18,6 +18,40 @@
 
 Currently, the JIT basically initializes every variable twice, one for the
 initialization caused by initlocals to be set, and the other because of the
 initialization required by the C# spec. For trusted assemblies, like the
 system assemblies and mcs, we could ignore initlocals in the JIT. Trying
 this sped up a corlib compilation by about 2%.
+
+------- Additional Comments From bmaurer@users.sf.net  2005-01-21 11:28 -------
+Liveness gives us all the information we really need for this.
+
+Lets say you have this IR:
+
+BB0:
+   loc1 <-- 0
+   loc2 <-- 0
+ 
+BB1:
+   loc1 <-- call Foo
+   cmp loc1, 4
+   beq bb3
+BB2:
+   loc2 <-- 5
+   br BB4
+BB3:
+   loc2 <-- 2
+BB4:
+
+Liveness will see that loc1 and loc2 are not liveout or livein from
+BB0. However, in liveness, we mark the live range of loc1 as being
+from [BB0, BB1] and loc2 as [BB0, BB3]. This is because a use of a
+variable in a block (even if it is a dead store) will extend the live
+range.
+
+We need to use the liveness to do some deadce. I tried to do this over
+the summer, but I always ended up making mcs bootstrap slower.
+
+FYI, the reason this slows things down seems not to be the stores
+themselves, but because it prevents enregistration. Every variable is
+alive from [BB0, LAST USE]. So, you can only get 3 variables into
+registers.