MachineFunctionPass.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //===-- MachineFunctionPass.cpp -------------------------------------------===//
  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 contains the definitions of the MachineFunctionPass members.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. #include "llvm/Analysis/AliasAnalysis.h"
  14. #include "llvm/Analysis/ScalarEvolution.h"
  15. #include "llvm/Analysis/IVUsers.h"
  16. #include "llvm/Analysis/LiveValues.h"
  17. #include "llvm/Analysis/LoopDependenceAnalysis.h"
  18. #include "llvm/Analysis/MemoryDependenceAnalysis.h"
  19. #include "llvm/CodeGen/MachineFunctionAnalysis.h"
  20. #include "llvm/CodeGen/MachineFunctionPass.h"
  21. using namespace llvm;
  22. bool MachineFunctionPass::runOnFunction(Function &F) {
  23. // Do not codegen any 'available_externally' functions at all, they have
  24. // definitions outside the translation unit.
  25. if (F.hasAvailableExternallyLinkage())
  26. return false;
  27. MachineFunction &MF = getAnalysis<MachineFunctionAnalysis>().getMF();
  28. return runOnMachineFunction(MF);
  29. }
  30. void MachineFunctionPass::getAnalysisUsage(AnalysisUsage &AU) const {
  31. AU.addRequired<MachineFunctionAnalysis>();
  32. // MachineFunctionPass preserves all LLVM IR passes, but there's no
  33. // high-level way to express this. Instead, just list a bunch of
  34. // passes explicitly.
  35. AU.addPreserved<AliasAnalysis>();
  36. AU.addPreserved<ScalarEvolution>();
  37. AU.addPreserved<IVUsers>();
  38. AU.addPreserved<LoopDependenceAnalysis>();
  39. AU.addPreserved<MemoryDependenceAnalysis>();
  40. AU.addPreserved<LiveValues>();
  41. AU.addPreserved<MachineFunctionAnalysis>();
  42. AU.setPreservesCFG();
  43. FunctionPass::getAnalysisUsage(AU);
  44. }