]> git.unchartedbackwaters.co.uk Git - francis/libjit.git/commitdiff
fix a problem with the clobber flag being ignored
authorAleksey Demakov <ademakov@gmail.com>
Fri, 18 Aug 2006 18:14:27 +0000 (18:14 +0000)
committerAleksey Demakov <ademakov@gmail.com>
Fri, 18 Aug 2006 18:14:27 +0000 (18:14 +0000)
ChangeLog
jit/jit-reg-alloc.c

index ccee0292fb50c0f109d9ff357bc7aaf11b393cc8..d12e494a82478361fdcbb282e67d0d100c1c44cf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-08-19  Aleksey Demakov  <ademakov@gmail.com>
+
+       * jit/jit-reg-alloc.c (set_regdesc_flags): fix a problem with the
+       clobber flag being ignored. The problem was introduced by the patch
+       from 2006-06-17.
+
 2006-08-15  Thomas Cort  <linuxgeek@gmail.com>
        * jit/jit-rules-alpha.c jit/jit-rules-alpha.h jit/jit-rules-alpha.ins
        Add a TODO() macro to print unimplemented warnings. Fix some 
index d14ead4a44ed1a82d765919007185cc6b3eaac6a..8ea42191c8d6544cb44a99e7cce7afbea23c1621 100644 (file)
@@ -2165,8 +2165,8 @@ static int
 set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index)
 {
        _jit_regdesc_t *desc;
-       int reg, other_reg;
-       int clobber, stack_start;
+       int reg, other_reg, stack_start;
+       int clobber, clobber_input;
 
 #ifdef JIT_REG_DEBUG
        printf("set_regdesc_flags(index = %d)\n", index);
@@ -2199,6 +2199,18 @@ set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index)
 
        /* See if the value clobbers the register it is assigned to. */
        clobber = clobbers_register(gen, regs, index, desc->reg, desc->other_reg);
+       if(jit_reg_is_used(regs->clobber, desc->reg))
+       {
+               clobber_input = 1;
+       }
+       else if(desc->other_reg >= 0 && jit_reg_is_used(regs->clobber, desc->other_reg))
+       {
+               clobber_input = 1;
+       }
+       else
+       {
+               clobber_input = (clobber & CLOBBER_INPUT_VALUE) != 0;
+       }
        if((clobber & CLOBBER_REG) != 0)
        {
                jit_reg_set_used(regs->clobber, desc->reg);
@@ -2235,7 +2247,7 @@ set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index)
                                {
                                        if(desc->value != regs->descs[0].value)
                                        {
-                                               clobber |= CLOBBER_INPUT_VALUE;
+                                               clobber_input = 1;
                                        }
                                }
                        }
@@ -2305,7 +2317,7 @@ set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index)
                {
                        if(desc->used)
                        {
-                               if(!desc->copy && (clobber & CLOBBER_INPUT_VALUE) != 0)
+                               if(!desc->copy && clobber_input)
                                {
                                        desc->save = 1;
                                        desc->kill = 1;
@@ -2324,7 +2336,7 @@ set_regdesc_flags(jit_gencode_t gen, _jit_regs_t *regs, int index)
                {
                        if(desc->used)
                        {
-                               if((clobber & CLOBBER_INPUT_VALUE) != 0)
+                               if(clobber_input)
                                {
                                        desc->kill = 1;
                                }