<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 27 October 2015 at 08:41, David Chisnall via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=""><div class="h5">On 27 Oct 2015, at 05:13, Matt Arsenault via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
><br>
>> On Oct 27, 2015, at 12:46 AM, Peter McKinna via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
>><br>
>> label_1:                                          ; preds = %label_2, %entry<br>
>>   %v.87 = load i64, i64* %i, align 8<br>
>>   %abs_icmp = icmp slt i64 %v.87, 0<br>
>>   %itetmp = alloca i64<br>
>>   br i1 %abs_icmp, label %abs_then, label %abs_else<br>
><br>
> You are supposed to have all allocas in the entry block, although I’m not sure if this is not expected to work.<br>
<br>
</div></div>This will work, but without a stacksave / stackrestore, each loop iteration will allocate 8 bytes of space on the stack.  The default stack size on x86-64 is likely to be about 8MB, so if your loop runs for a million iterations, it’s pretty much guaranteed to run out of stack space and segfault.  If it runs for less and is not one of the first calls in the stack, the same applies.<br></blockquote><div><br></div><div>And because this is rounded up to 16 bytes, it runs out of half as many iterations - in other words, around 500k iterations. <br><br></div><div>Not sure why the compiler generates such awkward code here:<br><br></div><div><div><span style="white-space:pre-wrap">        </span>movq<span style="white-space:pre-wrap">    </span>%rsp, %rax</div><div><span style="white-space:pre-wrap">       </span>addq<span style="white-space:pre-wrap">    </span>$-16, %rax</div><div><span style="white-space:pre-wrap">       </span>movq<span style="white-space:pre-wrap">    </span>%rax, %rsp</div><span style="white-space:pre-wrap"><br></span></div><div><span style="white-space:pre-wrap">but you can see that it subtracts 16 from the stack pointer each iteration, and will eventually run out of stack-space.<br><br></span></div><div><span style="white-space:pre-wrap">Move the alloca out to the beginning of the function.<br></span></div><div><br>--<br></div><div>Mats<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
David<br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div><br></div></div>