blob: ac789b37aa23453a11d7cfc7b5dada7a218140e7 [file] [log] [blame]
Dan Gohmanf17a25c2007-07-18 16:29:46 +00001//===-- AlphaBranchSelector.cpp - Convert Pseudo branchs ----------*- C++ -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by Andrew Lenharth and is distributed under the
6// University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Replace Pseudo COND_BRANCH_* with their appropriate real branch
11// Simplified version of the PPC Branch Selector
12//
13//===----------------------------------------------------------------------===//
14
15#include "Alpha.h"
16#include "AlphaInstrInfo.h"
17#include "llvm/CodeGen/MachineFunctionPass.h"
18#include "llvm/Support/Compiler.h"
19#include "llvm/Target/TargetMachine.h"
20#include "llvm/Target/TargetAsmInfo.h"
21using namespace llvm;
22
23namespace {
24 struct VISIBILITY_HIDDEN AlphaBSel : public MachineFunctionPass {
25 static char ID;
26 AlphaBSel() : MachineFunctionPass((intptr_t)&ID) {}
27
28 virtual bool runOnMachineFunction(MachineFunction &Fn);
29
30 virtual const char *getPassName() const {
31 return "Alpha Branch Selection";
32 }
33 };
34 char AlphaBSel::ID = 0;
35}
36
37/// createAlphaBranchSelectionPass - returns an instance of the Branch Selection
38/// Pass
39///
40FunctionPass *llvm::createAlphaBranchSelectionPass() {
41 return new AlphaBSel();
42}
43
44bool AlphaBSel::runOnMachineFunction(MachineFunction &Fn) {
45
46 for (MachineFunction::iterator MFI = Fn.begin(), E = Fn.end(); MFI != E;
47 ++MFI) {
48 MachineBasicBlock *MBB = MFI;
49
50 for (MachineBasicBlock::iterator MBBI = MBB->begin(), EE = MBB->end();
51 MBBI != EE; ++MBBI) {
52 if (MBBI->getOpcode() == Alpha::COND_BRANCH_I ||
53 MBBI->getOpcode() == Alpha::COND_BRANCH_F) {
54
55 // condbranch operands:
56 // 0. bc opcode
57 // 1. reg
58 // 2. target MBB
59 const TargetInstrInfo *TII = Fn.getTarget().getInstrInfo();
60 MBBI->setInstrDescriptor(TII->get(MBBI->getOperand(0).getImm()));
61 }
62 }
63 }
64
65 return true;
66}
67