LLVM 20.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
56public:
59};
60
61} // end namespace llvm
62
63#endif
raw_pwrite_stream & OS
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:36
Streaming machine code generation interface.
Definition: MCStreamer.h:213
Target specific streamer interface.
Definition: MCStreamer.h:94
Implments NVPTX-specific streamer.
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.
Definition: SmallVector.h:1196
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:51
LLVM Value Representation.
Definition: Value.h:74
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18