14#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXASMPRINTER_H
15#define LLVM_LIB_TARGET_NVPTX_NVPTXASMPRINTER_H
84 unsigned numSymbols()
const {
return Symbols.size(); }
86 bool allSymbolsAligned(
unsigned ptrSize)
const {
88 [=](
unsigned pos) {
return pos % ptrSize == 0; });
93 std::vector<unsigned char> buffer;
106 const bool EmitGeneric;
111 EmitGeneric(AP.EmitGeneric) {}
115 void addBytes(
const unsigned char *Ptr,
unsigned Num,
unsigned Bytes) {
119 addZeros(Bytes - Num);
124 buffer[curpos] = Byte;
128 void addZeros(
unsigned Num) {
129 for ([[maybe_unused]]
unsigned _ :
llvm::seq(Num)) {
136 Symbols.push_back(GVar);
137 SymbolsBeforeStripping.
push_back(GVarBeforeStripping);
147 friend class AggBuffer;
159 void emitStartOfAsmFile(
Module &M)
override;
161 void emitFunctionEntryLabel()
override;
162 void emitFunctionBodyStart()
override;
163 void emitFunctionBodyEnd()
override;
170 unsigned encodeVirtualRegister(
unsigned Reg);
173 const char *Modifier =
nullptr);
176 void emitGlobals(
const Module &M);
180 void emitVirtualRegister(
unsigned int vr,
raw_ostream &);
193 bool ProcessingGeneric)
const;
197 bool doInitialization(
Module &M)
override;
198 bool doFinalization(
Module &M)
override;
213 VRegRCMap VRegMapping;
216 std::map<const Function *, std::vector<const GlobalVariable *>> localDecls;
221 std::string getPTXFundamentalTypeStr(
Type *Ty,
bool =
true)
const;
224 void bufferLEByte(
const Constant *CPV,
int Bytes, AggBuffer *aggBuffer);
225 void bufferAggregateConstant(
const Constant *CV, AggBuffer *aggBuffer);
247 const bool EmitGeneric;
262 std::string getVirtualRegisterName(
unsigned)
const;
264 const MCSymbol *getFunctionFrameSymbol()
const override;
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
#define LLVM_LIBRARY_VISIBILITY
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file defines the DenseMap class.
static void addSymbol(Object &Obj, const NewSymbolInfo &SymInfo, uint8_t DefaultVisibility)
static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol, HexagonAsmPrinter &Printer, bool MustExtend)
static bool printOperand(raw_ostream &OS, const SelectionDAG *G, const SDValue Value)
static void printMemOperand(raw_ostream &OS, const MachineMemOperand &MMO, const MachineFunction *MF, const Module *M, const MachineFrameInfo *MFI, const TargetInstrInfo *TII, LLVMContext &Ctx)
This file defines the SmallVector class.
Represent the analysis usage information of a pass.
AnalysisUsage & addRequired()
TargetMachine & TM
Target machine description.
void getAnalysisUsage(AnalysisUsage &AU) const override
Record analysis usage.
AsmPrinter(TargetMachine &TM, std::unique_ptr< MCStreamer > Streamer, char &ID=AsmPrinter::ID)
ConstantFP - Floating Point Values [float, double].
This is an important base class in LLVM.
Collects and handles dwarf debug information.
Base class for the full range of assembler expressions which are needed for parsing.
Instances of this class represent a single low-level machine instruction.
Instances of this class represent operands of the MCInst class.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Representation of each machine instruction.
MachineOperand class - Representation of each machine instruction operand.
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
A Module instance is used to store all the information related to an LLVM module.
StringRef getPassName() const override
getPassName - Return a nice clean name for a pass.
void emitGlobalVariable(const GlobalVariable *GV) override
Emit the specified global variable to the .s file.
NVPTXAsmPrinter(TargetMachine &TM, std::unique_ptr< MCStreamer > Streamer)
void getAnalysisUsage(AnalysisUsage &AU) const override
Record analysis usage.
Implments NVPTX-specific streamer.
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
Primary interface to the complete machine description for the target machine.
The instances of the Type class are immutable: once they are created, they are never changed.
LLVM Value Representation.
This class implements an extremely fast bulk output stream that can only output to a stream.
This is an optimization pass for GlobalISel generic memory operations.
bool all_of(R &&range, UnaryPredicate P)
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly.
auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)
Get the size of a range.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
auto seq(T Begin, T End)
Iterate over an integral type from Begin up to - but not including - End.
Implement std::hash so that hash_code can be used in STL containers.