mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-27 13:30:05 +00:00
Parse debug info attached with insertvalue and extractvalue instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85921 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
747409a290
commit
e8bc45a645
@ -1137,6 +1137,8 @@ bool LLParser::ParseIndexList(SmallVectorImpl<unsigned> &Indices) {
|
||||
return TokError("expected ',' as start of index list");
|
||||
|
||||
while (EatIfPresent(lltok::comma)) {
|
||||
if (Lex.getKind() == lltok::NamedOrCustomMD)
|
||||
break;
|
||||
unsigned Idx;
|
||||
if (ParseUInt32(Idx)) return true;
|
||||
Indices.push_back(Idx);
|
||||
@ -2111,6 +2113,9 @@ bool LLParser::ParseValID(ValID &ID) {
|
||||
ParseIndexList(Indices) ||
|
||||
ParseToken(lltok::rparen, "expected ')' in extractvalue constantexpr"))
|
||||
return true;
|
||||
if (Lex.getKind() == lltok::NamedOrCustomMD)
|
||||
if (ParseOptionalCustomMetadata()) return true;
|
||||
|
||||
if (!isa<StructType>(Val->getType()) && !isa<ArrayType>(Val->getType()))
|
||||
return Error(ID.Loc, "extractvalue operand must be array or struct");
|
||||
if (!ExtractValueInst::getIndexedType(Val->getType(), Indices.begin(),
|
||||
@ -2132,6 +2137,8 @@ bool LLParser::ParseValID(ValID &ID) {
|
||||
ParseIndexList(Indices) ||
|
||||
ParseToken(lltok::rparen, "expected ')' in insertvalue constantexpr"))
|
||||
return true;
|
||||
if (Lex.getKind() == lltok::NamedOrCustomMD)
|
||||
if (ParseOptionalCustomMetadata()) return true;
|
||||
if (!isa<StructType>(Val0->getType()) && !isa<ArrayType>(Val0->getType()))
|
||||
return Error(ID.Loc, "extractvalue operand must be array or struct");
|
||||
if (!ExtractValueInst::getIndexedType(Val0->getType(), Indices.begin(),
|
||||
@ -3737,6 +3744,8 @@ bool LLParser::ParseExtractValue(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
if (ParseTypeAndValue(Val, Loc, PFS) ||
|
||||
ParseIndexList(Indices))
|
||||
return true;
|
||||
if (Lex.getKind() == lltok::NamedOrCustomMD)
|
||||
if (ParseOptionalCustomMetadata()) return true;
|
||||
|
||||
if (!isa<StructType>(Val->getType()) && !isa<ArrayType>(Val->getType()))
|
||||
return Error(Loc, "extractvalue operand must be array or struct");
|
||||
@ -3758,6 +3767,8 @@ bool LLParser::ParseInsertValue(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
ParseTypeAndValue(Val1, Loc1, PFS) ||
|
||||
ParseIndexList(Indices))
|
||||
return true;
|
||||
if (Lex.getKind() == lltok::NamedOrCustomMD)
|
||||
if (ParseOptionalCustomMetadata()) return true;
|
||||
|
||||
if (!isa<StructType>(Val0->getType()) && !isa<ArrayType>(Val0->getType()))
|
||||
return Error(Loc0, "extractvalue operand must be array or struct");
|
||||
|
11
test/DebugInfo/2009-11-03-InsertExtractValue.ll
Normal file
11
test/DebugInfo/2009-11-03-InsertExtractValue.ll
Normal file
@ -0,0 +1,11 @@
|
||||
; RUN: llvm-as < %s | llvm-dis | FileCheck %s
|
||||
|
||||
!0 = metadata !{i32 42}
|
||||
|
||||
define <{i32, i32}> @f1() {
|
||||
; CHECK: !dbg !0
|
||||
%r = insertvalue <{ i32, i32 }> zeroinitializer, i32 4, 1, !dbg !0
|
||||
; CHECK: !dbg !0
|
||||
%e = extractvalue <{ i32, i32 }> %r, 0, !dbg !0
|
||||
ret <{ i32, i32 }> %r
|
||||
}
|
Loading…
Reference in New Issue
Block a user