dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] libjit ChangeLog jit/jit-reg-alloc.c


From: Aleksey Demakov
Subject: [dotgnu-pnet-commits] libjit ChangeLog jit/jit-reg-alloc.c
Date: Sun, 06 Jul 2008 09:07:18 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    libjit
Changes by:     Aleksey Demakov <avd>   08/07/06 09:07:18

Modified files:
        .              : ChangeLog 
        jit            : jit-reg-alloc.c 

Log message:
        fix problem with global registers and commutative ops

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.382&r2=1.383
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-reg-alloc.c?cvsroot=dotgnu-pnet&r1=1.58&r2=1.59

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.382
retrieving revision 1.383
diff -u -b -r1.382 -r1.383
--- ChangeLog   29 May 2008 21:03:30 -0000      1.382
+++ ChangeLog   6 Jul 2008 09:07:18 -0000       1.383
@@ -1,3 +1,11 @@
+2008-07-06  Juan Jesus Garcia de Soria  <address@hidden>
+
+       * jit/jit-reg-alloc.c (choose_input_order): take into account global
+       registers to see if it is suitable to exchange input values. This
+       fixes a problem that took place when a commutative op is applied to
+       a value that resides in a global register and is both the dest and
+       the second source value of the op.
+
 2008-05-30  Aleksey Demakov  <address@hidden>
 
        * include/jit/jit-common.h: remove unused jit_function_compiled_t

Index: jit/jit-reg-alloc.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-reg-alloc.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -b -r1.58 -r1.59
--- jit/jit-reg-alloc.c 8 May 2008 06:39:51 -0000       1.58
+++ jit/jit-reg-alloc.c 6 Jul 2008 09:07:18 -0000       1.59
@@ -1219,6 +1219,8 @@
                                {
                                        if(regs->commutative)
                                        {
+                                               /* This depends on 
choose_input_order()
+                                                  doing its job on the next 
step. */
                                                use_cost = 0;
                                        }
                                        else
@@ -1273,11 +1275,15 @@
                        {
                                if(regs->commutative)
                                {
+                                       /* This depends on choose_input_order()
+                                          doing its job on the next step. */
                                        use_cost = 0;
                                }
 #ifdef JIT_REG_STACK
                                else if(regs->reversible && regs->no_pop)
                                {
+                                       /* This depends on choose_input_order()
+                                          doing its job on the next step. */
                                        use_cost = 0;
                                }
 #endif
@@ -1336,10 +1342,14 @@
 static void
 choose_input_order(jit_gencode_t gen, _jit_regs_t *regs)
 {
-       if(regs->descs[2].value
-          && regs->descs[2].value->in_register
-          && regs->descs[2].value->reg == regs->descs[0].reg
-          && regs->descs[2].value != regs->descs[1].value)
+       jit_value_t value;
+
+       value = regs->descs[2].value;
+       if(value && value != regs->descs[1].value
+          && ((value->in_register
+               && value->reg == regs->descs[0].reg)
+              || (value->in_global_register
+                  && value->global_reg == regs->descs[0].reg)))
        {
 #ifdef JIT_REG_STACK
                if(regs->reversible && regs->no_pop)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]