On Mon, Nov 30, 2009 at 4:19 PM, David Hansel <span dir="ltr">&lt;<a href="mailto:hansel@reactive-systems.com">hansel@reactive-systems.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I tried using &quot;-native-commented 6&quot; but (due to the size of the code involved)<br>
compilation (in the &quot;outputAssembly&quot; stage) seems to take a VERY long time.<br>
I also tried &quot;-native-commented 5&quot; with the same result.  A setting of &quot;4&quot;<br>
worked much faster and I have uploaded a file hansel-20091130-1.s containing<br>
the basic block.<br></blockquote><div><br>That seems to be enough to provide a hint.  I think that the issue is that the function address got placed in %r11, which is a caller save register.  The contents of caller save registers are pushed to memory immediately before the call instruction, for any register whose content is live after the call and purged from the register allocation.  Of course, the function address is still live *at* the call instruction, although it is not live after the call instruction.  Small examples seem to favor %r15 as the register into which the function address is placed, which is not caller save, and so not susceptible to this issue.  It also fits with small changes near the indirect function call eliminating the segfault; such changes alter the liveness and used registers and presumably the function address get stored in a non-caller save register.  If this is indeed the source of the issue, then it is simply a native amd64 codegen bug (and, possibly, a latent x86 codegen bug as well) and is independent of the target OS; that is, it is not mingw specific.<br>
<br></div></div>