PostDominators.h revision 471ab54df756f2f48c9146ad897672662c3f25f9
148486893f46d2e12e926682a3ecb908716bc66c4Chris Lattner//=- llvm/Analysis/PostDominators.h - Post Dominator Calculation-*- C++ -*-===//
29769ab22265b313171d201b5928688524a01bd87Misha Brukman//
36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//                     The LLVM Compiler Infrastructure
46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//
56fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// This file was developed by the LLVM research group and is distributed under
66fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// the University of Illinois Open Source License. See LICENSE.TXT for details.
79769ab22265b313171d201b5928688524a01bd87Misha Brukman//
86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//===----------------------------------------------------------------------===//
9a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner//
10a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner// This file exposes interfaces to post dominance information.
11a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner//
12a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner//===----------------------------------------------------------------------===//
13a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
14a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner#ifndef LLVM_ANALYSIS_POST_DOMINATORS_H
15a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner#define LLVM_ANALYSIS_POST_DOMINATORS_H
16a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
17a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner#include "llvm/Analysis/Dominators.h"
18a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
19d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekenamespace llvm {
20d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
21201ff603a79a677ca5feb438dd3fbe4b42fded14Misha Brukman/// PostDominatorTree Class - Concrete subclass of DominatorTree that is used to
22201ff603a79a677ca5feb438dd3fbe4b42fded14Misha Brukman/// compute the a post-dominator tree.
23201ff603a79a677ca5feb438dd3fbe4b42fded14Misha Brukman///
24a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattnerstruct PostDominatorTree : public DominatorTreeBase {
25ecd94c804a563f2a86572dcf1d2e81f397e19daaNick Lewycky  static char ID; // Pass identification, replacement for typeid
26794fd75c67a2cdc128d67342c6d88a504d186896Devang Patel
27794fd75c67a2cdc128d67342c6d88a504d186896Devang Patel  PostDominatorTree() :
28794fd75c67a2cdc128d67342c6d88a504d186896Devang Patel    DominatorTreeBase((intptr_t)&ID, true) {}
29a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
30471ab54df756f2f48c9146ad897672662c3f25f9Owen Anderson  virtual bool runOnFunction(Function &F);
31a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
32a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
33a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner    AU.setPreservesAll();
34a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner  }
35a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattnerprivate:
3604fa56932052f416ea911fe65615ebecbf154f6dOwen Anderson  friend void PDTcalculate(PostDominatorTree& PDT, Function &F);
37a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner};
38a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
39a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
40201ff603a79a677ca5feb438dd3fbe4b42fded14Misha Brukman/// PostDominanceFrontier Class - Concrete subclass of DominanceFrontier that is
41201ff603a79a677ca5feb438dd3fbe4b42fded14Misha Brukman/// used to compute the a post-dominance frontier.
42201ff603a79a677ca5feb438dd3fbe4b42fded14Misha Brukman///
43a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattnerstruct PostDominanceFrontier : public DominanceFrontierBase {
441997473cf72957d0e70322e2fe6fe2ab141c58a6Devang Patel  static char ID;
45794fd75c67a2cdc128d67342c6d88a504d186896Devang Patel  PostDominanceFrontier()
46794fd75c67a2cdc128d67342c6d88a504d186896Devang Patel    : DominanceFrontierBase((intptr_t) &ID, true) {}
47a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
48a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner  virtual bool runOnFunction(Function &) {
49a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner    Frontiers.clear();
50a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner    PostDominatorTree &DT = getAnalysis<PostDominatorTree>();
51420a8bf2b2276acdb4d7004ae251a2460999c0e4Chris Lattner    Roots = DT.getRoots();
5226042420d642e810f5cdfb2da6156b74aaf80945Devang Patel    if (const DomTreeNode *Root = DT.getRootNode())
53c72b249e9cb2f6c89fe3008bb8d1f49468bf5657Chris Lattner      calculate(DT, Root);
54a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner    return false;
55a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner  }
56a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
57a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
58a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner    AU.setPreservesAll();
59a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner    AU.addRequired<PostDominatorTree>();
60a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner  }
61a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
62a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattnerprivate:
63a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner  const DomSetType &calculate(const PostDominatorTree &DT,
6426042420d642e810f5cdfb2da6156b74aaf80945Devang Patel                              const DomTreeNode *Node);
65a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner};
66a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner
67d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke} // End llvm namespace
68d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
694f1bd9e9963239c119db70070db1d68286b3de7eReid Spencer// Make sure that any clients of this file link in PostDominators.cpp
704f1bd9e9963239c119db70070db1d68286b3de7eReid SpencerFORCE_DEFINING_FILE_TO_BE_LINKED(PostDominanceFrontier)
714f1bd9e9963239c119db70070db1d68286b3de7eReid Spencer
72a69fd903585a665c031d5aa3fdfb8dc919b44befChris Lattner#endif
73