Analysis.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. //===-- Analysis.cpp ------------------------------------------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. #include "llvm-c/Analysis.h"
  9. #include "llvm-c/Initialization.h"
  10. #include "llvm/IR/Module.h"
  11. #include "llvm/IR/Verifier.h"
  12. #include "llvm/InitializePasses.h"
  13. #include "llvm/PassRegistry.h"
  14. #include "llvm/Support/raw_ostream.h"
  15. #include <cstring>
  16. using namespace llvm;
  17. /// initializeAnalysis - Initialize all passes linked into the Analysis library.
  18. void llvm::initializeAnalysis(PassRegistry &Registry) {
  19. initializeAAEvalLegacyPassPass(Registry);
  20. initializeAliasSetPrinterPass(Registry);
  21. initializeBasicAAWrapperPassPass(Registry);
  22. initializeBlockFrequencyInfoWrapperPassPass(Registry);
  23. initializeBranchProbabilityInfoWrapperPassPass(Registry);
  24. initializeCallGraphWrapperPassPass(Registry);
  25. initializeCallGraphDOTPrinterPass(Registry);
  26. initializeCallGraphPrinterLegacyPassPass(Registry);
  27. initializeCallGraphViewerPass(Registry);
  28. initializeCostModelAnalysisPass(Registry);
  29. initializeCFGViewerLegacyPassPass(Registry);
  30. initializeCFGPrinterLegacyPassPass(Registry);
  31. initializeCFGOnlyViewerLegacyPassPass(Registry);
  32. initializeCFGOnlyPrinterLegacyPassPass(Registry);
  33. initializeCFLAndersAAWrapperPassPass(Registry);
  34. initializeCFLSteensAAWrapperPassPass(Registry);
  35. initializeCycleInfoWrapperPassPass(Registry);
  36. initializeDependenceAnalysisWrapperPassPass(Registry);
  37. initializeDelinearizationPass(Registry);
  38. initializeDemandedBitsWrapperPassPass(Registry);
  39. initializeDominanceFrontierWrapperPassPass(Registry);
  40. initializeDomViewerPass(Registry);
  41. initializeDomPrinterPass(Registry);
  42. initializeDomOnlyViewerPass(Registry);
  43. initializePostDomViewerPass(Registry);
  44. initializeDomOnlyPrinterPass(Registry);
  45. initializePostDomPrinterPass(Registry);
  46. initializePostDomOnlyViewerPass(Registry);
  47. initializePostDomOnlyPrinterPass(Registry);
  48. initializeAAResultsWrapperPassPass(Registry);
  49. initializeGlobalsAAWrapperPassPass(Registry);
  50. initializeIVUsersWrapperPassPass(Registry);
  51. initializeInstCountLegacyPassPass(Registry);
  52. initializeIntervalPartitionPass(Registry);
  53. initializeIRSimilarityIdentifierWrapperPassPass(Registry);
  54. initializeLazyBranchProbabilityInfoPassPass(Registry);
  55. initializeLazyBlockFrequencyInfoPassPass(Registry);
  56. initializeLazyValueInfoWrapperPassPass(Registry);
  57. initializeLazyValueInfoPrinterPass(Registry);
  58. initializeLegacyDivergenceAnalysisPass(Registry);
  59. initializeLintLegacyPassPass(Registry);
  60. initializeLoopInfoWrapperPassPass(Registry);
  61. initializeMemDepPrinterPass(Registry);
  62. initializeMemDerefPrinterPass(Registry);
  63. initializeMemoryDependenceWrapperPassPass(Registry);
  64. initializeModuleDebugInfoLegacyPrinterPass(Registry);
  65. initializeModuleSummaryIndexWrapperPassPass(Registry);
  66. initializeMustExecutePrinterPass(Registry);
  67. initializeMustBeExecutedContextPrinterPass(Registry);
  68. initializeObjCARCAAWrapperPassPass(Registry);
  69. initializeOptimizationRemarkEmitterWrapperPassPass(Registry);
  70. initializePhiValuesWrapperPassPass(Registry);
  71. initializePostDominatorTreeWrapperPassPass(Registry);
  72. initializeRegionInfoPassPass(Registry);
  73. initializeRegionViewerPass(Registry);
  74. initializeRegionPrinterPass(Registry);
  75. initializeRegionOnlyViewerPass(Registry);
  76. initializeRegionOnlyPrinterPass(Registry);
  77. initializeSCEVAAWrapperPassPass(Registry);
  78. initializeScalarEvolutionWrapperPassPass(Registry);
  79. initializeStackSafetyGlobalInfoWrapperPassPass(Registry);
  80. initializeStackSafetyInfoWrapperPassPass(Registry);
  81. initializeTargetTransformInfoWrapperPassPass(Registry);
  82. initializeTypeBasedAAWrapperPassPass(Registry);
  83. initializeScopedNoAliasAAWrapperPassPass(Registry);
  84. initializeLCSSAVerificationPassPass(Registry);
  85. initializeMemorySSAWrapperPassPass(Registry);
  86. initializeMemorySSAPrinterLegacyPassPass(Registry);
  87. }
  88. void LLVMInitializeAnalysis(LLVMPassRegistryRef R) {
  89. initializeAnalysis(*unwrap(R));
  90. }
  91. void LLVMInitializeIPA(LLVMPassRegistryRef R) {
  92. initializeAnalysis(*unwrap(R));
  93. }
  94. LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action,
  95. char **OutMessages) {
  96. raw_ostream *DebugOS = Action != LLVMReturnStatusAction ? &errs() : nullptr;
  97. std::string Messages;
  98. raw_string_ostream MsgsOS(Messages);
  99. LLVMBool Result = verifyModule(*unwrap(M), OutMessages ? &MsgsOS : DebugOS);
  100. // Duplicate the output to stderr.
  101. if (DebugOS && OutMessages)
  102. *DebugOS << MsgsOS.str();
  103. if (Action == LLVMAbortProcessAction && Result)
  104. report_fatal_error("Broken module found, compilation aborted!");
  105. if (OutMessages)
  106. *OutMessages = strdup(MsgsOS.str().c_str());
  107. return Result;
  108. }
  109. LLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action) {
  110. LLVMBool Result = verifyFunction(
  111. *unwrap<Function>(Fn), Action != LLVMReturnStatusAction ? &errs()
  112. : nullptr);
  113. if (Action == LLVMAbortProcessAction && Result)
  114. report_fatal_error("Broken function found, compilation aborted!");
  115. return Result;
  116. }
  117. void LLVMViewFunctionCFG(LLVMValueRef Fn) {
  118. Function *F = unwrap<Function>(Fn);
  119. F->viewCFG();
  120. }
  121. void LLVMViewFunctionCFGOnly(LLVMValueRef Fn) {
  122. Function *F = unwrap<Function>(Fn);
  123. F->viewCFGOnly();
  124. }