Path: blob/main/contrib/llvm-project/llvm/lib/Analysis/Analysis.cpp
35233 views
//===-- Analysis.cpp ------------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "llvm-c/Analysis.h"9#include "llvm/IR/Module.h"10#include "llvm/IR/Verifier.h"11#include "llvm/InitializePasses.h"12#include "llvm/PassRegistry.h"13#include "llvm/Support/raw_ostream.h"14#include <cstring>1516using namespace llvm;1718/// initializeAnalysis - Initialize all passes linked into the Analysis library.19void llvm::initializeAnalysis(PassRegistry &Registry) {20initializeBasicAAWrapperPassPass(Registry);21initializeBlockFrequencyInfoWrapperPassPass(Registry);22initializeBranchProbabilityInfoWrapperPassPass(Registry);23initializeCallGraphWrapperPassPass(Registry);24initializeCallGraphDOTPrinterPass(Registry);25initializeCallGraphViewerPass(Registry);26initializeCycleInfoWrapperPassPass(Registry);27initializeDependenceAnalysisWrapperPassPass(Registry);28initializeDominanceFrontierWrapperPassPass(Registry);29initializeDomViewerWrapperPassPass(Registry);30initializeDomPrinterWrapperPassPass(Registry);31initializeDomOnlyViewerWrapperPassPass(Registry);32initializePostDomViewerWrapperPassPass(Registry);33initializeDomOnlyPrinterWrapperPassPass(Registry);34initializePostDomPrinterWrapperPassPass(Registry);35initializePostDomOnlyViewerWrapperPassPass(Registry);36initializePostDomOnlyPrinterWrapperPassPass(Registry);37initializeAAResultsWrapperPassPass(Registry);38initializeGlobalsAAWrapperPassPass(Registry);39initializeIVUsersWrapperPassPass(Registry);40initializeIRSimilarityIdentifierWrapperPassPass(Registry);41initializeLazyBranchProbabilityInfoPassPass(Registry);42initializeLazyBlockFrequencyInfoPassPass(Registry);43initializeLazyValueInfoWrapperPassPass(Registry);44initializeLoopInfoWrapperPassPass(Registry);45initializeMemoryDependenceWrapperPassPass(Registry);46initializeModuleSummaryIndexWrapperPassPass(Registry);47initializeOptimizationRemarkEmitterWrapperPassPass(Registry);48initializePhiValuesWrapperPassPass(Registry);49initializePostDominatorTreeWrapperPassPass(Registry);50initializeRegionInfoPassPass(Registry);51initializeRegionViewerPass(Registry);52initializeRegionPrinterPass(Registry);53initializeRegionOnlyViewerPass(Registry);54initializeRegionOnlyPrinterPass(Registry);55initializeSCEVAAWrapperPassPass(Registry);56initializeScalarEvolutionWrapperPassPass(Registry);57initializeStackSafetyGlobalInfoWrapperPassPass(Registry);58initializeStackSafetyInfoWrapperPassPass(Registry);59initializeTargetTransformInfoWrapperPassPass(Registry);60initializeTypeBasedAAWrapperPassPass(Registry);61initializeScopedNoAliasAAWrapperPassPass(Registry);62initializeLCSSAVerificationPassPass(Registry);63initializeMemorySSAWrapperPassPass(Registry);64}6566LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action,67char **OutMessages) {68raw_ostream *DebugOS = Action != LLVMReturnStatusAction ? &errs() : nullptr;69std::string Messages;70raw_string_ostream MsgsOS(Messages);7172LLVMBool Result = verifyModule(*unwrap(M), OutMessages ? &MsgsOS : DebugOS);7374// Duplicate the output to stderr.75if (DebugOS && OutMessages)76*DebugOS << MsgsOS.str();7778if (Action == LLVMAbortProcessAction && Result)79report_fatal_error("Broken module found, compilation aborted!");8081if (OutMessages)82*OutMessages = strdup(MsgsOS.str().c_str());8384return Result;85}8687LLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action) {88LLVMBool Result = verifyFunction(89*unwrap<Function>(Fn), Action != LLVMReturnStatusAction ? &errs()90: nullptr);9192if (Action == LLVMAbortProcessAction && Result)93report_fatal_error("Broken function found, compilation aborted!");9495return Result;96}9798void LLVMViewFunctionCFG(LLVMValueRef Fn) {99Function *F = unwrap<Function>(Fn);100F->viewCFG();101}102103void LLVMViewFunctionCFGOnly(LLVMValueRef Fn) {104Function *F = unwrap<Function>(Fn);105F->viewCFGOnly();106}107108109