MachineFunctionPass.h revision 212904
1130803Smarcel//===-- MachineFunctionPass.h - Pass for MachineFunctions --------*-C++ -*-===// 2130803Smarcel// 3130803Smarcel// The LLVM Compiler Infrastructure 4130803Smarcel// 5130803Smarcel// This file is distributed under the University of Illinois Open Source 6130803Smarcel// License. See LICENSE.TXT for details. 7130803Smarcel// 8130803Smarcel//===----------------------------------------------------------------------===// 9130803Smarcel// 10130803Smarcel// This file defines the MachineFunctionPass class. MachineFunctionPass's are 11130803Smarcel// just FunctionPass's, except they operate on machine code as part of a code 12130803Smarcel// generator. Because they operate on machine code, not the LLVM 13130803Smarcel// representation, MachineFunctionPass's are not allowed to modify the LLVM 14130803Smarcel// representation. Due to this limitation, the MachineFunctionPass class takes 15130803Smarcel// care of declaring that no LLVM passes are invalidated. 16130803Smarcel// 17130803Smarcel//===----------------------------------------------------------------------===// 18130803Smarcel 19130803Smarcel#ifndef LLVM_CODEGEN_MACHINE_FUNCTION_PASS_H 20130803Smarcel#define LLVM_CODEGEN_MACHINE_FUNCTION_PASS_H 21130803Smarcel 22130803Smarcel#include "llvm/Pass.h" 23130803Smarcel 24130803Smarcelnamespace llvm { 25130803Smarcel 26130803Smarcelclass MachineFunction; 27130803Smarcel 28130803Smarcel/// MachineFunctionPass - This class adapts the FunctionPass interface to 29130803Smarcel/// allow convenient creation of passes that operate on the MachineFunction 30130803Smarcel/// representation. Instead of overriding runOnFunction, subclasses 31130803Smarcel/// override runOnMachineFunction. 32130803Smarcelclass MachineFunctionPass : public FunctionPass { 33130803Smarcelprotected: 34130803Smarcel explicit MachineFunctionPass(char &ID) : FunctionPass(ID) {} 35130803Smarcel 36130803Smarcel /// runOnMachineFunction - This method must be overloaded to perform the 37130803Smarcel /// desired machine code transformation or analysis. 38130803Smarcel /// 39130803Smarcel virtual bool runOnMachineFunction(MachineFunction &MF) = 0; 40130803Smarcel 41130803Smarcel /// getAnalysisUsage - Subclasses that override getAnalysisUsage 42130803Smarcel /// must call this. 43130803Smarcel /// 44130803Smarcel /// For MachineFunctionPasses, calling AU.preservesCFG() indicates that 45130803Smarcel /// the pass does not modify the MachineBasicBlock CFG. 46130803Smarcel /// 47130803Smarcel virtual void getAnalysisUsage(AnalysisUsage &AU) const; 48130803Smarcel 49130803Smarcelprivate: 50130803Smarcel /// createPrinterPass - Get a machine function printer pass. 51130803Smarcel virtual Pass *createPrinterPass(raw_ostream &O, 52130803Smarcel const std::string &Banner) const; 53130803Smarcel 54130803Smarcel virtual bool runOnFunction(Function &F); 55130803Smarcel}; 56130803Smarcel 57130803Smarcel} // End llvm namespace 58130803Smarcel 59130803Smarcel#endif 60130803Smarcel