@@ -149,66 +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- }
212152
213153void NVPTXAsmPrinter::lowerToMCInst (const MachineInstr *MI, MCInst &OutMI) {
214154 OutMI.setOpcode (MI->getOpcode ());
@@ -220,67 +160,49 @@ void NVPTXAsmPrinter::lowerToMCInst(const MachineInstr *MI, MCInst &OutMI) {
220160 return ;
221161 }
222162
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));
235165}
236166
237- bool NVPTXAsmPrinter::lowerOperand (const MachineOperand &MO,
238- MCOperand &MCOp) {
167+ MCOperand NVPTXAsmPrinter::lowerOperand (const MachineOperand &MO) {
239168 switch (MO.getType ()) {
240- default : llvm_unreachable (" unknown operand type" );
169+ default :
170+ llvm_unreachable (" unknown operand type" );
241171 case MachineOperand::MO_Register:
242- MCOp = MCOperand::createReg (encodeVirtualRegister (MO.getReg ()));
243- break ;
172+ return MCOperand::createReg (encodeVirtualRegister (MO.getReg ()));
244173 case MachineOperand::MO_Immediate:
245- MCOp = MCOperand::createImm (MO.getImm ());
246- break ;
174+ return MCOperand::createImm (MO.getImm ());
247175 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));
251178 case MachineOperand::MO_ExternalSymbol:
252- MCOp = GetSymbolRef (GetExternalSymbolSymbol (MO.getSymbolName ()));
253- break ;
179+ return GetSymbolRef (GetExternalSymbolSymbol (MO.getSymbolName ()));
254180 case MachineOperand::MO_GlobalAddress:
255- MCOp = GetSymbolRef (getSymbol (MO.getGlobal ()));
256- break ;
181+ return GetSymbolRef (getSymbol (MO.getGlobal ()));
257182 case MachineOperand::MO_FPImmediate: {
258183 const ConstantFP *Cnt = MO.getFPImm ();
259184 const APFloat &Val = Cnt->getValueAPF ();
260185
261186 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" );
266189 break ;
190+ case Type::HalfTyID:
191+ return MCOperand::createExpr (
192+ NVPTXFloatMCExpr::createConstantFPHalf (Val, OutContext));
267193 case Type::BFloatTyID:
268- MCOp = MCOperand::createExpr (
194+ return MCOperand::createExpr (
269195 NVPTXFloatMCExpr::createConstantBFPHalf (Val, OutContext));
270- break ;
271196 case Type::FloatTyID:
272- MCOp = MCOperand::createExpr (
273- NVPTXFloatMCExpr::createConstantFPSingle (Val, OutContext));
274- break ;
197+ return MCOperand::createExpr (
198+ NVPTXFloatMCExpr::createConstantFPSingle (Val, OutContext));
275199 case Type::DoubleTyID:
276- MCOp = MCOperand::createExpr (
277- NVPTXFloatMCExpr::createConstantFPDouble (Val, OutContext));
278- break ;
200+ return MCOperand::createExpr (
201+ NVPTXFloatMCExpr::createConstantFPDouble (Val, OutContext));
279202 }
280203 break ;
281204 }
282205 }
283- return true ;
284206}
285207
286208unsigned NVPTXAsmPrinter::encodeVirtualRegister (unsigned Reg) {
0 commit comments