Restrict sin/cos optimization to 64-bit only for now. 32-bit is a bit messy and less...
[oota-llvm.git] / lib / Target / R600 / AMDGPUCodeEmitter.h
1 //===-- AMDGPUCodeEmitter.h - AMDGPU Code Emitter interface -----------------===//
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 CodeEmitter interface for R600 and SI codegen.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef AMDGPUCODEEMITTER_H
16 #define AMDGPUCODEEMITTER_H
17
18 namespace llvm {
19
20 class AMDGPUCodeEmitter {
21 public:
22   uint64_t getBinaryCodeForInstr(const MachineInstr &MI) const;
23   virtual uint64_t getMachineOpValue(const MachineInstr &MI,
24                                    const MachineOperand &MO) const { return 0; }
25   virtual unsigned GPR4AlignEncode(const MachineInstr  &MI,
26                                      unsigned OpNo) const {
27     return 0;
28   }
29   virtual unsigned GPR2AlignEncode(const MachineInstr &MI,
30                                    unsigned OpNo) const {
31     return 0;
32   }
33   virtual uint64_t VOPPostEncode(const MachineInstr &MI,
34                                  uint64_t Value) const {
35     return Value;
36   }
37   virtual uint64_t i32LiteralEncode(const MachineInstr &MI,
38                                     unsigned OpNo) const {
39     return 0;
40   }
41   virtual uint32_t SMRDmemriEncode(const MachineInstr &MI, unsigned OpNo)
42                                                                    const {
43     return 0;
44   }
45 };
46
47 } // End namespace llvm
48
49 #endif // AMDGPUCODEEMITTER_H