~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to lib/Target/AMDGPU/AMDGPUAsmPrinter.h

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===-- AMDGPUAsmPrinter.h - Print AMDGPU assembly code ---------*- C++ -*-===//
 
2
//
 
3
//                     The LLVM Compiler Infrastructure
 
4
//
 
5
// This file is distributed under the University of Illinois Open Source
 
6
// License. See LICENSE.TXT for details.
 
7
//
 
8
//===----------------------------------------------------------------------===//
 
9
//
 
10
/// \file
 
11
/// \brief AMDGPU Assembly printer class.
 
12
//
 
13
//===----------------------------------------------------------------------===//
 
14
 
 
15
#ifndef LLVM_LIB_TARGET_R600_AMDGPUASMPRINTER_H
 
16
#define LLVM_LIB_TARGET_R600_AMDGPUASMPRINTER_H
 
17
 
 
18
#include "llvm/CodeGen/AsmPrinter.h"
 
19
#include <vector>
 
20
 
 
21
namespace llvm {
 
22
 
 
23
class AMDGPUAsmPrinter : public AsmPrinter {
 
24
private:
 
25
  struct SIProgramInfo {
 
26
    SIProgramInfo() :
 
27
      VGPRBlocks(0),
 
28
      SGPRBlocks(0),
 
29
      Priority(0),
 
30
      FloatMode(0),
 
31
      Priv(0),
 
32
      DX10Clamp(0),
 
33
      DebugMode(0),
 
34
      IEEEMode(0),
 
35
      ScratchSize(0),
 
36
      ComputePGMRSrc1(0),
 
37
      LDSBlocks(0),
 
38
      ScratchBlocks(0),
 
39
      ComputePGMRSrc2(0),
 
40
      NumVGPR(0),
 
41
      NumSGPR(0),
 
42
      FlatUsed(false),
 
43
      VCCUsed(false),
 
44
      CodeLen(0) {}
 
45
 
 
46
    // Fields set in PGM_RSRC1 pm4 packet.
 
47
    uint32_t VGPRBlocks;
 
48
    uint32_t SGPRBlocks;
 
49
    uint32_t Priority;
 
50
    uint32_t FloatMode;
 
51
    uint32_t Priv;
 
52
    uint32_t DX10Clamp;
 
53
    uint32_t DebugMode;
 
54
    uint32_t IEEEMode;
 
55
    uint32_t ScratchSize;
 
56
 
 
57
    uint64_t ComputePGMRSrc1;
 
58
 
 
59
    // Fields set in PGM_RSRC2 pm4 packet.
 
60
    uint32_t LDSBlocks;
 
61
    uint32_t ScratchBlocks;
 
62
 
 
63
    uint64_t ComputePGMRSrc2;
 
64
 
 
65
    uint32_t NumVGPR;
 
66
    uint32_t NumSGPR;
 
67
    uint32_t LDSSize;
 
68
    bool FlatUsed;
 
69
 
 
70
    // Bonus information for debugging.
 
71
    bool VCCUsed;
 
72
    uint64_t CodeLen;
 
73
  };
 
74
 
 
75
  void getSIProgramInfo(SIProgramInfo &Out, const MachineFunction &MF) const;
 
76
  void findNumUsedRegistersSI(const MachineFunction &MF,
 
77
                              unsigned &NumSGPR,
 
78
                              unsigned &NumVGPR) const;
 
79
 
 
80
  /// \brief Emit register usage information so that the GPU driver
 
81
  /// can correctly setup the GPU state.
 
82
  void EmitProgramInfoR600(const MachineFunction &MF);
 
83
  void EmitProgramInfoSI(const MachineFunction &MF, const SIProgramInfo &KernelInfo);
 
84
  void EmitAmdKernelCodeT(const MachineFunction &MF,
 
85
                          const SIProgramInfo &KernelInfo) const;
 
86
 
 
87
public:
 
88
  explicit AMDGPUAsmPrinter(TargetMachine &TM,
 
89
                            std::unique_ptr<MCStreamer> Streamer);
 
90
 
 
91
  bool runOnMachineFunction(MachineFunction &MF) override;
 
92
 
 
93
  const char *getPassName() const override {
 
94
    return "AMDGPU Assembly Printer";
 
95
  }
 
96
 
 
97
  /// Implemented in AMDGPUMCInstLower.cpp
 
98
  void EmitInstruction(const MachineInstr *MI) override;
 
99
 
 
100
  void EmitFunctionBodyStart() override;
 
101
 
 
102
  void EmitEndOfAsmFile(Module &M) override;
 
103
 
 
104
  bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
 
105
                       unsigned AsmVariant, const char *ExtraCode,
 
106
                       raw_ostream &O) override;
 
107
 
 
108
protected:
 
109
  std::vector<std::string> DisasmLines, HexLines;
 
110
  size_t DisasmLineMaxLen;
 
111
};
 
112
 
 
113
} // End anonymous llvm
 
114
 
 
115
#endif