1193323Sed//===-- CodeGen/MachineInstr.cpp ------------------------------------------===//
2193323Sed//
3193323Sed//                     The LLVM Compiler Infrastructure
4193323Sed//
5193323Sed// This file is distributed under the University of Illinois Open Source
6193323Sed// License. See LICENSE.TXT for details.
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed//
10193323Sed// This file contains the machine function pass registry for register allocators
11193323Sed// and instruction schedulers.
12193323Sed//
13193323Sed//===----------------------------------------------------------------------===//
14193323Sed
15193323Sed#include "llvm/CodeGen/MachinePassRegistry.h"
16193323Sed
17193323Sedusing namespace llvm;
18193323Sed
19235633Sdimvoid MachinePassRegistryListener::anchor() { }
20193323Sed
21245431Sdim/// setDefault - Set the default constructor by name.
22245431Sdimvoid MachinePassRegistry::setDefault(StringRef Name) {
23245431Sdim  MachinePassCtor Ctor = 0;
24245431Sdim  for(MachinePassRegistryNode *R = getList(); R; R = R->getNext()) {
25245431Sdim    if (R->getName() == Name) {
26245431Sdim      Ctor = R->getCtor();
27245431Sdim      break;
28245431Sdim    }
29245431Sdim  }
30245431Sdim  assert(Ctor && "Unregistered pass name");
31245431Sdim  setDefault(Ctor);
32245431Sdim}
33245431Sdim
34193323Sed/// Add - Adds a function pass to the registration list.
35193323Sed///
36193323Sedvoid MachinePassRegistry::Add(MachinePassRegistryNode *Node) {
37193323Sed  Node->setNext(List);
38193323Sed  List = Node;
39193323Sed  if (Listener) Listener->NotifyAdd(Node->getName(),
40193323Sed                                    Node->getCtor(),
41193323Sed                                    Node->getDescription());
42193323Sed}
43193323Sed
44193323Sed
45193323Sed/// Remove - Removes a function pass from the registration list.
46193323Sed///
47193323Sedvoid MachinePassRegistry::Remove(MachinePassRegistryNode *Node) {
48193323Sed  for (MachinePassRegistryNode **I = &List; *I; I = (*I)->getNextAddress()) {
49193323Sed    if (*I == Node) {
50193323Sed      if (Listener) Listener->NotifyRemove(Node->getName());
51193323Sed      *I = (*I)->getNext();
52193323Sed      break;
53193323Sed    }
54193323Sed  }
55193323Sed}
56