<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<br>
<br>
<div class="moz-cite-prefix">On 09/01/2015 08:52 AM, Jacques Pienaar
via llvm-dev wrote:<br>
</div>
<blockquote
cite="mid:CAM4W+YeX20p2sAwtwbaWKR_-FuzV7eQ=KTFGWuiAovxN1Zs-Jg@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote">
<div dir="ltr">Hey,
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>Consider this program as an example:</div>
<div><br>
</div>
<div>
<div>volatile int x;</div>
<div><br>
</div>
<div>int __attribute__((noinline)) foo() { return x; }</div>
<div><br>
</div>
<div>int main() {</div>
<div> for (int i = 0; i < 10; ++i) {</div>
<div> foo();</div>
<div> }</div>
<div>}</div>
</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>Should the spilling have occurred? Or this due to some
feature in the backend that is missing?</div>
</div>
</div>
</div>
</blockquote>
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.<br>
<blockquote
cite="mid:CAM4W+YeX20p2sAwtwbaWKR_-FuzV7eQ=KTFGWuiAovxN1Zs-Jg@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote">
<div dir="ltr">
<div><br>
</div>
<div>Thanks,</div>
<div><br>
</div>
<div>Jacques</div>
</div>
</div>
<br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote>
<br>
</body>
</html>