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;
207 VRegRCMap VRegMapping;
210 std::map<const Function *, std::vector<const GlobalVariable *>> localDecls;
215 std::string getPTXFundamentalTypeStr(
Type *Ty,
bool =
true)
const;
218 void bufferLEByte(
const Constant *CPV,
int Bytes, AggBuffer *aggBuffer);
219 void bufferAggregateConstant(
const Constant *CV, AggBuffer *aggBuffer);
241 const bool EmitGeneric;
256 std::string getVirtualRegisterName(
unsigned)
const;
258 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.
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.