LLVM
18.0.0git
include
llvm
MC
ConstantPools.h
Go to the documentation of this file.
1
//===- ConstantPools.h - Keep track of assembler-generated ------*- C++ -*-===//
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
// This file declares the ConstantPool and AssemblerConstantPools classes.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_MC_CONSTANTPOOLS_H
14
#define LLVM_MC_CONSTANTPOOLS_H
15
16
#include "
llvm/ADT/MapVector.h
"
17
#include "
llvm/ADT/SmallVector.h
"
18
#include "
llvm/Support/SMLoc.h
"
19
#include <cstdint>
20
#include <map>
21
22
namespace
llvm
{
23
24
class
MCContext;
25
class
MCExpr;
26
class
MCSection;
27
class
MCStreamer;
28
class
MCSymbol
;
29
class
MCSymbolRefExpr;
30
31
struct
ConstantPoolEntry
{
32
ConstantPoolEntry
(
MCSymbol
*L,
const
MCExpr
*Val,
unsigned
Sz,
SMLoc
Loc_)
33
:
Label
(L),
Value
(Val),
Size
(Sz),
Loc
(Loc_) {}
34
35
MCSymbol
*
Label
;
36
const
MCExpr
*
Value
;
37
unsigned
Size
;
38
SMLoc
Loc
;
39
};
40
41
// A class to keep track of assembler-generated constant pools that are use to
42
// implement the ldr-pseudo.
43
class
ConstantPool
{
44
using
EntryVecTy
=
SmallVector<ConstantPoolEntry, 4>
;
45
EntryVecTy
Entries;
46
std::map<int64_t, const MCSymbolRefExpr *> CachedConstantEntries;
47
DenseMap<const MCSymbol *, const MCSymbolRefExpr *>
CachedSymbolEntries;
48
49
public
:
50
// Initialize a new empty constant pool
51
ConstantPool
() =
default
;
52
53
// Add a new entry to the constant pool in the next slot.
54
// \param Value is the new entry to put in the constant pool.
55
// \param Size is the size in bytes of the entry
56
//
57
// \returns a MCExpr that references the newly inserted value
58
const
MCExpr
*
addEntry
(
const
MCExpr
*
Value
,
MCContext
&Context,
59
unsigned
Size
,
SMLoc
Loc);
60
61
// Emit the contents of the constant pool using the provided streamer.
62
void
emitEntries
(
MCStreamer
&Streamer);
63
64
// Return true if the constant pool is empty
65
bool
empty
();
66
67
void
clearCache
();
68
};
69
70
class
AssemblerConstantPools
{
71
// Map type used to keep track of per-Section constant pools used by the
72
// ldr-pseudo opcode. The map associates a section to its constant pool. The
73
// constant pool is a vector of (label, value) pairs. When the ldr
74
// pseudo is parsed we insert a new (label, value) pair into the constant pool
75
// for the current section and add MCSymbolRefExpr to the new label as
76
// an opcode to the ldr. After we have parsed all the user input we
77
// output the (label, value) pairs in each constant pool at the end of the
78
// section.
79
//
80
// We use the MapVector for the map type to ensure stable iteration of
81
// the sections at the end of the parse. We need to iterate over the
82
// sections in a stable order to ensure that we have print the
83
// constant pools in a deterministic order when printing an assembly
84
// file.
85
using
ConstantPoolMapTy
=
MapVector<MCSection *, ConstantPool>
;
86
ConstantPoolMapTy
ConstantPools;
87
88
public
:
89
void
emitAll
(
MCStreamer
&Streamer);
90
void
emitForCurrentSection
(
MCStreamer
&Streamer);
91
void
clearCacheForCurrentSection
(
MCStreamer
&Streamer);
92
const
MCExpr
*
addEntry
(
MCStreamer
&Streamer,
const
MCExpr
*Expr,
93
unsigned
Size
,
SMLoc
Loc);
94
95
private
:
96
ConstantPool
*getConstantPool(
MCSection
*Section);
97
ConstantPool
&getOrCreateConstantPool(
MCSection
*Section);
98
};
99
100
}
// end namespace llvm
101
102
#endif
// LLVM_MC_CONSTANTPOOLS_H
Size
uint64_t Size
Definition:
ELFObjHandler.cpp:81
MapVector.h
This file implements a map that provides insertion order iteration.
SMLoc.h
SmallVector.h
This file defines the SmallVector class.
llvm::AssemblerConstantPools
Definition:
ConstantPools.h:70
llvm::AssemblerConstantPools::emitAll
void emitAll(MCStreamer &Streamer)
Definition:
ConstantPools.cpp:100
llvm::AssemblerConstantPools::clearCacheForCurrentSection
void clearCacheForCurrentSection(MCStreamer &Streamer)
Definition:
ConstantPools.cpp:116
llvm::AssemblerConstantPools::emitForCurrentSection
void emitForCurrentSection(MCStreamer &Streamer)
Definition:
ConstantPools.cpp:110
llvm::AssemblerConstantPools::addEntry
const MCExpr * addEntry(MCStreamer &Streamer, const MCExpr *Expr, unsigned Size, SMLoc Loc)
Definition:
ConstantPools.cpp:122
llvm::ConstantPool
Definition:
ConstantPools.h:43
llvm::ConstantPool::clearCache
void clearCache()
Definition:
ConstantPools.cpp:71
llvm::ConstantPool::addEntry
const MCExpr * addEntry(const MCExpr *Value, MCContext &Context, unsigned Size, SMLoc Loc)
Definition:
ConstantPools.cpp:39
llvm::ConstantPool::ConstantPool
ConstantPool()=default
llvm::ConstantPool::emitEntries
void emitEntries(MCStreamer &Streamer)
Definition:
ConstantPools.cpp:26
llvm::ConstantPool::empty
bool empty()
Definition:
ConstantPools.cpp:69
llvm::DenseMap
Definition:
DenseMap.h:742
llvm::MCContext
Context object for machine code objects.
Definition:
MCContext.h:76
llvm::MCExpr
Base class for the full range of assembler expressions which are needed for parsing.
Definition:
MCExpr.h:35
llvm::MCSection
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Definition:
MCSection.h:39
llvm::MCStreamer
Streaming machine code generation interface.
Definition:
MCStreamer.h:212
llvm::MCSymbol
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition:
MCSymbol.h:41
llvm::MapVector< MCSection *, ConstantPool >
llvm::SMLoc
Represents a location in source code.
Definition:
SMLoc.h:23
llvm::SmallVector< ConstantPoolEntry, 4 >
llvm::Value
LLVM Value Representation.
Definition:
Value.h:74
llvm::ISD::MCSymbol
@ MCSymbol
Definition:
ISDOpcodes.h:172
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:
AddressRanges.h:18
llvm::ConstantPoolEntry
Definition:
ConstantPools.h:31
llvm::ConstantPoolEntry::Label
MCSymbol * Label
Definition:
ConstantPools.h:35
llvm::ConstantPoolEntry::Size
unsigned Size
Definition:
ConstantPools.h:37
llvm::ConstantPoolEntry::Loc
SMLoc Loc
Definition:
ConstantPools.h:38
llvm::ConstantPoolEntry::ConstantPoolEntry
ConstantPoolEntry(MCSymbol *L, const MCExpr *Val, unsigned Sz, SMLoc Loc_)
Definition:
ConstantPools.h:32
llvm::ConstantPoolEntry::Value
const MCExpr * Value
Definition:
ConstantPools.h:36
Generated on Thu Sep 28 2023 11:33:02 for LLVM by
1.9.6