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 "llvm/Support/NonCopyable.h"
14 class MachineInstrInfo;
15 class MachineInstrDescriptor;
16 class MachineSchedInfo;
18 class MachineFrameInfo;
20 //---------------------------------------------------------------------------
21 // Data types used to define information about a single machine instruction
22 //---------------------------------------------------------------------------
24 typedef int MachineOpCode;
25 typedef int OpCodeMask;
28 //---------------------------------------------------------------------------
29 // class TargetMachine
32 // Primary interface to the complete machine description for the
33 // target machine. All target-specific information should be
34 // accessible through this interface.
36 //---------------------------------------------------------------------------
38 class TargetMachine : public NonCopyableV {
40 const string TargetName;
41 const TargetData DataLayout; // Calculates type size & alignment
42 int optSizeForSubWordData;
44 int maxAtomicMemOpWordSize;
47 TargetMachine(const string &targetname, // Can only create subclasses...
48 unsigned char PtrSize = 8, unsigned char PtrAl = 8,
49 unsigned char DoubleAl = 8, unsigned char FloatAl = 4,
50 unsigned char LongAl = 8, unsigned char IntAl = 4,
51 unsigned char ShortAl = 2, unsigned char ByteAl = 1)
52 : TargetName(targetname), DataLayout(targetname, PtrSize, PtrAl,
53 DoubleAl, FloatAl, LongAl, IntAl,
56 virtual ~TargetMachine() {}
59 // Interfaces to the major aspects of target machine information:
60 // -- Instruction opcode and operand information
61 // -- Pipelines and scheduling information
62 // -- Register information
64 virtual const MachineInstrInfo& getInstrInfo() const = 0;
65 virtual const MachineSchedInfo& getSchedInfo() const = 0;
66 virtual const MachineRegInfo& getRegInfo() const = 0;
67 virtual const MachineFrameInfo& getFrameInfo() const = 0;
70 // Data storage information
72 virtual unsigned int findOptimalStorageSize (const Type* ty) const;
75 // compileMethod - Everything neccesary to compile a method into the
76 // built in representation. This allows the target to have complete control
77 // over how it does compilation. This does not emit assembly or output
78 // machine code, however; those are done later.
80 virtual bool compileMethod(Method *M) = 0;
83 // emitAssembly - Output assembly language code (a .s file) for the specified
84 // method. The specified method must have been compiled before this may be
87 virtual void emitAssembly(const Module *M, ostream &OutStr) const = 0;