[LLVMdev] alloca not in first bb behaving differently

Dave Pitsbawn
Sun, 05 Apr 2015 03:28:58 -0000

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.

define i32 @f() {
entry:
  %x = alloca i32
  store i32 333, i32* %x
  %i = alloca i32
  store i32 11, i32* %i
  br i1 true, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 3, i32* %i
  %0 = load i32* %i
  ret i32 %0

if.else:                                          ; preds = %entry
  ret i32 2

if.end:                                           ; preds = %after_ret1,
%after_
ret
  ret i32 1

after_ret:                                        ; No predecessors!
  br label %if.end

after_ret1:                                       ; No predecessors!
  br label %if.end

after_ret2:                                       ; No predecessors!
  ret i32 0
}

The following IR is slightly different in that the alloca is defined not in
the first basic block:

define i32 @M() {
entry:
  %x = alloca i32
  store i32 333, i32* %x
  br i1 true, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %i = alloca i32
  store i32 3, i32* %i
  %0 = load i32* %i
  ret i32 %0

if.else:                                          ; preds = %entry
  ret i32 2

if.end:                                           ; preds = %after_ret1,
%after_
ret
  ret i32 1

after_ret:                                        ; No predecessors!
  br label %if.end

after_ret1:                                       ; No predecessors!
  br label %if.end

after_ret2:                                       ; No predecessors!
  ret i32 0
}

This segfaults for me. The IR passes the function verifier. Can someone
spot an error? I don't see any.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20150404/38aaac34/attachment.html>