TargetMachine.h revision cee8f9ae67104576b2028125b56e9ba4856a1d66
1//===-- llvm/Target/Machine.h - General Target Information -------*- C++ -*-==//
2//
3// This file describes the general parts of a Target machine.
4//
5//===----------------------------------------------------------------------===//
6
7#ifndef LLVM_TARGET_TARGETMACHINE_H
8#define LLVM_TARGET_TARGETMACHINE_H
9
10#include "llvm/Target/TargetData.h"
11#include "Support/NonCopyable.h"
12
13class TargetMachine;
14class MachineInstrInfo;
15class MachineInstrDescriptor;
16class MachineSchedInfo;
17class MachineRegInfo;
18class MachineFrameInfo;
19class MachineCacheInfo;
20
21//---------------------------------------------------------------------------
22// Data types used to define information about a single machine instruction
23//---------------------------------------------------------------------------
24
25typedef int MachineOpCode;
26typedef int OpCodeMask;
27
28
29//---------------------------------------------------------------------------
30// class TargetMachine
31//
32// Purpose:
33//   Primary interface to the complete machine description for the
34//   target machine.  All target-specific information should be
35//   accessible through this interface.
36//
37//---------------------------------------------------------------------------
38
39class TargetMachine : public NonCopyableV {
40public:
41  const string     TargetName;
42  const TargetData DataLayout;		// Calculates type size & alignment
43  int              optSizeForSubWordData;
44  int	           minMemOpWordSize;
45  int	           maxAtomicMemOpWordSize;
46
47protected:
48  TargetMachine(const string &targetname, // Can only create subclasses...
49		unsigned char PtrSize = 8, unsigned char PtrAl = 8,
50		unsigned char DoubleAl = 8, unsigned char FloatAl = 4,
51		unsigned char LongAl = 8, unsigned char IntAl = 4,
52		unsigned char ShortAl = 2, unsigned char ByteAl = 1)
53    : TargetName(targetname), DataLayout(targetname, PtrSize, PtrAl,
54					 DoubleAl, FloatAl, LongAl, IntAl,
55					 ShortAl, ByteAl) { }
56public:
57  virtual ~TargetMachine() {}
58
59  //
60  // Interfaces to the major aspects of target machine information:
61  // -- Instruction opcode and operand information
62  // -- Pipelines and scheduling information
63  // -- Register information
64  //
65  virtual const MachineInstrInfo&       getInstrInfo() const = 0;
66  virtual const MachineSchedInfo&       getSchedInfo() const = 0;
67  virtual const MachineRegInfo&	        getRegInfo()   const = 0;
68  virtual const MachineFrameInfo&       getFrameInfo() const = 0;
69  virtual const MachineCacheInfo&       getCacheInfo() const = 0;
70
71  //
72  // Data storage information
73  //
74  virtual unsigned int	findOptimalStorageSize	(const Type* ty) const;
75
76  //
77  // compileMethod - Everything neccesary to compile a method into the
78  // built in representation.  This allows the target to have complete control
79  // over how it does compilation.  This does not emit assembly or output
80  // machine code, however; those are done later.
81  //
82  virtual bool compileMethod(Method *M) = 0;
83
84  //
85  // emitAssembly - Output assembly language code (a .s file) for the specified
86  // method. The specified method must have been compiled before this may be
87  // used.
88  //
89  virtual void emitAssembly(const Module *M, ostream &OutStr) const = 0;
90};
91
92#endif
93