LLVM
22.0.0git
lib
MC
MCParser
MCAsmParserExtension.cpp
Go to the documentation of this file.
1
//===- MCAsmParserExtension.cpp - Asm Parser Hooks ------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "
llvm/MC/MCParser/MCAsmParserExtension.h
"
10
#include "
llvm/MC/MCContext.h
"
11
#include "
llvm/MC/MCExpr.h
"
12
#include "
llvm/MC/MCParser/AsmLexer.h
"
13
#include "
llvm/MC/MCStreamer.h
"
14
15
using namespace
llvm
;
16
17
MCAsmParserExtension::MCAsmParserExtension
() =
default
;
18
19
MCAsmParserExtension::~MCAsmParserExtension
() =
default
;
20
21
void
MCAsmParserExtension::Initialize
(
MCAsmParser
&Parser) {
22
this->Parser = &Parser;
23
}
24
25
/// parseDirectiveCGProfile
26
/// ::= .cg_profile identifier, identifier, <number>
27
bool
MCAsmParserExtension::parseDirectiveCGProfile
(
StringRef
,
SMLoc
) {
28
StringRef
From;
29
SMLoc
FromLoc =
getLexer
().
getLoc
();
30
if
(
getParser
().parseIdentifier(From))
31
return
TokError
(
"expected identifier in directive"
);
32
33
if
(
getLexer
().
isNot
(
AsmToken::Comma
))
34
return
TokError
(
"expected a comma"
);
35
Lex
();
36
37
StringRef
To;
38
SMLoc
ToLoc =
getLexer
().
getLoc
();
39
if
(
getParser
().parseIdentifier(To))
40
return
TokError
(
"expected identifier in directive"
);
41
42
if
(
getLexer
().
isNot
(
AsmToken::Comma
))
43
return
TokError
(
"expected a comma"
);
44
Lex
();
45
46
int64_t
Count
;
47
if
(
getParser
().parseIntToken(
Count
))
48
return
true
;
49
50
if
(
getLexer
().
isNot
(
AsmToken::EndOfStatement
))
51
return
TokError
(
"unexpected token in directive"
);
52
53
MCSymbol
*FromSym =
getContext
().
parseSymbol
(From);
54
MCSymbol
*ToSym =
getContext
().
parseSymbol
(To);
55
56
getStreamer
().
emitCGProfileEntry
(
57
MCSymbolRefExpr::create
(FromSym,
getContext
(), FromLoc),
58
MCSymbolRefExpr::create
(ToSym,
getContext
(), ToLoc),
Count
);
59
return
false
;
60
}
61
62
bool
MCAsmParserExtension::maybeParseUniqueID
(int64_t &
UniqueID
) {
63
AsmLexer
&L =
getLexer
();
64
if
(L.isNot(
AsmToken::Comma
))
65
return
false
;
66
Lex
();
67
StringRef
UniqueStr;
68
if
(
getParser
().parseIdentifier(UniqueStr))
69
return
TokError
(
"expected identifier"
);
70
if
(UniqueStr !=
"unique"
)
71
return
TokError
(
"expected 'unique'"
);
72
if
(L.isNot(
AsmToken::Comma
))
73
return
TokError
(
"expected commma"
);
74
Lex
();
75
if
(
getParser
().parseAbsoluteExpression(
UniqueID
))
76
return
true
;
77
if
(
UniqueID
< 0)
78
return
TokError
(
"unique id must be positive"
);
79
if
(!
isUInt<32>
(
UniqueID
) ||
UniqueID
== ~0U)
80
return
TokError
(
"unique id is too large"
);
81
return
false
;
82
}
isNot
static bool isNot(const MachineRegisterInfo &MRI, const MachineInstr &MI)
Definition
AMDGPULegalizerInfo.cpp:4366
AsmLexer.h
MCAsmParserExtension.h
MCContext.h
MCExpr.h
MCStreamer.h
UniqueID
Definition
UniqueID.h:26
llvm::AsmLexer
Definition
AsmLexer.h:43
llvm::AsmLexer::getLoc
SMLoc getLoc() const
Get the current source location.
Definition
AsmLexer.h:115
llvm::AsmToken::Comma
@ Comma
Definition
MCAsmMacro.h:50
llvm::AsmToken::EndOfStatement
@ EndOfStatement
Definition
MCAsmMacro.h:43
llvm::MCAsmParserExtension::~MCAsmParserExtension
virtual ~MCAsmParserExtension()
llvm::MCAsmParserExtension::Lex
const AsmToken & Lex()
Definition
MCAsmParserExtension.h:86
llvm::MCAsmParserExtension::Initialize
virtual void Initialize(MCAsmParser &Parser)
Initialize the extension for parsing using the given Parser.
Definition
MCAsmParserExtension.cpp:21
llvm::MCAsmParserExtension::maybeParseUniqueID
bool maybeParseUniqueID(int64_t &UniqueID)
Definition
MCAsmParserExtension.cpp:62
llvm::MCAsmParserExtension::TokError
bool TokError(const Twine &Msg)
Definition
MCAsmParserExtension.h:82
llvm::MCAsmParserExtension::getContext
MCContext & getContext()
Definition
MCAsmParserExtension.h:55
llvm::MCAsmParserExtension::getLexer
AsmLexer & getLexer()
Definition
MCAsmParserExtension.h:57
llvm::MCAsmParserExtension::MCAsmParserExtension
MCAsmParserExtension()
llvm::MCAsmParserExtension::parseDirectiveCGProfile
bool parseDirectiveCGProfile(StringRef, SMLoc)
parseDirectiveCGProfile ::= .cg_profile identifier, identifier, <number>
Definition
MCAsmParserExtension.cpp:27
llvm::MCAsmParserExtension::getStreamer
MCStreamer & getStreamer()
Definition
MCAsmParserExtension.h:68
llvm::MCAsmParserExtension::getParser
MCAsmParser & getParser()
Definition
MCAsmParserExtension.h:62
llvm::MCAsmParser
Generic assembler parser interface, for use by target specific assembly parsers.
Definition
MCAsmParser.h:124
llvm::MCContext::parseSymbol
LLVM_ABI MCSymbol * parseSymbol(const Twine &Name)
Variant of getOrCreateSymbol that handles backslash-escaped symbols.
Definition
MCContext.cpp:226
llvm::MCStreamer::emitCGProfileEntry
virtual void emitCGProfileEntry(const MCSymbolRefExpr *From, const MCSymbolRefExpr *To, uint64_t Count)
Definition
MCStreamer.cpp:829
llvm::MCSymbolRefExpr::create
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx, SMLoc Loc=SMLoc())
Definition
MCExpr.h:214
llvm::MCSymbol
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition
MCSymbol.h:42
llvm::SMLoc
Represents a location in source code.
Definition
SMLoc.h:23
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition
StringRef.h:55
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition
AddressRanges.h:18
llvm::Count
FunctionAddr VTableAddr Count
Definition
InstrProf.h:139
llvm::isUInt
constexpr bool isUInt(uint64_t x)
Checks if an unsigned integer fits into the given bit width.
Definition
MathExtras.h:198
Generated on
for LLVM by
1.14.0