1 //===-- AMDGPUConvertToISA.cpp - Lower AMDIL to HW ISA --------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This pass lowers AMDIL machine instructions to the appropriate hardware 11 // instructions. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "AMDGPU.h" 16 #include "AMDGPUInstrInfo.h" 17 #include "llvm/CodeGen/MachineFunctionPass.h" 18 19 using namespace llvm; 20 21 namespace { 22 23 class AMDGPUConvertToISAPass : public MachineFunctionPass { 24 25 private: 26 static char ID; 27 TargetMachine &TM; 28 29 public: AMDGPUConvertToISAPass(TargetMachine & tm)30 AMDGPUConvertToISAPass(TargetMachine &tm) : 31 MachineFunctionPass(ID), TM(tm) { } 32 33 virtual bool runOnMachineFunction(MachineFunction &MF); 34 getPassName() const35 virtual const char *getPassName() const {return "AMDGPU Convert to ISA";} 36 37 }; 38 39 } // End anonymous namespace 40 41 char AMDGPUConvertToISAPass::ID = 0; 42 createAMDGPUConvertToISAPass(TargetMachine & tm)43FunctionPass *llvm::createAMDGPUConvertToISAPass(TargetMachine &tm) { 44 return new AMDGPUConvertToISAPass(tm); 45 } 46 runOnMachineFunction(MachineFunction & MF)47bool AMDGPUConvertToISAPass::runOnMachineFunction(MachineFunction &MF) 48 { 49 const AMDGPUInstrInfo * TII = 50 static_cast<const AMDGPUInstrInfo*>(TM.getInstrInfo()); 51 52 for (MachineFunction::iterator BB = MF.begin(), BB_E = MF.end(); 53 BB != BB_E; ++BB) { 54 MachineBasicBlock &MBB = *BB; 55 for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end(); 56 I != E; ++I) { 57 MachineInstr &MI = *I; 58 TII->convertToISA(MI, MF, MBB.findDebugLoc(I)); 59 } 60 } 61 return false; 62 } 63