MachineFunctionPass.h revision 7ed47a13356daed2a34cd2209a31f92552e3bdd8
1294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek//===-- MachineFunctionPass.h - Pass for MachineFunctions --------*-C++ -*-===// 2294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// 3294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// The LLVM Compiler Infrastructure 4294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// 5294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// This file is distributed under the University of Illinois Open Source 6294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// License. See LICENSE.TXT for details. 7294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// 8294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek//===----------------------------------------------------------------------===// 9294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// 10294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// This file defines the MachineFunctionPass class. MachineFunctionPass's are 11294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// just FunctionPass's, except they operate on machine code as part of a code 12294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// generator. Because they operate on machine code, not the LLVM 13294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// representation, MachineFunctionPass's are not allowed to modify the LLVM 14294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// representation. Due to this limitation, the MachineFunctionPass class takes 15294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// care of declaring that no LLVM passes are invalidated. 16e38dd95dddb8f1b38469c8d0e28aa1c660489324Jordy Rose// 17294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek//===----------------------------------------------------------------------===// 18294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek 19294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#ifndef LLVM_CODEGEN_MACHINE_FUNCTION_PASS_H 20294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#define LLVM_CODEGEN_MACHINE_FUNCTION_PASS_H 21294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek 22294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#include "llvm/Pass.h" 23294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#include "llvm/CodeGen/MachineFunction.h" 24294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek 25294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremeneknamespace llvm { 26294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek 27294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenekstruct MachineFunctionPass : public FunctionPass { 28294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek 29294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek explicit MachineFunctionPass(intptr_t ID) : FunctionPass(ID) {} 30294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek 31294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenekprotected: 32294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek /// runOnMachineFunction - This method must be overloaded to perform the 33294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek /// desired machine code transformation or analysis. 34294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek /// 35294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek virtual bool runOnMachineFunction(MachineFunction &MF) = 0; 36294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek 37894212e9510299abb203801e014fec76b7926a05Ted Kremenekpublic: 38894212e9510299abb203801e014fec76b7926a05Ted Kremenek // FIXME: This pass should declare that the pass does not invalidate any LLVM 39294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek // passes. 40894212e9510299abb203801e014fec76b7926a05Ted Kremenek bool runOnFunction(Function &F) { 41294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek return runOnMachineFunction(MachineFunction::get(&F)); 42294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek } 43294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek 44294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenekprivate: 45294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek virtual void virtfn(); // out of line virtual fn to give class a home. 465eca482fe895ea57bc82410222e6426c09e63284Ted Kremenek}; 475eca482fe895ea57bc82410222e6426c09e63284Ted Kremenek 485eca482fe895ea57bc82410222e6426c09e63284Ted Kremenek} // End llvm namespace 49294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek 50294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#endif 51294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek