1 //===-- llvm/Target/Machine.h - General Target Information -------*- C++ -*-==//
3 // This file describes the general parts of a Target machine.
5 //===----------------------------------------------------------------------===//
7 #ifndef LLVM_TARGET_TARGETMACHINE_H
8 #define LLVM_TARGET_TARGETMACHINE_H
10 #include "llvm/Target/TargetData.h"
11 #include "Support/NonCopyable.h"
14 class MachineInstrInfo;
15 class MachineInstrDescriptor;
16 class MachineSchedInfo;
18 class MachineFrameInfo;
19 class MachineCacheInfo;
21 //---------------------------------------------------------------------------
22 // Data types used to define information about a single machine instruction
23 //---------------------------------------------------------------------------
25 typedef int MachineOpCode;
26 typedef int OpCodeMask;
29 //---------------------------------------------------------------------------
30 // class TargetMachine
33 // Primary interface to the complete machine description for the
34 // target machine. All target-specific information should be
35 // accessible through this interface.
37 //---------------------------------------------------------------------------
39 class TargetMachine : public NonCopyableV {
41 const std::string TargetName;
42 const TargetData DataLayout; // Calculates type size & alignment
43 int optSizeForSubWordData;
45 int maxAtomicMemOpWordSize;
48 TargetMachine(const std::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,
57 virtual ~TargetMachine() {}
60 // Interfaces to the major aspects of target machine information:
61 // -- Instruction opcode and operand information
62 // -- Pipelines and scheduling information
63 // -- Register information
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;
72 // Data storage information
74 virtual unsigned int findOptimalStorageSize (const Type* ty) const;
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.
82 virtual bool compileMethod(Method *M) = 0;
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
89 virtual void emitAssembly(const Module *M, std::ostream &OutStr) const = 0;