@@ -149,66 +149,6 @@ void NVPTXAsmPrinter::emitInstruction(const MachineInstr *MI) {
149
149
EmitToStreamer (*OutStreamer, Inst);
150
150
}
151
151
152
- // Handle symbol backtracking for targets that do not support image handles
153
- bool NVPTXAsmPrinter::lowerImageHandleOperand (const MachineInstr *MI,
154
- unsigned OpNo, MCOperand &MCOp) {
155
- const MachineOperand &MO = MI->getOperand (OpNo);
156
- const MCInstrDesc &MCID = MI->getDesc ();
157
-
158
- if (MCID.TSFlags & NVPTXII::IsTexFlag) {
159
- // This is a texture fetch, so operand 4 is a texref and operand 5 is
160
- // a samplerref
161
- if (OpNo == 4 && MO.isImm ()) {
162
- lowerImageHandleSymbol (MO.getImm (), MCOp);
163
- return true ;
164
- }
165
- if (OpNo == 5 && MO.isImm () && !(MCID.TSFlags & NVPTXII::IsTexModeUnifiedFlag)) {
166
- lowerImageHandleSymbol (MO.getImm (), MCOp);
167
- return true ;
168
- }
169
-
170
- return false ;
171
- } else if (MCID.TSFlags & NVPTXII::IsSuldMask) {
172
- unsigned VecSize =
173
- 1 << (((MCID.TSFlags & NVPTXII::IsSuldMask) >> NVPTXII::IsSuldShift) - 1 );
174
-
175
- // For a surface load of vector size N, the Nth operand will be the surfref
176
- if (OpNo == VecSize && MO.isImm ()) {
177
- lowerImageHandleSymbol (MO.getImm (), MCOp);
178
- return true ;
179
- }
180
-
181
- return false ;
182
- } else if (MCID.TSFlags & NVPTXII::IsSustFlag) {
183
- // This is a surface store, so operand 0 is a surfref
184
- if (OpNo == 0 && MO.isImm ()) {
185
- lowerImageHandleSymbol (MO.getImm (), MCOp);
186
- return true ;
187
- }
188
-
189
- return false ;
190
- } else if (MCID.TSFlags & NVPTXII::IsSurfTexQueryFlag) {
191
- // This is a query, so operand 1 is a surfref/texref
192
- if (OpNo == 1 && MO.isImm ()) {
193
- lowerImageHandleSymbol (MO.getImm (), MCOp);
194
- return true ;
195
- }
196
-
197
- return false ;
198
- }
199
-
200
- return false ;
201
- }
202
-
203
- void NVPTXAsmPrinter::lowerImageHandleSymbol (unsigned Index, MCOperand &MCOp) {
204
- // Ewwww
205
- TargetMachine &TM = const_cast <TargetMachine &>(MF->getTarget ());
206
- NVPTXTargetMachine &nvTM = static_cast <NVPTXTargetMachine &>(TM);
207
- const NVPTXMachineFunctionInfo *MFI = MF->getInfo <NVPTXMachineFunctionInfo>();
208
- StringRef Sym = MFI->getImageHandleSymbol (Index);
209
- StringRef SymName = nvTM.getStrPool ().save (Sym);
210
- MCOp = GetSymbolRef (OutContext.getOrCreateSymbol (SymName));
211
- }
212
152
213
153
void NVPTXAsmPrinter::lowerToMCInst (const MachineInstr *MI, MCInst &OutMI) {
214
154
OutMI.setOpcode (MI->getOpcode ());
@@ -220,67 +160,49 @@ void NVPTXAsmPrinter::lowerToMCInst(const MachineInstr *MI, MCInst &OutMI) {
220
160
return ;
221
161
}
222
162
223
- for (unsigned i = 0 , e = MI->getNumOperands (); i != e; ++i) {
224
- const MachineOperand &MO = MI->getOperand (i);
225
-
226
- MCOperand MCOp;
227
- if (lowerImageHandleOperand (MI, i, MCOp)) {
228
- OutMI.addOperand (MCOp);
229
- continue ;
230
- }
231
-
232
- if (lowerOperand (MO, MCOp))
233
- OutMI.addOperand (MCOp);
234
- }
163
+ for (const auto MO : MI->operands ())
164
+ OutMI.addOperand (lowerOperand (MO));
235
165
}
236
166
237
- bool NVPTXAsmPrinter::lowerOperand (const MachineOperand &MO,
238
- MCOperand &MCOp) {
167
+ MCOperand NVPTXAsmPrinter::lowerOperand (const MachineOperand &MO) {
239
168
switch (MO.getType ()) {
240
- default : llvm_unreachable (" unknown operand type" );
169
+ default :
170
+ llvm_unreachable (" unknown operand type" );
241
171
case MachineOperand::MO_Register:
242
- MCOp = MCOperand::createReg (encodeVirtualRegister (MO.getReg ()));
243
- break ;
172
+ return MCOperand::createReg (encodeVirtualRegister (MO.getReg ()));
244
173
case MachineOperand::MO_Immediate:
245
- MCOp = MCOperand::createImm (MO.getImm ());
246
- break ;
174
+ return MCOperand::createImm (MO.getImm ());
247
175
case MachineOperand::MO_MachineBasicBlock:
248
- MCOp = MCOperand::createExpr (MCSymbolRefExpr::create (
249
- MO.getMBB ()->getSymbol (), OutContext));
250
- break ;
176
+ return MCOperand::createExpr (
177
+ MCSymbolRefExpr::create (MO.getMBB ()->getSymbol (), OutContext));
251
178
case MachineOperand::MO_ExternalSymbol:
252
- MCOp = GetSymbolRef (GetExternalSymbolSymbol (MO.getSymbolName ()));
253
- break ;
179
+ return GetSymbolRef (GetExternalSymbolSymbol (MO.getSymbolName ()));
254
180
case MachineOperand::MO_GlobalAddress:
255
- MCOp = GetSymbolRef (getSymbol (MO.getGlobal ()));
256
- break ;
181
+ return GetSymbolRef (getSymbol (MO.getGlobal ()));
257
182
case MachineOperand::MO_FPImmediate: {
258
183
const ConstantFP *Cnt = MO.getFPImm ();
259
184
const APFloat &Val = Cnt->getValueAPF ();
260
185
261
186
switch (Cnt->getType ()->getTypeID ()) {
262
- default : report_fatal_error (" Unsupported FP type" ); break ;
263
- case Type::HalfTyID:
264
- MCOp = MCOperand::createExpr (
265
- NVPTXFloatMCExpr::createConstantFPHalf (Val, OutContext));
187
+ default :
188
+ report_fatal_error (" Unsupported FP type" );
266
189
break ;
190
+ case Type::HalfTyID:
191
+ return MCOperand::createExpr (
192
+ NVPTXFloatMCExpr::createConstantFPHalf (Val, OutContext));
267
193
case Type::BFloatTyID:
268
- MCOp = MCOperand::createExpr (
194
+ return MCOperand::createExpr (
269
195
NVPTXFloatMCExpr::createConstantBFPHalf (Val, OutContext));
270
- break ;
271
196
case Type::FloatTyID:
272
- MCOp = MCOperand::createExpr (
273
- NVPTXFloatMCExpr::createConstantFPSingle (Val, OutContext));
274
- break ;
197
+ return MCOperand::createExpr (
198
+ NVPTXFloatMCExpr::createConstantFPSingle (Val, OutContext));
275
199
case Type::DoubleTyID:
276
- MCOp = MCOperand::createExpr (
277
- NVPTXFloatMCExpr::createConstantFPDouble (Val, OutContext));
278
- break ;
200
+ return MCOperand::createExpr (
201
+ NVPTXFloatMCExpr::createConstantFPDouble (Val, OutContext));
279
202
}
280
203
break ;
281
204
}
282
205
}
283
- return true ;
284
206
}
285
207
286
208
unsigned NVPTXAsmPrinter::encodeVirtualRegister (unsigned Reg) {
0 commit comments