<p dir="ltr">Allocas not in the entry block are treated as dynamic allocas and not stack slots. </p>
<br><div class="gmail_quote">On Sat, Apr 4, 2015, 8:37 PM Dave Pitsbawn <<a href="mailto:dpitsbawn@gmail.com">dpitsbawn@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Here is some IR that is working and executing as expected -- All allocas are in the first basic block, and only updates happen in other basic blocks.</div><div><br></div><div>define i32 @f() {<br></div><div>entry:</div><div>  %x = alloca i32</div><div>  store i32 333, i32* %x</div><div>  %i = alloca i32</div><div>  store i32 11, i32* %i</div><div>  br i1 true, label %if.then, label %if.else</div><div><br></div><div>if.then:                                          ; preds = %entry</div><div>  store i32 3, i32* %i</div><div>  %0 = load i32* %i</div><div>  ret i32 %0</div><div><br></div><div>if.else:                                          ; preds = %entry</div><div>  ret i32 2</div><div><br></div><div>if.end:                                           ; preds = %after_ret1, %after_</div><div>ret</div><div>  ret i32 1</div><div><br></div><div>after_ret:                                        ; No predecessors!</div><div>  br label %if.end</div><div><br></div><div>after_ret1:                                       ; No predecessors!</div><div>  br label %if.end</div><div><br></div><div>after_ret2:                                       ; No predecessors!</div><div>  ret i32 0</div><div>}</div><div><br></div><div>The following IR is slightly different in that the alloca is defined not in the first basic block:</div><div><br></div><div><div>define i32 @M() {</div><div>entry:</div><div>  %x = alloca i32</div><div>  store i32 333, i32* %x</div><div>  br i1 true, label %if.then, label %if.else</div><div><br></div><div>if.then:                                          ; preds = %entry</div><div>  %i = alloca i32</div><div>  store i32 3, i32* %i</div><div>  %0 = load i32* %i</div><div>  ret i32 %0</div><div><br></div><div>if.else:                                          ; preds = %entry</div><div>  ret i32 2</div><div><br></div><div>if.end:                                           ; preds = %after_ret1, %after_</div><div>ret</div><div>  ret i32 1</div><div><br></div><div>after_ret:                                        ; No predecessors!</div><div>  br label %if.end</div><div><br></div><div>after_ret1:                                       ; No predecessors!</div><div>  br label %if.end</div><div><br></div><div>after_ret2:                                       ; No predecessors!</div><div>  ret i32 0</div><div>}</div></div><div><br></div><div>This segfaults for me. The IR passes the function verifier. Can someone spot an error? I don't see any.</div></div>
______________________________<u></u>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">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/<u></u>mailman/listinfo/llvmdev</a><br>
</blockquote></div>