+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
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);
/* 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);
{
if(desc->value != regs->descs[0].value)
{
- clobber |= CLOBBER_INPUT_VALUE;
+ clobber_input = 1;
}
}
}
{
if(desc->used)
{
- if(!desc->copy && (clobber & CLOBBER_INPUT_VALUE) != 0)
+ if(!desc->copy && clobber_input)
{
desc->save = 1;
desc->kill = 1;
{
if(desc->used)
{
- if((clobber & CLOBBER_INPUT_VALUE) != 0)
+ if(clobber_input)
{
desc->kill = 1;
}