Optimized Allocation of Argument registers

Ajit Kumar Agarwal ajit.kumar.agarwal@xilinx.com
Tue Nov 18 14:27:00 GMT 2014

-----Original Message-----
From: Jeff Law [mailto:law@redhat.com] 
Sent: Monday, November 17, 2014 9:27 PM
To: Ajit Kumar Agarwal; Vladimir Makarov; gcc Mailing List
Cc: Vinod Kathail; Shail Aditya Gupta; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: Optimized Allocation of Argument registers

On 11/17/14 06:13, Ajit Kumar Agarwal wrote:
> Hello All:
> I was looking at the optimized usage and allocation to argument registers. There are two aspects to it as follows.
> 1. We need to specify the argument registers as followed by ABI in the target specific code. Based on the function
>   argument registers defined in the target dependent code the function argument registers are passed. If the
>   number of argument registers defined in the Architecture is large say 6/8 function argument registers.
> Most of the time in the benchmarks we don't pass so many arguments and the number of arguments passed
>   is quite less. Since we reserve the function arguments as specified 
> in the target specific code for the given architecture, leads to unoptimized usage as this function argument registers will not be used in the function.
> Thus we need to steal some of the arguments registers and have the 
> usage of those in the function depending on the support of the number of function argument registers. The stealing of function argument registers will
>   lead more number of registers available that are to be used in the function and leading to less spill and fetch.
> 2. The other aspect of the function argument registers is not spill 
> and fetch the argument registers as they are live across the function 
> call. But the liveness is limited to certain point of the called 
> function after that point the function argument registers are not live 
> and can be used inside the called function. Other aspect is if there is a shortage of registers than can the function argument registers should be used as spill candidate? Will this lead to the optimized code.
> Please let me know what do you think.
>>Typically GCC ports do not reserve the function argument/return registers, they are allocatable just like any other call clobbered register.

>>In essence arguments for function calls are set up at each call site by copying values out of pseudo registers, memory, constant initializations, etc to the >>appropriate outgoing argument register.  The allocator will, when possible and profitable try to assign the pseudo register to the appropriate argument >>register to eliminate the copies.

>>Similarly, GCC copies values out of the incoming argument registers and into pseudos at the start of a function.  The allocator, again when possible and >>profitable, will try to allocate the pseudos to the incoming argument registers to avoid the copy.

>>So in summary, there is no reason to reserve registers for argument passing in GCC and doing so would be wasteful.  Treat the argument registers as any >>other call clobbered register and allow the register allocator to make appropriate decisions based on liveness, expected uses, call-crossing liveness, related >>copies, etc etc.

Thanks Jeff for the explanation and Clarifications.

Thanks & Regards

More information about the Gcc mailing list