diff options
Diffstat (limited to 'lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h')
-rw-r--r-- | lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h b/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h new file mode 100644 index 000000000000..30831ab8bbeb --- /dev/null +++ b/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h @@ -0,0 +1,46 @@ +//=====-- NVPTXTargetStreamer.h - NVPTX Target Streamer ------*- C++ -*--=====// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIB_TARGET_NVPTX_MCTARGETDESC_NVPTXTARGETSTREAMER_H +#define LLVM_LIB_TARGET_NVPTX_MCTARGETDESC_NVPTXTARGETSTREAMER_H + +#include "llvm/MC/MCStreamer.h" + +namespace llvm { +class MCSection; + +/// Implments NVPTX-specific streamer. +class NVPTXTargetStreamer : public MCTargetStreamer { +private: + SmallVector<std::string, 4> DwarfFiles; + +public: + NVPTXTargetStreamer(MCStreamer &S); + ~NVPTXTargetStreamer() override; + + /// Record DWARF file directives for later output. + /// According to PTX ISA, CUDA Toolkit documentation, 11.5.3. Debugging + /// Directives: .file + /// (http://docs.nvidia.com/cuda/parallel-thread-execution/index.html#debugging-directives-file), + /// The .file directive is allowed only in the outermost scope, i.e., at the + /// same level as kernel and device function declarations. Also, the order of + /// the .loc and .file directive does not matter, .file directives may follow + /// the .loc directives where the file is referenced. + /// LLVM emits .file directives immediately the location debug info is + /// emitted, i.e. they may be emitted inside functions. We gather all these + /// directives and emit them outside of the sections and, thus, outside of the + /// functions. + void emitDwarfFileDirective(StringRef Directive) override; + void changeSection(const MCSection *CurSection, MCSection *Section, + const MCExpr *SubSection, raw_ostream &OS) override; +}; + +} // end namespace llvm + +#endif |