[InstCombine] Signed saturation patterns
[llvm-core.git] / include / llvm / MC / MCInstBuilder.h
blob0c8e01fdc412c4da668bd3609a0c8cf85d059c0c
1 //===-- llvm/MC/MCInstBuilder.h - Simplify creation of MCInsts --*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file contains the MCInstBuilder class for convenient creation of
10 // MCInsts.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_MC_MCINSTBUILDER_H
15 #define LLVM_MC_MCINSTBUILDER_H
17 #include "llvm/MC/MCInst.h"
19 namespace llvm {
21 class MCInstBuilder {
22 MCInst Inst;
24 public:
25 /// Create a new MCInstBuilder for an MCInst with a specific opcode.
26 MCInstBuilder(unsigned Opcode) {
27 Inst.setOpcode(Opcode);
30 /// Add a new register operand.
31 MCInstBuilder &addReg(unsigned Reg) {
32 Inst.addOperand(MCOperand::createReg(Reg));
33 return *this;
36 /// Add a new integer immediate operand.
37 MCInstBuilder &addImm(int64_t Val) {
38 Inst.addOperand(MCOperand::createImm(Val));
39 return *this;
42 /// Add a new floating point immediate operand.
43 MCInstBuilder &addFPImm(double Val) {
44 Inst.addOperand(MCOperand::createFPImm(Val));
45 return *this;
48 /// Add a new MCExpr operand.
49 MCInstBuilder &addExpr(const MCExpr *Val) {
50 Inst.addOperand(MCOperand::createExpr(Val));
51 return *this;
54 /// Add a new MCInst operand.
55 MCInstBuilder &addInst(const MCInst *Val) {
56 Inst.addOperand(MCOperand::createInst(Val));
57 return *this;
60 /// Add an operand.
61 MCInstBuilder &addOperand(const MCOperand &Op) {
62 Inst.addOperand(Op);
63 return *this;
66 operator MCInst&() {
67 return Inst;
71 } // end namespace llvm
73 #endif