X86InstrInfo.h revision 9d17740295838f94120646ef619b2e187f2d71bd
1//===- X86InstructionInfo.h - X86 Instruction Information ---------*-C++-*-===//
2//
3// This file contains the X86 implementation of the MachineInstrInfo class.
4//
5//===----------------------------------------------------------------------===//
6
7#ifndef X86INSTRUCTIONINFO_H
8#define X86INSTRUCTIONINFO_H
9
10#include "llvm/Target/MachineInstrInfo.h"
11#include "X86RegisterInfo.h"
12
13/// X86II - This namespace holds all of the target specific flags that
14/// instruction info tracks.
15///
16namespace X86II {
17  enum {
18    Void        = 1 << 0,  // Set if this instruction produces no value
19  };
20}
21
22class X86InstrInfo : public MachineInstrInfo {
23  const X86RegisterInfo RI;
24public:
25  X86InstrInfo();
26
27  /// getRegisterInfo - MachineInstrInfo is a superset of MRegister info.  As
28  /// such, whenever a client has an instance of instruction info, it should
29  /// always be able to get register info as well (through this method).
30  ///
31  virtual const MRegisterInfo &getRegisterInfo() const { return RI; }
32
33  /// print - Print out an x86 instruction in GAS syntax
34  ///
35  virtual void print(const MachineInstr *MI, std::ostream &O) const;
36
37
38  //===--------------------------------------------------------------------===//
39  //
40  // These are stubs for pure virtual methods that should be factored out of
41  // MachineInstrInfo.  We never call them, we don't want them, but we need
42  // stubs so that we can instatiate our class.
43  //
44  MachineOpCode getNOPOpCode() const { abort(); }
45  void CreateCodeToLoadConst(const TargetMachine& target, Function* F,
46                             Value *V, Instruction *I,
47                             std::vector<MachineInstr*>& mvec,
48                             MachineCodeForInstruction& mcfi) const { abort(); }
49  void CreateCodeToCopyIntToFloat(const TargetMachine& target,
50                                  Function* F, Value* val, Instruction* dest,
51                                  std::vector<MachineInstr*>& mvec,
52                                  MachineCodeForInstruction& mcfi) const {
53    abort();
54  }
55  void CreateCodeToCopyFloatToInt(const TargetMachine& target, Function* F,
56                                  Value* val, Instruction* dest,
57                                  std::vector<MachineInstr*>& mvec,
58                                  MachineCodeForInstruction& mcfi)const {
59    abort();
60  }
61  void CreateCopyInstructionsByType(const TargetMachine& target,
62                                    Function* F, Value* src,
63                                    Instruction* dest,
64                                    std::vector<MachineInstr*>& mvec,
65                                    MachineCodeForInstruction& mcfi)const {
66    abort();
67  }
68
69  void CreateSignExtensionInstructions(const TargetMachine& target,
70                                       Function* F, Value* srcVal,
71                                       Value* destVal, unsigned numLowBits,
72                                       std::vector<MachineInstr*>& mvec,
73                                       MachineCodeForInstruction& mcfi) const {
74    abort();
75  }
76
77  void CreateZeroExtensionInstructions(const TargetMachine& target,
78                                       Function* F, Value* srcVal,
79                                       Value* destVal, unsigned srcSizeInBits,
80                                       std::vector<MachineInstr*>& mvec,
81                                       MachineCodeForInstruction& mcfi) const {
82    abort();
83  }
84};
85
86
87#endif
88