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