1 //===-- CodeGen/MachineInstr.cpp ------------------------------------------===//
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 file contains the machine function pass registry for register allocators
11 // and instruction schedulers.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "llvm/CodeGen/MachinePassRegistry.h"
16 
17 using namespace llvm;
18 
anchor()19 void MachinePassRegistryListener::anchor() { }
20 
21 /// setDefault - Set the default constructor by name.
setDefault(StringRef Name)22 void MachinePassRegistry::setDefault(StringRef Name) {
23   MachinePassCtor Ctor = nullptr;
24   for(MachinePassRegistryNode *R = getList(); R; R = R->getNext()) {
25     if (R->getName() == Name) {
26       Ctor = R->getCtor();
27       break;
28     }
29   }
30   assert(Ctor && "Unregistered pass name");
31   setDefault(Ctor);
32 }
33 
34 /// Add - Adds a function pass to the registration list.
35 ///
Add(MachinePassRegistryNode * Node)36 void MachinePassRegistry::Add(MachinePassRegistryNode *Node) {
37   Node->setNext(List);
38   List = Node;
39   if (Listener) Listener->NotifyAdd(Node->getName(),
40                                     Node->getCtor(),
41                                     Node->getDescription());
42 }
43 
44 
45 /// Remove - Removes a function pass from the registration list.
46 ///
Remove(MachinePassRegistryNode * Node)47 void MachinePassRegistry::Remove(MachinePassRegistryNode *Node) {
48   for (MachinePassRegistryNode **I = &List; *I; I = (*I)->getNextAddress()) {
49     if (*I == Node) {
50       if (Listener) Listener->NotifyRemove(Node->getName());
51       *I = (*I)->getNext();
52       break;
53     }
54   }
55 }
56