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