119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===-- PTXAsmPrinter.h - Print machine code to a PTX file ----------------===//
219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//
319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//                     The LLVM Compiler Infrastructure
419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//
519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// This file is distributed under the University of Illinois Open Source
619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// License. See LICENSE.TXT for details.
719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//
819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===//
919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//
1019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// PTX Assembly printer class.
1119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//
1219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===//
1319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
1419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#ifndef PTXASMPRINTER_H
1519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#define PTXASMPRINTER_H
1619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
1719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "PTX.h"
1819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "PTXTargetMachine.h"
1919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/ADT/StringMap.h"
2019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/CodeGen/AsmPrinter.h"
2119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/Support/Compiler.h"
2219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
2319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumannamespace llvm {
2419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
2519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanclass MCOperand;
2619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
2719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanclass LLVM_LIBRARY_VISIBILITY PTXAsmPrinter : public AsmPrinter {
2819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanpublic:
2919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  explicit PTXAsmPrinter(TargetMachine &TM, MCStreamer &Streamer)
3019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman    : AsmPrinter(TM, Streamer) {}
3119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
3219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  const char *getPassName() const { return "PTX Assembly Printer"; }
3319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
3419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  bool doFinalization(Module &M);
3519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
3619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  virtual void EmitStartOfAsmFile(Module &M);
3719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  virtual void EmitFunctionBodyStart();
3819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  virtual void EmitFunctionBodyEnd();
3919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  virtual void EmitFunctionEntryLabel();
4019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  virtual void EmitInstruction(const MachineInstr *MI);
4119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
4219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  unsigned GetOrCreateSourceID(StringRef FileName,
4319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman                               StringRef DirName);
4419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
4519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol);
4619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  MCOperand lowerOperand(const MachineOperand &MO);
4719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
4819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanprivate:
4919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  void EmitVariableDeclaration(const GlobalVariable *gv);
5019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  void EmitFunctionDeclaration();
5119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
5219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman  StringMap<unsigned> SourceIdMap;
5319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman}; // class PTXAsmPrinter
5419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} // namespace llvm
5519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
5619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#endif
5719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman
58