[llvm] r315791 - Fix assembler for alloca of multiple elements in non-zero addr space
Yaxun Liu via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 13 20:23:18 PDT 2017
Author: yaxunl
Date: Fri Oct 13 20:23:18 2017
New Revision: 315791
URL: http://llvm.org/viewvc/llvm-project?rev=315791&view=rev
Log:
Fix assembler for alloca of multiple elements in non-zero addr space
Currently llvm assembler emits parsing error for valid IR assembly
alloca i32, i32 9, addrspace(5)
when alloca addr space is 5.
This patch fixes that.
Differential Revision: https://reviews.llvm.org/D38713
Added:
llvm/trunk/test/Assembler/alloca-addrspace-elems.ll
Modified:
llvm/trunk/lib/AsmParser/LLParser.cpp
Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=315791&r1=315790&r2=315791&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Fri Oct 13 20:23:18 2017
@@ -6074,7 +6074,7 @@ bool LLParser::ParseCall(Instruction *&I
/// ParseAlloc
/// ::= 'alloca' 'inalloca'? 'swifterror'? Type (',' TypeAndValue)?
-/// (',' 'align' i32)?
+/// (',' 'align' i32)? (',', 'addrspace(n))?
int LLParser::ParseAlloc(Instruction *&Inst, PerFunctionState &PFS) {
Value *Size = nullptr;
LocTy SizeLoc, TyLoc, ASLoc;
@@ -6104,11 +6104,22 @@ int LLParser::ParseAlloc(Instruction *&I
} else if (Lex.getKind() == lltok::MetadataVar) {
AteExtraComma = true;
} else {
- if (ParseTypeAndValue(Size, SizeLoc, PFS) ||
- ParseOptionalCommaAlign(Alignment, AteExtraComma) ||
- (!AteExtraComma &&
- ParseOptionalCommaAddrSpace(AddrSpace, ASLoc, AteExtraComma)))
+ if (ParseTypeAndValue(Size, SizeLoc, PFS))
return true;
+ if (EatIfPresent(lltok::comma)) {
+ if (Lex.getKind() == lltok::kw_align) {
+ if (ParseOptionalAlignment(Alignment))
+ return true;
+ if (ParseOptionalCommaAddrSpace(AddrSpace, ASLoc, AteExtraComma))
+ return true;
+ } else if (Lex.getKind() == lltok::kw_addrspace) {
+ ASLoc = Lex.getLoc();
+ if (ParseOptionalAddrSpace(AddrSpace))
+ return true;
+ } else if (Lex.getKind() == lltok::MetadataVar) {
+ AteExtraComma = true;
+ }
+ }
}
}
Added: llvm/trunk/test/Assembler/alloca-addrspace-elems.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/alloca-addrspace-elems.ll?rev=315791&view=auto
==============================================================================
--- llvm/trunk/test/Assembler/alloca-addrspace-elems.ll (added)
+++ llvm/trunk/test/Assembler/alloca-addrspace-elems.ll Fri Oct 13 20:23:18 2017
@@ -0,0 +1,25 @@
+; RUN: llvm-as < %s | llvm-dis | FileCheck %s
+
+target datalayout = "A5"
+; CHECK: target datalayout = "A5"
+
+
+; CHECK: %alloca_array_no_align = alloca i32, i32 9, addrspace(5)
+; CHECK-NEXT: %alloca_array_align4 = alloca i32, i32 9, align 4, addrspace(5)
+; CHECK-NEXT: %alloca_array_no_align_metadata = alloca i32, i32 9, addrspace(5), !foo !0
+; CHECK-NEXT: %alloca_array_align4_metadata = alloca i32, i32 9, align 4, addrspace(5), !foo !0
+; CHECK-NEXT: %alloca_inalloca_array_no_align = alloca inalloca i32, i32 9, addrspace(5)
+; CHECK-NEXT: %alloca_inalloca_array_align4_metadata = alloca inalloca i32, i32 9, align 4, addrspace(5), !foo !0
+
+define void @use_alloca() {
+ %alloca_array_no_align = alloca i32, i32 9, addrspace(5)
+ %alloca_array_align4 = alloca i32, i32 9, align 4, addrspace(5)
+ %alloca_array_no_align_metadata = alloca i32, i32 9, addrspace(5), !foo !0
+ %alloca_array_align4_metadata = alloca i32, i32 9, align 4, addrspace(5), !foo !0
+ %alloca_inalloca_array_no_align = alloca inalloca i32, i32 9, addrspace(5)
+ %alloca_inalloca_array_align4_metadata = alloca inalloca i32, i32 9, align 4, addrspace(5), !foo !0
+
+ ret void
+}
+
+!0 = !{}
More information about the llvm-commits
mailing list