14#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXASMPRINTER_H
15#define LLVM_LIB_TARGET_NVPTX_NVPTXASMPRINTER_H
83 unsigned numSymbols()
const {
return Symbols.size(); }
85 bool allSymbolsAligned(
unsigned ptrSize)
const {
87 [=](
unsigned pos) {
return pos % ptrSize == 0; });
92 std::vector<unsigned char> buffer;
105 const bool EmitGeneric;
110 EmitGeneric(AP.EmitGeneric) {}
114 void addBytes(
const unsigned char *Ptr,
unsigned Num,
unsigned Bytes) {
118 addZeros(Bytes - Num);
123 buffer[curpos] = Byte;
127 void addZeros(
unsigned Num) {
128 for ([[maybe_unused]]
unsigned _ :
llvm::seq(Num)) {
135 Symbols.push_back(GVar);
136 SymbolsBeforeStripping.
push_back(GVarBeforeStripping);
146 friend class AggBuffer;
156 void emitStartOfAsmFile(
Module &M)
override;
158 void emitFunctionEntryLabel()
override;
159 void emitFunctionBodyStart()
override;
160 void emitFunctionBodyEnd()
override;
167 unsigned encodeVirtualRegister(
unsigned Reg);
170 const char *Modifier =
nullptr);
173 void emitGlobals(
const Module &M);
177 void emitVirtualRegister(
unsigned int vr,
raw_ostream &);
190 bool ProcessingGeneric)
const;
194 bool doInitialization(
Module &M)
override;
195 bool doFinalization(
Module &M)
override;
210 VRegRCMap VRegMapping;
213 std::map<const Function *, std::vector<const GlobalVariable *>> localDecls;
218 std::string getPTXFundamentalTypeStr(
Type *Ty,
bool =
true)
const;
221 void bufferLEByte(
const Constant *CPV,
int Bytes, AggBuffer *aggBuffer);
222 void bufferAggregateConstant(
const Constant *CV, AggBuffer *aggBuffer);
244 const bool EmitGeneric;
259 std::string getVirtualRegisterName(
unsigned)
const;
261 const MCSymbol *getFunctionFrameSymbol()
const override;
unsigned const MachineRegisterInfo * MRI
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.
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.