llvm-6502/test/Verifier/inalloca2.ll
Reid Kleckner 3cbfa1617f Add an inalloca flag to allocas
Summary:
The only current use of this flag is to mark the alloca as dynamic, even
if its in the entry block.  The stack adjustment for the alloca can
never be folded into the prologue because the call may clear it and it
has to be allocated at the top of the stack.

Reviewers: majnemer

CC: llvm-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D2571

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199525 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-17 23:58:17 +00:00

40 lines
725 B
LLVM

; This used to be invalid, but now it's valid. Ensure the verifier
; doesn't reject it.
; RUN: llvm-as %s -o /dev/null
declare void @doit(i64* inalloca %a)
define void @a() {
entry:
%a = alloca [2 x i32], inalloca
%b = bitcast [2 x i32]* %a to i64*
call void @doit(i64* inalloca %b)
ret void
}
define void @b() {
entry:
%a = alloca i64, inalloca
call void @doit(i64* inalloca %a)
call void @doit(i64* inalloca %a)
ret void
}
define void @c(i1 %cond) {
entry:
br i1 %cond, label %if, label %else
if:
%a = alloca i64, inalloca
br label %call
else:
%b = alloca i64, inalloca
br label %call
call:
%args = phi i64* [ %a, %if ], [ %b, %else ]
call void @doit(i64* inalloca %args)
ret void
}