On 1 October 2012 18:34, reed kotler <span dir="ltr"><<a href="mailto:rkotler@mips.com" target="_blank">rkotler@mips.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
This code is essentially from an LTP test (
<a href="http://ltp.sourceforge.net/" target="_blank"> http://ltp.sourceforge.net/</a>
).<br>
<br>
<br>
#include <stdlib.h><br>
<br>
int main() {<br>
void *curr;<br>
<br>
do {<br>
curr = malloc(1);<br>
} while (curr);<br>
<br>
return 0;<br>
<br>
}<br>
<br>
If you compile it with no optimization, it will keep the malloc
calls.<br>
<br>
If you compile it with -O2, it will create an infinite loop, i.e.
assuming that malloc always returns a non zero result and the result
is not used.<br></div></blockquote><div><br></div><div>As far as I know, this optimization is legal. Fix the test with a volatile pointer:</div><div><br></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">int main() {</span><br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">
<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"> volatile char *curr;</span><br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">
<br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"> do {</span><br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">
<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"> curr = malloc(1);</span></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"> int i = *curr;</span></div>
<div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"> (void)i;</span></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"> } while (curr);</span><br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">
<br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"> return 0;</span><br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">
<span style="background-color:rgb(255,255,255);color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px">}</span></div><div><br></div><div>which produces:</div><div><br></div><div><div> pushq %rax</div></div>
<div><div>.Ltmp1:</div></div><div> movl $1, %edi</div><div><div> callq malloc</div><div> movb (%rax), %cl</div><div> testq %rax, %rax</div><div> jne .LBB0_1</div></div><div>
<div># BB#2: # %do.end</div><div> xorl %eax, %eax</div><div> popq %rdx</div><div> ret</div></div><div><br></div><div>Oh how people don't appreciate the luxury of having an infinite memory machine!</div>
<div><br></div><div>Nick</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div text="#000000" bgcolor="#FFFFFF">~/llvmpb/install/bin/clang loop.c -O2 -S<br>
<br>
.file "loop.c"<br>
.text<br>
.globl main<br>
.align 16, 0x90<br>
.type main,@function<br>
main: # @main<br>
.cfi_startproc<br>
# BB#0: # %entry<br>
.align 16, 0x90<br>
.LBB0_1: # %do.body<br>
# =>This Inner Loop
Header: Depth=1<br>
jmp .LBB0_1<br>
.Ltmp0:<br>
.size main, .Ltmp0-main<br>
.cfi_endproc<br>
<br>
<br>
.section ".note.GNU-stack","",@progbits<br>
<br>
</div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a> <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br>