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