This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: a strange infelicity of register allocation


On Tue, 26 Jan 1999 15:44:06 +0000 (GMT), Joern Rennecke wrote:

>> C:
>> 	buf = xrealloc (buf, op - buf);
>> 	fp->buf = buf;
>> 	return op - buf;
>> 
>> becomes
[...]

>The first problem here is that (op - buf) hasn't been subjected to cse.
>Is the address of buf taken anywhere in this function?

No, neither buf nor op has its address taken.

Right before CSE, we have this RTL for the above code.  CSE makes no
changes except to annotate insns with patterns.  Flow thinks this is
one basic block, and that reg 86 is dead after insn 608.

Local register allocation says reg 86 is bb-local but doesn't give it
a hard register.  Combine collapses reg 87 into reg 28.

(code_label 603 601 606 47 "")

(insn 606 603 608 (set (reg:SI 86)
        (minus:SI (reg/v:SI 28)
            (reg/v:SI 26))) -1 (nil)
    (nil))

(insn 608 606 610 (set (mem:SI (pre_dec:SI (reg:SI 7 %esp)) 0)
        (reg:SI 86)) -1 (nil)
    (nil))

(insn 610 608 612 (set (mem:SI (pre_dec:SI (reg:SI 7 %esp)) 0)
        (reg/v:SI 26)) -1 (nil)
    (nil))

(call_insn 612 610 614 (set (reg:SI 0 %eax)
        (call (mem:QI (symbol_ref:SI ("xrealloc")) 0)
            (const_int 8))) -1 (nil)
    (nil)
    (nil))

(insn 614 612 617 (set (reg/v:SI 26)
        (reg:SI 0 %eax)) -1 (nil)
    (nil))

(insn 617 614 620 (set (mem/s:SI (reg/v:SI 23) 5)
        (reg/v:SI 26)) -1 (nil)
    (nil))

(insn 620 617 622 (set (reg:SI 87)
        (minus:SI (reg/v:SI 28)
            (reg/v:SI 26))) -1 (nil)
    (nil))

(insn 622 620 624 (set (reg/i:SI 0 %eax)
        (reg:SI 87)) -1 (nil)
    (nil))

(jump_insn 624 622 625 (set (pc)
        (label_ref 654)) -1 (nil)
    (nil))

(barrier 625 624 626)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]