[patchpoint] Add support for symbolic patchpoint targets to SelectionDAG and the
[oota-llvm.git] / include / llvm / MC / MCInstBuilder.h
1 //===-- llvm/MC/MCInstBuilder.h - Simplify creation of MCInsts --*- C++ -*-===//
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 // This file contains the MCInstBuilder class for convenient creation of
11 // MCInsts.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_MC_MCINSTBUILDER_H
16 #define LLVM_MC_MCINSTBUILDER_H
17
18 #include "llvm/MC/MCInst.h"
19
20 namespace llvm {
21
22 class MCInstBuilder {
23   MCInst Inst;
24
25 public:
26   /// \brief Create a new MCInstBuilder for an MCInst with a specific opcode.
27   MCInstBuilder(unsigned Opcode) {
28     Inst.setOpcode(Opcode);
29   }
30
31   /// \brief Add a new register operand.
32   MCInstBuilder &addReg(unsigned Reg) {
33     Inst.addOperand(MCOperand::CreateReg(Reg));
34     return *this;
35   }
36
37   /// \brief Add a new integer immediate operand.
38   MCInstBuilder &addImm(int64_t Val) {
39     Inst.addOperand(MCOperand::CreateImm(Val));
40     return *this;
41   }
42
43   /// \brief Add a new floating point immediate operand.
44   MCInstBuilder &addFPImm(double Val) {
45     Inst.addOperand(MCOperand::CreateFPImm(Val));
46     return *this;
47   }
48
49   /// \brief Add a new MCExpr operand.
50   MCInstBuilder &addExpr(const MCExpr *Val) {
51     Inst.addOperand(MCOperand::CreateExpr(Val));
52     return *this;
53   }
54
55   /// \brief Add a new MCInst operand.
56   MCInstBuilder &addInst(const MCInst *Val) {
57     Inst.addOperand(MCOperand::CreateInst(Val));
58     return *this;
59   }
60
61   /// \brief Add an operand.
62   MCInstBuilder &addOperand(const MCOperand &Op) {
63     Inst.addOperand(Op);
64     return *this;
65   }
66
67   operator MCInst&() {
68     return Inst;
69   }
70 };
71
72 } // end namespace llvm
73
74 #endif