Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.1 KiB

  1. //===-- MachineFunctionPass.h - Pass for MachineFunctions --------*-C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //
  10. // This file defines the MachineFunctionPass class. MachineFunctionPass's are
  11. // just FunctionPass's, except they operate on machine code as part of a code
  12. // generator. Because they operate on machine code, not the LLVM
  13. // representation, MachineFunctionPass's are not allowed to modify the LLVM
  14. // representation. Due to this limitation, the MachineFunctionPass class takes
  15. // care of declaring that no LLVM passes are invalidated.
  16. //
  17. //===----------------------------------------------------------------------===//
  18. #ifndef LLVM_CODEGEN_MACHINEFUNCTIONPASS_H
  19. #define LLVM_CODEGEN_MACHINEFUNCTIONPASS_H
  20. #include "llvm/Pass.h"
  21. namespace llvm {
  22. class MachineFunction;
  23. /// MachineFunctionPass - This class adapts the FunctionPass interface to
  24. /// allow convenient creation of passes that operate on the MachineFunction
  25. /// representation. Instead of overriding runOnFunction, subclasses
  26. /// override runOnMachineFunction.
  27. class MachineFunctionPass : public FunctionPass {
  28. protected:
  29. explicit MachineFunctionPass(char &ID) : FunctionPass(ID) {}
  30. /// runOnMachineFunction - This method must be overloaded to perform the
  31. /// desired machine code transformation or analysis.
  32. ///
  33. virtual bool runOnMachineFunction(MachineFunction &MF) = 0;
  34. /// getAnalysisUsage - Subclasses that override getAnalysisUsage
  35. /// must call this.
  36. ///
  37. /// For MachineFunctionPasses, calling AU.preservesCFG() indicates that
  38. /// the pass does not modify the MachineBasicBlock CFG.
  39. ///
  40. virtual void getAnalysisUsage(AnalysisUsage &AU) const;
  41. private:
  42. /// createPrinterPass - Get a machine function printer pass.
  43. virtual Pass *createPrinterPass(raw_ostream &O,
  44. const std::string &Banner) const;
  45. virtual bool runOnFunction(Function &F);
  46. };
  47. } // End llvm namespace
  48. #endif