@@ -149,67 +149,6 @@ void NVPTXAsmPrinter::emitInstruction(const MachineInstr *MI) {
149149 EmitToStreamer (*OutStreamer, Inst);
150150}
151151
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-
213152void NVPTXAsmPrinter::lowerToMCInst (const MachineInstr *MI, MCInst &OutMI) {
214153 OutMI.setOpcode (MI->getOpcode ());
215154 // Special: Do not mangle symbol operand of CALL_PROTOTYPE
@@ -220,67 +159,49 @@ void NVPTXAsmPrinter::lowerToMCInst(const MachineInstr *MI, MCInst &OutMI) {
220159 return ;
221160 }
222161
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));
235164}
236165
237- bool NVPTXAsmPrinter::lowerOperand (const MachineOperand &MO,
238- MCOperand &MCOp) {
166+ MCOperand NVPTXAsmPrinter::lowerOperand (const MachineOperand &MO) {
239167 switch (MO.getType ()) {
240- default : llvm_unreachable (" unknown operand type" );
168+ default :
169+ llvm_unreachable (" unknown operand type" );
241170 case MachineOperand::MO_Register:
242- MCOp = MCOperand::createReg (encodeVirtualRegister (MO.getReg ()));
243- break ;
171+ return MCOperand::createReg (encodeVirtualRegister (MO.getReg ()));
244172 case MachineOperand::MO_Immediate:
245- MCOp = MCOperand::createImm (MO.getImm ());
246- break ;
173+ return MCOperand::createImm (MO.getImm ());
247174 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));
251177 case MachineOperand::MO_ExternalSymbol:
252- MCOp = GetSymbolRef (GetExternalSymbolSymbol (MO.getSymbolName ()));
253- break ;
178+ return GetSymbolRef (GetExternalSymbolSymbol (MO.getSymbolName ()));
254179 case MachineOperand::MO_GlobalAddress:
255- MCOp = GetSymbolRef (getSymbol (MO.getGlobal ()));
256- break ;
180+ return GetSymbolRef (getSymbol (MO.getGlobal ()));
257181 case MachineOperand::MO_FPImmediate: {
258182 const ConstantFP *Cnt = MO.getFPImm ();
259183 const APFloat &Val = Cnt->getValueAPF ();
260184
261185 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" );
266188 break ;
189+ case Type::HalfTyID:
190+ return MCOperand::createExpr (
191+ NVPTXFloatMCExpr::createConstantFPHalf (Val, OutContext));
267192 case Type::BFloatTyID:
268- MCOp = MCOperand::createExpr (
193+ return MCOperand::createExpr (
269194 NVPTXFloatMCExpr::createConstantBFPHalf (Val, OutContext));
270- break ;
271195 case Type::FloatTyID:
272- MCOp = MCOperand::createExpr (
273- NVPTXFloatMCExpr::createConstantFPSingle (Val, OutContext));
274- break ;
196+ return MCOperand::createExpr (
197+ NVPTXFloatMCExpr::createConstantFPSingle (Val, OutContext));
275198 case Type::DoubleTyID:
276- MCOp = MCOperand::createExpr (
277- NVPTXFloatMCExpr::createConstantFPDouble (Val, OutContext));
278- break ;
199+ return MCOperand::createExpr (
200+ NVPTXFloatMCExpr::createConstantFPDouble (Val, OutContext));
279201 }
280202 break ;
281203 }
282204 }
283- return true ;
284205}
285206
286207unsigned NVPTXAsmPrinter::encodeVirtualRegister (unsigned Reg) {
0 commit comments