summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/LangRef.rst2
-rw-r--r--lib/AsmParser/LLParser.cpp33
-rw-r--r--lib/IR/AsmWriter.cpp4
-rw-r--r--test/Assembler/inalloca.ll10
-rw-r--r--test/CodeGen/X86/dynamic-alloca-in-entry.ll2
-rw-r--r--test/CodeGen/X86/inalloca-ctor.ll2
-rw-r--r--test/CodeGen/X86/inalloca-invoke.ll2
-rw-r--r--test/CodeGen/X86/inalloca-stdcall.ll2
-rw-r--r--test/CodeGen/X86/inalloca.ll6
-rw-r--r--test/Transforms/DeadArgElim/keepalive.ll2
-rwxr-xr-xtest/Verifier/inalloca-vararg.ll2
-rw-r--r--test/Verifier/inalloca2.ll8
12 files changed, 35 insertions, 40 deletions
diff --git a/docs/LangRef.rst b/docs/LangRef.rst
index e38184ca68..760a064f69 100644
--- a/docs/LangRef.rst
+++ b/docs/LangRef.rst
@@ -4713,7 +4713,7 @@ Syntax:
::
- <result> = alloca <type>[, inalloca][, <ty> <NumElements>][, align <alignment>] ; yields {type*}:result
+ <result> = alloca [inalloca] <type> [, <ty> <NumElements>] [, align <alignment>] ; yields {type*}:result
Overview:
"""""""""
diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp
index a4bbcfcefd..f29ceddf64 100644
--- a/lib/AsmParser/LLParser.cpp
+++ b/lib/AsmParser/LLParser.cpp
@@ -707,7 +707,8 @@ bool LLParser::ParseAlias(const std::string &Name, LocTy NameLoc,
/// OptionalThreadLocal OptionalAddrSpace OptionalUnNammedAddr
/// OptionalExternallyInitialized GlobalType Type Const
///
-/// Everything through visibility has been parsed already.
+/// Everything up to and including OptionalDLLStorageClass has been parsed
+/// already.
///
bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc,
unsigned Linkage, bool HasLinkage,
@@ -4071,33 +4072,27 @@ bool LLParser::ParseCall(Instruction *&Inst, PerFunctionState &PFS,
//===----------------------------------------------------------------------===//
/// ParseAlloc
-/// ::= 'alloca' Type (',' 'inalloca')? (',' TypeAndValue)? (',' OptionalInfo)?
+/// ::= 'alloca' 'inalloca'? Type (',' TypeAndValue)? (',' 'align' i32)?
int LLParser::ParseAlloc(Instruction *&Inst, PerFunctionState &PFS) {
Value *Size = 0;
LocTy SizeLoc;
unsigned Alignment = 0;
- bool IsInAlloca = false;
Type *Ty = 0;
+
+ bool IsInAlloca = EatIfPresent(lltok::kw_inalloca);
+
if (ParseType(Ty)) return true;
bool AteExtraComma = false;
if (EatIfPresent(lltok::comma)) {
- bool HaveComma = true;
- if (EatIfPresent(lltok::kw_inalloca)) {
- IsInAlloca = true;
- HaveComma = EatIfPresent(lltok::comma);
- }
-
- if (HaveComma) {
- if (Lex.getKind() == lltok::kw_align) {
- if (ParseOptionalAlignment(Alignment)) return true;
- } else if (Lex.getKind() == lltok::MetadataVar) {
- AteExtraComma = true;
- } else {
- if (ParseTypeAndValue(Size, SizeLoc, PFS) ||
- ParseOptionalCommaAlign(Alignment, AteExtraComma))
- return true;
- }
+ if (Lex.getKind() == lltok::kw_align) {
+ if (ParseOptionalAlignment(Alignment)) return true;
+ } else if (Lex.getKind() == lltok::MetadataVar) {
+ AteExtraComma = true;
+ } else {
+ if (ParseTypeAndValue(Size, SizeLoc, PFS) ||
+ ParseOptionalCommaAlign(Alignment, AteExtraComma))
+ return true;
}
}
diff --git a/lib/IR/AsmWriter.cpp b/lib/IR/AsmWriter.cpp
index 8a25ff8a97..c9ea49b222 100644
--- a/lib/IR/AsmWriter.cpp
+++ b/lib/IR/AsmWriter.cpp
@@ -1946,9 +1946,9 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
} else if (const AllocaInst *AI = dyn_cast<AllocaInst>(&I)) {
Out << ' ';
- TypePrinter.print(AI->getAllocatedType(), Out);
if (AI->isUsedWithInAlloca())
- Out << ", inalloca";
+ Out << "inalloca ";
+ TypePrinter.print(AI->getAllocatedType(), Out);
if (!AI->getArraySize() || AI->isArrayAllocation()) {
Out << ", ";
writeOperand(AI->getArraySize(), true);
diff --git a/test/Assembler/inalloca.ll b/test/Assembler/inalloca.ll
index 94fac26265..ff7a87e0a3 100644
--- a/test/Assembler/inalloca.ll
+++ b/test/Assembler/inalloca.ll
@@ -2,11 +2,11 @@
define void @a() {
entry:
- %0 = alloca i32, inalloca
- %1 = alloca [2 x i32], inalloca
- %2 = alloca i32, inalloca, i32 2
- %3 = alloca i32, inalloca, i32 2, align 16
- %4 = alloca i32, inalloca, i32 2, align 16, !foo !0
+ %0 = alloca inalloca i32
+ %1 = alloca inalloca [2 x i32]
+ %2 = alloca inalloca i32, i32 2
+ %3 = alloca inalloca i32, i32 2, align 16
+ %4 = alloca inalloca i32, i32 2, align 16, !foo !0
%5 = alloca i32, i32 2, align 16, !foo !0
%6 = alloca i32, i32 2, align 16
ret void
diff --git a/test/CodeGen/X86/dynamic-alloca-in-entry.ll b/test/CodeGen/X86/dynamic-alloca-in-entry.ll
index 2ac89baaf9..7ed471c2f5 100644
--- a/test/CodeGen/X86/dynamic-alloca-in-entry.ll
+++ b/test/CodeGen/X86/dynamic-alloca-in-entry.ll
@@ -11,7 +11,7 @@ define void @foo(i32 %n) {
; Use of inalloca implies that that the alloca is not static.
define void @bar() {
- %m = alloca i32, inalloca
+ %m = alloca inalloca i32
ret void
}
; CHECK-LABEL: _bar:
diff --git a/test/CodeGen/X86/inalloca-ctor.ll b/test/CodeGen/X86/inalloca-ctor.ll
index f81e9675b7..7cfa929135 100644
--- a/test/CodeGen/X86/inalloca-ctor.ll
+++ b/test/CodeGen/X86/inalloca-ctor.ll
@@ -10,7 +10,7 @@ declare void @Foo_ctor(%Foo* %this)
define void @g() {
entry:
- %args = alloca %frame, inalloca
+ %args = alloca inalloca %frame
%c = getelementptr %frame* %args, i32 0, i32 2
; CHECK: movl $20, %eax
; CHECK: calll __chkstk
diff --git a/test/CodeGen/X86/inalloca-invoke.ll b/test/CodeGen/X86/inalloca-invoke.ll
index ac530ca525..6cff9ac064 100644
--- a/test/CodeGen/X86/inalloca-invoke.ll
+++ b/test/CodeGen/X86/inalloca-invoke.ll
@@ -16,7 +16,7 @@ define i32 @main() {
blah:
%inalloca.save = call i8* @llvm.stacksave()
- %rev_args = alloca %frame.reverse, inalloca, align 4
+ %rev_args = alloca inalloca %frame.reverse, align 4
%beg = getelementptr %frame.reverse* %rev_args, i32 0, i32 0
%end = getelementptr %frame.reverse* %rev_args, i32 0, i32 1
diff --git a/test/CodeGen/X86/inalloca-stdcall.ll b/test/CodeGen/X86/inalloca-stdcall.ll
index 93ac451a50..54f97d99a9 100644
--- a/test/CodeGen/X86/inalloca-stdcall.ll
+++ b/test/CodeGen/X86/inalloca-stdcall.ll
@@ -6,7 +6,7 @@ declare x86_stdcallcc void @f(%Foo* inalloca %a)
declare x86_stdcallcc void @i(i32 %a)
define void @g() {
- %b = alloca %Foo, inalloca
+ %b = alloca inalloca %Foo
; CHECK: movl $8, %eax
; CHECK: calll __chkstk
; CHECK: movl %[[REG:[^,]*]], %esp
diff --git a/test/CodeGen/X86/inalloca.ll b/test/CodeGen/X86/inalloca.ll
index ac002863cf..12643f9d0d 100644
--- a/test/CodeGen/X86/inalloca.ll
+++ b/test/CodeGen/X86/inalloca.ll
@@ -7,7 +7,7 @@ declare void @f(%Foo* inalloca %b)
define void @a() {
; CHECK-LABEL: _a:
entry:
- %b = alloca %Foo, inalloca
+ %b = alloca inalloca %Foo
; CHECK: movl $8, %eax
; CHECK: calll __chkstk
; CHECK: movl %[[REG:[^,]*]], %esp
@@ -27,7 +27,7 @@ declare void @inreg_with_inalloca(i32 inreg %a, %Foo* inalloca %b)
define void @b() {
; CHECK-LABEL: _b:
entry:
- %b = alloca %Foo, inalloca
+ %b = alloca inalloca %Foo
; CHECK: movl $8, %eax
; CHECK: calll __chkstk
; CHECK: movl %[[REG:[^,]*]], %esp
@@ -48,7 +48,7 @@ declare x86_thiscallcc void @thiscall_with_inalloca(i8* %a, %Foo* inalloca %b)
define void @c() {
; CHECK-LABEL: _c:
entry:
- %b = alloca %Foo, inalloca
+ %b = alloca inalloca %Foo
; CHECK: movl $8, %eax
; CHECK: calll __chkstk
; CHECK: movl %[[REG:[^,]*]], %esp
diff --git a/test/Transforms/DeadArgElim/keepalive.ll b/test/Transforms/DeadArgElim/keepalive.ll
index b66df792ca..16569db4d3 100644
--- a/test/Transforms/DeadArgElim/keepalive.ll
+++ b/test/Transforms/DeadArgElim/keepalive.ll
@@ -38,7 +38,7 @@ define internal x86_thiscallcc i32 @unused_this(i32* %this, i32* inalloca %argme
define i32 @caller2() {
%t = alloca i32
- %m = alloca i32, inalloca
+ %m = alloca inalloca i32
store i32 42, i32* %m
%v = call x86_thiscallcc i32 @unused_this(i32* %t, i32* inalloca %m)
ret i32 %v
diff --git a/test/Verifier/inalloca-vararg.ll b/test/Verifier/inalloca-vararg.ll
index 8521ebce2d..5099fd1992 100755
--- a/test/Verifier/inalloca-vararg.ll
+++ b/test/Verifier/inalloca-vararg.ll
@@ -2,7 +2,7 @@
declare void @h(i32, ...)
define void @i() {
- %args = alloca i32, inalloca
+ %args = alloca inalloca i32
call void (i32, ...)* @h(i32 1, i32* inalloca %args, i32 3)
; CHECK: inalloca isn't on the last argument!
ret void
diff --git a/test/Verifier/inalloca2.ll b/test/Verifier/inalloca2.ll
index e4e81be386..12a4549992 100644
--- a/test/Verifier/inalloca2.ll
+++ b/test/Verifier/inalloca2.ll
@@ -6,7 +6,7 @@ declare void @doit(i64* inalloca %a)
define void @a() {
entry:
- %a = alloca [2 x i32], inalloca
+ %a = alloca inalloca [2 x i32]
%b = bitcast [2 x i32]* %a to i64*
call void @doit(i64* inalloca %b)
ret void
@@ -14,7 +14,7 @@ entry:
define void @b() {
entry:
- %a = alloca i64, inalloca
+ %a = alloca inalloca i64
call void @doit(i64* inalloca %a)
call void @doit(i64* inalloca %a)
ret void
@@ -25,11 +25,11 @@ entry:
br i1 %cond, label %if, label %else
if:
- %a = alloca i64, inalloca
+ %a = alloca inalloca i64
br label %call
else:
- %b = alloca i64, inalloca
+ %b = alloca inalloca i64
br label %call
call: