Hi,

On Tue, 27 Apr 2010, Greg McGary wrote:

> (define_insn "*udivmodsi4_libcall"
>   [(set (reg:SI 4)
>     (udiv:SI (reg:SI 1)
>          (reg:SI 2)))
>    (set (reg:SI 1)
>     (umod:SI (reg:SI 1)
>          (reg:SI 2)))
>    (clobber (reg:SI 2))
>    (clobber (reg:SI 3))
>    (clobber (reg:CC CC_REGNUM))
>    (clobber (reg:SI RETURN_POINTER_REGNUM))]
>   ""
>   "call\\t__udivmodsi4"
>   [(set_attr "length"    "4")])

So, this pattern uses r2 and clobbers r2+r3.  Two calls in a row can't be 
eliminated because the execution of one destroys one operand of the other 
as far as GCC knows, and the necessary copies to reload the correct value 
into r2 before the second call might confuse combine/CSE/DCE/whatever.  At  
least that would be my theory to start from :)


Ciao,
Michael.

Reply via email to