aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h')
-rw-r--r--lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h46
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