Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(218)

Side by Side Diff: include/llvm/CodeGen/MachineInstrBuilder.h

Issue 3661004: x86-64 va_arg (Closed) Base URL: http://llvm.org/svn/llvm-project/llvm/trunk/
Patch Set: long double doesn't work how I thought Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | lib/Target/X86/X86ISelLowering.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===-- CodeGen/MachineInstBuilder.h - Simplify creation of MIs -*- C++ -*-===// 1 //===-- CodeGen/MachineInstBuilder.h - Simplify creation of MIs -*- C++ -*-===//
2 // 2 //
3 // The LLVM Compiler Infrastructure 3 // The LLVM Compiler Infrastructure
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // This file exposes a function named BuildMI, which is useful for dramatically 10 // This file exposes a function named BuildMI, which is useful for dramatically
11 // simplifying how MachineInstr's are created. It allows use of code like this: 11 // simplifying how MachineInstr's are created. It allows use of code like this:
12 // 12 //
13 // M = BuildMI(X86::ADDrr8, 2).addReg(argVal1).addReg(argVal2); 13 // M = BuildMI(X86::ADDrr8, 2).addReg(argVal1).addReg(argVal2);
14 // 14 //
15 //===----------------------------------------------------------------------===// 15 //===----------------------------------------------------------------------===//
16 16
17 #ifndef LLVM_CODEGEN_MACHINEINSTRBUILDER_H 17 #ifndef LLVM_CODEGEN_MACHINEINSTRBUILDER_H
18 #define LLVM_CODEGEN_MACHINEINSTRBUILDER_H 18 #define LLVM_CODEGEN_MACHINEINSTRBUILDER_H
19 19
20 #include "llvm/CodeGen/MachineFunction.h" 20 #include "llvm/CodeGen/MachineFunction.h"
21 #include "llvm/Support/ErrorHandling.h"
21 22
22 namespace llvm { 23 namespace llvm {
23 24
24 class TargetInstrDesc; 25 class TargetInstrDesc;
25 class MDNode; 26 class MDNode;
26 27
27 namespace RegState { 28 namespace RegState {
28 enum { 29 enum {
29 Define = 0x2, 30 Define = 0x2,
30 Implicit = 0x4, 31 Implicit = 0x4,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 unsigned char TargetFlags = 0) const { 116 unsigned char TargetFlags = 0) const {
116 MI->addOperand(MachineOperand::CreateES(FnName, TargetFlags)); 117 MI->addOperand(MachineOperand::CreateES(FnName, TargetFlags));
117 return *this; 118 return *this;
118 } 119 }
119 120
120 const MachineInstrBuilder &addMemOperand(MachineMemOperand *MMO) const { 121 const MachineInstrBuilder &addMemOperand(MachineMemOperand *MMO) const {
121 MI->addMemOperand(*MI->getParent()->getParent(), MMO); 122 MI->addMemOperand(*MI->getParent()->getParent(), MMO);
122 return *this; 123 return *this;
123 } 124 }
124 125
126 const MachineInstrBuilder &setMemRefs(MachineInstr::mmo_iterator b,
127 MachineInstr::mmo_iterator e) const {
128 MI->setMemRefs(b, e);
129 return *this;
130 }
131
132
125 const MachineInstrBuilder &addOperand(const MachineOperand &MO) const { 133 const MachineInstrBuilder &addOperand(const MachineOperand &MO) const {
126 MI->addOperand(MO); 134 MI->addOperand(MO);
127 return *this; 135 return *this;
128 } 136 }
129 137
130 const MachineInstrBuilder &addMetadata(const MDNode *MD) const { 138 const MachineInstrBuilder &addMetadata(const MDNode *MD) const {
131 MI->addOperand(MachineOperand::CreateMetadata(MD)); 139 MI->addOperand(MachineOperand::CreateMetadata(MD));
132 return *this; 140 return *this;
133 } 141 }
134 142
135 const MachineInstrBuilder &addSym(MCSymbol *Sym) const { 143 const MachineInstrBuilder &addSym(MCSymbol *Sym) const {
136 MI->addOperand(MachineOperand::CreateMCSymbol(Sym)); 144 MI->addOperand(MachineOperand::CreateMCSymbol(Sym));
137 return *this; 145 return *this;
138 } 146 }
147
148 // Add a displacement from an existing MachineOperand with an added offset.
149 const MachineInstrBuilder &addDisp(const MachineOperand &Disp,
150 int64_t off) const {
151 switch (Disp.getType()) {
152 default:
153 llvm_unreachable("Unhandled operand type in addDisp()");
154 case MachineOperand::MO_Immediate:
155 return addImm(Disp.getImm() + off);
156 case MachineOperand::MO_GlobalAddress:
157 return addGlobalAddress(Disp.getGlobal(), Disp.getOffset() + off);
158 }
159 }
139 }; 160 };
140 161
141 /// BuildMI - Builder interface. Specify how to create the initial instruction 162 /// BuildMI - Builder interface. Specify how to create the initial instruction
142 /// itself. 163 /// itself.
143 /// 164 ///
144 inline MachineInstrBuilder BuildMI(MachineFunction &MF, 165 inline MachineInstrBuilder BuildMI(MachineFunction &MF,
145 DebugLoc DL, 166 DebugLoc DL,
146 const TargetInstrDesc &TID) { 167 const TargetInstrDesc &TID) {
147 return MachineInstrBuilder(MF.CreateMachineInstr(TID, DL)); 168 return MachineInstrBuilder(MF.CreateMachineInstr(TID, DL));
148 } 169 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 inline unsigned getDeadRegState(bool B) { 239 inline unsigned getDeadRegState(bool B) {
219 return B ? RegState::Dead : 0; 240 return B ? RegState::Dead : 0;
220 } 241 }
221 inline unsigned getUndefRegState(bool B) { 242 inline unsigned getUndefRegState(bool B) {
222 return B ? RegState::Undef : 0; 243 return B ? RegState::Undef : 0;
223 } 244 }
224 245
225 } // End llvm namespace 246 } // End llvm namespace
226 247
227 #endif 248 #endif
OLDNEW
« no previous file with comments | « no previous file | lib/Target/X86/X86ISelLowering.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698