Author: lupus
Date: 2005-03-22 10:05:01 -0500 (Tue, 22 Mar 2005)
New Revision: 42109

Modified:
   trunk/mono/mono/mini/ChangeLog
   trunk/mono/mono/mini/mini.c
Log:


Tue Mar 22 16:28:48 CET 2005 Paolo Molaro <[EMAIL PROTECTED]>

        * mini.c: fix tail recursion elimination (see test in bug#73936).



Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog      2005-03-22 13:50:05 UTC (rev 42108)
+++ trunk/mono/mono/mini/ChangeLog      2005-03-22 15:05:01 UTC (rev 42109)
@@ -1,3 +1,8 @@
+
+Tue Mar 22 16:28:48 CET 2005 Paolo Molaro <[EMAIL PROTECTED]>
+
+       * mini.c: fix tail recursion elimination (see test in bug#73936).
+
 2005-03-21  Zoltan Varga  <[EMAIL PROTECTED]>
 
        * mini-amd64.c (mono_arch_output_basic_block): Add inline versions of

Modified: trunk/mono/mono/mini/mini.c
===================================================================
--- trunk/mono/mono/mini/mini.c 2005-03-22 13:50:05 UTC (rev 42108)
+++ trunk/mono/mono/mini/mini.c 2005-03-22 15:05:01 UTC (rev 42109)
@@ -4028,14 +4028,22 @@
                                        link_bblock (cfg, bblock, tblock);
                                        ins->inst_target_bb = tblock;
                                        start_new_bblock = 1;
-                                       ip += 5;
-                                       
+
                                        if (!MONO_TYPE_IS_VOID (fsig->ret)) {
                                                /* just create a dummy - the 
value is never used */
                                                ins = mono_compile_create_var 
(cfg, fsig->ret, OP_LOCAL);
                                                NEW_TEMPLOAD (cfg, *sp, 
ins->inst_c0);
                                                sp++;
+                                               MONO_INST_NEW (cfg, ins, 
CEE_POP);
+                                               MONO_ADD_INS (bblock, ins);
+                                               --sp;
+                                               ins->inst_i0 = *sp;
                                        }
+                                       /* skip the CEE_RET, too */
+                                       if (ip_in_bb (cfg, bblock, ip + 5))
+                                               ip += 6;
+                                       else
+                                               ip += 5;
 
                                        break;
                                }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to