@@ -149,67 +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
-
213
152
void NVPTXAsmPrinter::lowerToMCInst (const MachineInstr *MI, MCInst &OutMI) {
214
153
OutMI.setOpcode (MI->getOpcode ());
215
154
// Special: Do not mangle symbol operand of CALL_PROTOTYPE
@@ -220,67 +159,49 @@ void NVPTXAsmPrinter::lowerToMCInst(const MachineInstr *MI, MCInst &OutMI) {
220
159
return ;
221
160
}
222
161
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
- }
162
+ for (const auto MO : MI->operands ())
163
+ OutMI.addOperand (lowerOperand (MO));
235
164
}
236
165
237
- bool NVPTXAsmPrinter::lowerOperand (const MachineOperand &MO,
238
- MCOperand &MCOp) {
166
+ MCOperand NVPTXAsmPrinter::lowerOperand (const MachineOperand &MO) {
239
167
switch (MO.getType ()) {
240
- default : llvm_unreachable (" unknown operand type" );
168
+ default :
169
+ llvm_unreachable (" unknown operand type" );
241
170
case MachineOperand::MO_Register:
242
- MCOp = MCOperand::createReg (encodeVirtualRegister (MO.getReg ()));
243
- break ;
171
+ return MCOperand::createReg (encodeVirtualRegister (MO.getReg ()));
244
172
case MachineOperand::MO_Immediate:
245
- MCOp = MCOperand::createImm (MO.getImm ());
246
- break ;
173
+ return MCOperand::createImm (MO.getImm ());
247
174
case MachineOperand::MO_MachineBasicBlock:
248
- MCOp = MCOperand::createExpr (MCSymbolRefExpr::create (
249
- MO.getMBB ()->getSymbol (), OutContext));
250
- break ;
175
+ return MCOperand::createExpr (
176
+ MCSymbolRefExpr::create (MO.getMBB ()->getSymbol (), OutContext));
251
177
case MachineOperand::MO_ExternalSymbol:
252
- MCOp = GetSymbolRef (GetExternalSymbolSymbol (MO.getSymbolName ()));
253
- break ;
178
+ return GetSymbolRef (GetExternalSymbolSymbol (MO.getSymbolName ()));
254
179
case MachineOperand::MO_GlobalAddress:
255
- MCOp = GetSymbolRef (getSymbol (MO.getGlobal ()));
256
- break ;
180
+ return GetSymbolRef (getSymbol (MO.getGlobal ()));
257
181
case MachineOperand::MO_FPImmediate: {
258
182
const ConstantFP *Cnt = MO.getFPImm ();
259
183
const APFloat &Val = Cnt->getValueAPF ();
260
184
261
185
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));
186
+ default :
187
+ report_fatal_error (" Unsupported FP type" );
266
188
break ;
189
+ case Type::HalfTyID:
190
+ return MCOperand::createExpr (
191
+ NVPTXFloatMCExpr::createConstantFPHalf (Val, OutContext));
267
192
case Type::BFloatTyID:
268
- MCOp = MCOperand::createExpr (
193
+ return MCOperand::createExpr (
269
194
NVPTXFloatMCExpr::createConstantBFPHalf (Val, OutContext));
270
- break ;
271
195
case Type::FloatTyID:
272
- MCOp = MCOperand::createExpr (
273
- NVPTXFloatMCExpr::createConstantFPSingle (Val, OutContext));
274
- break ;
196
+ return MCOperand::createExpr (
197
+ NVPTXFloatMCExpr::createConstantFPSingle (Val, OutContext));
275
198
case Type::DoubleTyID:
276
- MCOp = MCOperand::createExpr (
277
- NVPTXFloatMCExpr::createConstantFPDouble (Val, OutContext));
278
- break ;
199
+ return MCOperand::createExpr (
200
+ NVPTXFloatMCExpr::createConstantFPDouble (Val, OutContext));
279
201
}
280
202
break ;
281
203
}
282
204
}
283
- return true ;
284
205
}
285
206
286
207
unsigned NVPTXAsmPrinter::encodeVirtualRegister (unsigned Reg) {
0 commit comments