Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/MC/MCParser/MCAsmParserExtension.cpp
35269 views
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/MCAsmLexer.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(
48
Count, "expected integer count in '.cg_profile' directive"))
49
return true;
50
51
if (getLexer().isNot(AsmToken::EndOfStatement))
52
return TokError("unexpected token in directive");
53
54
MCSymbol *FromSym = getContext().getOrCreateSymbol(From);
55
MCSymbol *ToSym = getContext().getOrCreateSymbol(To);
56
57
getStreamer().emitCGProfileEntry(
58
MCSymbolRefExpr::create(FromSym, MCSymbolRefExpr::VK_None, getContext(),
59
FromLoc),
60
MCSymbolRefExpr::create(ToSym, MCSymbolRefExpr::VK_None, getContext(),
61
ToLoc),
62
Count);
63
return false;
64
}
65
66