LLVM 22.0.0git
NVPTXTargetStreamer.h
Go to the documentation of this file.
1//=====-- NVPTXTargetStreamer.h - NVPTX Target Streamer ------*- 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#ifndef LLVM_LIB_TARGET_NVPTX_MCTARGETDESC_NVPTXTARGETSTREAMER_H
10#define LLVM_LIB_TARGET_NVPTX_MCTARGETDESC_NVPTXTARGETSTREAMER_H
11
12#include "llvm/MC/MCStreamer.h"
13
14namespace llvm {
15class MCSection;
16
17/// Implments NVPTX-specific streamer.
19private:
21 bool HasSections = false;
22
23public:
26
27 /// Outputs the list of the DWARF '.file' directives to the streamer.
29 /// Close last section.
30 void closeLastSection();
31
32 /// Record DWARF file directives for later output.
33 /// According to PTX ISA, CUDA Toolkit documentation, 11.5.3. Debugging
34 /// Directives: .file
35 /// (http://docs.nvidia.com/cuda/parallel-thread-execution/index.html#debugging-directives-file),
36 /// The .file directive is allowed only in the outermost scope, i.e., at the
37 /// same level as kernel and device function declarations. Also, the order of
38 /// the .loc and .file directive does not matter, .file directives may follow
39 /// the .loc directives where the file is referenced.
40 /// LLVM emits .file directives immediately the location debug info is
41 /// emitted, i.e. they may be emitted inside functions. We gather all these
42 /// directives and emit them outside of the sections and, thus, outside of the
43 /// functions.
45 void changeSection(const MCSection *CurSection, MCSection *Section,
46 uint32_t SubSection, raw_ostream &OS) override;
47 /// Emit the bytes in \p Data into the output.
48 ///
49 /// This is used to emit bytes in \p Data as sequence of .byte directives.
50 void emitRawBytes(StringRef Data) override;
51 /// Makes sure that labels are mangled the same way as the actual symbols.
52 void emitValue(const MCExpr *Value) override;
53};
54
60
61} // end namespace llvm
62
63#endif
Base class for the full range of assembler expressions which are needed for parsing.
Definition MCExpr.h:34
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Definition MCSection.h:521
Streaming machine code generation interface.
Definition MCStreamer.h:220
MCTargetStreamer(MCStreamer &S)
void emitDwarfFileDirective(StringRef Directive) override
Record DWARF file directives for later output.
void outputDwarfFileDirectives()
Outputs the list of the DWARF '.file' directives to the streamer.
void emitRawBytes(StringRef Data) override
Emit the bytes in Data into the output.
void changeSection(const MCSection *CurSection, MCSection *Section, uint32_t SubSection, raw_ostream &OS) override
Update streamer for a new active section.
void emitValue(const MCExpr *Value) override
Makes sure that labels are mangled the same way as the actual symbols.
void closeLastSection()
Close last section.
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.
Definition StringRef.h:55
LLVM Value Representation.
Definition Value.h:75
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
This is an optimization pass for GlobalISel generic memory operations.
FunctionAddr VTableAddr uintptr_t uintptr_t Data
Definition InstrProf.h:189