1ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman//===-- MachineFunctionAnalysis.h - Owner of MachineFunctions ----*-C++ -*-===//
2ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman//
3ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman//                     The LLVM Compiler Infrastructure
4ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman//
5ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman// This file is distributed under the University of Illinois Open Source
6ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman// License. See LICENSE.TXT for details.
7ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman//
8ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman//===----------------------------------------------------------------------===//
9ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman//
10ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman// This file declares the MachineFunctionAnalysis class.
11ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman//
12ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman//===----------------------------------------------------------------------===//
13ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman
14674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_CODEGEN_MACHINEFUNCTIONANALYSIS_H
15674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_CODEGEN_MACHINEFUNCTIONANALYSIS_H
16ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman
17ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman#include "llvm/Pass.h"
18ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman
19ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohmannamespace llvm {
20ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman
21ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohmanclass MachineFunction;
227dcb23a0522eb23c3a50f6c8249f10ccdf214993Jakub Staszakclass TargetMachine;
23ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman
24ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman/// MachineFunctionAnalysis - This class is a Pass that manages a
25ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman/// MachineFunction object.
26ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohmanstruct MachineFunctionAnalysis : public FunctionPass {
27ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohmanprivate:
28ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman  const TargetMachine &TM;
29ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman  MachineFunction *MF;
30b84822fb7b64977c16e97b870891da1d6c9736feChris Lattner  unsigned NextFnNum;
31ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohmanpublic:
32ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman  static char ID;
33b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng  explicit MachineFunctionAnalysis(const TargetMachine &tm);
34f94083333c1702006c068b55526441b2bce1d45bDan Gohman  ~MachineFunctionAnalysis();
35ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman
36ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman  MachineFunction &getMF() const { return *MF; }
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  const char* getPassName() const override {
3919af2ed415e4bda9579dab11d30c378c5560e3adOwen Anderson    return "Machine Function Analysis";
4019af2ed415e4bda9579dab11d30c378c5560e3adOwen Anderson  }
41ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman
42ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohmanprivate:
4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bool doInitialization(Module &M) override;
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bool runOnFunction(Function &F) override;
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  void releaseMemory() override;
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  void getAnalysisUsage(AnalysisUsage &AU) const override;
47ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman};
48ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman
49ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman} // End llvm namespace
50ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman
51ad2afc2a421a0e41603d5eee412d4d8c77e9bc1cDan Gohman#endif
52