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