[llvm-dev] Register spilling in caller saved backend

Quentin Colombet via llvm-dev llvm-dev at lists.llvm.org
Tue Sep 1 09:37:33 PDT 2015


Hi Jacques,

Looked at the MIs you sent me and +1 to all that Philip said.
I is live across the call of foo, and since we do not have any CSR to preserve it, we must spill.

Cheers,
Q.
> On Sep 1, 2015, at 9:13 AM, Philip Reames via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> 
> 
> On 09/01/2015 08:52 AM, Jacques Pienaar via llvm-dev wrote:
>> Hey,
>> 
>> I'm playing around with a backend with no callee saved registers and noticed more spilling than seems needed. I tried digging into the spilling code but with limited success. I also tried removing all the callee saved registers in the X86 backend and saw the same effect (basically making CSRs equal to CSR_NoRegs). So I seem to be misunderstanding something or missing something simple, and thought I'd ask.
>> 
>> Consider this program as an example:
>> 
>> volatile int x;
>> 
>> int __attribute__((noinline)) foo() { return x; }
>> 
>> int main() {
>>   for (int i = 0; i < 10; ++i) {
>>     foo();
>>   }
>> }
>> 
>> The resultant output code spills 'i' within the loop (I have to compile with -fno-unroll-loops else the loop and 'i' gets optimized away) while 'i' is assigned to a register that is used nowhere else in the generated program and I would consider 'foo' easy to analyse. At the call site of 'foo' the debugging output reports that the stack pointer and return value registers are "imp-use" and "imp-def" and no other registers are used.
>> 
>> Should the spilling have occurred? Or this due to some feature in the backend that is missing?
> What are you expectating here?  Are you expecting the backend to recognize that foo doesn't actually clobber any registers?  I don't believe we do that today.  Without callee saved registers, if the value 'i' needs to be preserved across the call, it will need to be spilled.  There's no register we can put it in without it being clobbered.
>> 
>> Thanks,
>> 
>> Jacques
>> 
>> 
>> 
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150901/95f226d9/attachment.html>


More information about the llvm-dev mailing list