Currently RuntimeLibcallsInfo is a hardcoded list based on the triple. In the future the available libcall set should be dynamically modifiable with module flags. Note this isn't really used yet. TargetLowering is still constructing its own copy, and untangling that to use this requires several more steps.
122 lines
4.9 KiB
C++
122 lines
4.9 KiB
C++
//===-- Analysis.cpp ------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm-c/Analysis.h"
|
|
#include "llvm/IR/Module.h"
|
|
#include "llvm/IR/Verifier.h"
|
|
#include "llvm/InitializePasses.h"
|
|
#include "llvm/PassRegistry.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
#include <cstring>
|
|
|
|
using namespace llvm;
|
|
|
|
/// initializeAnalysis - Initialize all passes linked into the Analysis library.
|
|
void llvm::initializeAnalysis(PassRegistry &Registry) {
|
|
initializeAssumptionCacheTrackerPass(Registry);
|
|
initializeBasicAAWrapperPassPass(Registry);
|
|
initializeBlockFrequencyInfoWrapperPassPass(Registry);
|
|
initializeBranchProbabilityInfoWrapperPassPass(Registry);
|
|
initializeCallGraphWrapperPassPass(Registry);
|
|
initializeCallGraphDOTPrinterPass(Registry);
|
|
initializeCallGraphViewerPass(Registry);
|
|
initializeCycleInfoWrapperPassPass(Registry);
|
|
initializeDXILMetadataAnalysisWrapperPassPass(Registry);
|
|
initializeDXILResourceWrapperPassPass(Registry);
|
|
initializeDXILResourceBindingWrapperPassPass(Registry);
|
|
initializeDXILResourceTypeWrapperPassPass(Registry);
|
|
initializeDXILResourceWrapperPassPass(Registry);
|
|
initializeDependenceAnalysisWrapperPassPass(Registry);
|
|
initializeDominanceFrontierWrapperPassPass(Registry);
|
|
initializeDomViewerWrapperPassPass(Registry);
|
|
initializeDomPrinterWrapperPassPass(Registry);
|
|
initializeDomOnlyViewerWrapperPassPass(Registry);
|
|
initializePostDomViewerWrapperPassPass(Registry);
|
|
initializeDomOnlyPrinterWrapperPassPass(Registry);
|
|
initializePostDomPrinterWrapperPassPass(Registry);
|
|
initializePostDomOnlyViewerWrapperPassPass(Registry);
|
|
initializePostDomOnlyPrinterWrapperPassPass(Registry);
|
|
initializeAAResultsWrapperPassPass(Registry);
|
|
initializeGlobalsAAWrapperPassPass(Registry);
|
|
initializeExternalAAWrapperPassPass(Registry);
|
|
initializeImmutableModuleSummaryIndexWrapperPassPass(Registry);
|
|
initializeIVUsersWrapperPassPass(Registry);
|
|
initializeIRSimilarityIdentifierWrapperPassPass(Registry);
|
|
initializeLazyBranchProbabilityInfoPassPass(Registry);
|
|
initializeLazyBFIPassPass(Registry);
|
|
initializeLazyBlockFrequencyInfoPassPass(Registry);
|
|
initializeLazyValueInfoWrapperPassPass(Registry);
|
|
initializeLoopInfoWrapperPassPass(Registry);
|
|
initializeMemoryDependenceWrapperPassPass(Registry);
|
|
initializeModuleSummaryIndexWrapperPassPass(Registry);
|
|
initializeOptimizationRemarkEmitterWrapperPassPass(Registry);
|
|
initializePhiValuesWrapperPassPass(Registry);
|
|
initializePostDominatorTreeWrapperPassPass(Registry);
|
|
initializeProfileSummaryInfoWrapperPassPass(Registry);
|
|
initializeRegionInfoPassPass(Registry);
|
|
initializeRegionViewerPass(Registry);
|
|
initializeRegionPrinterPass(Registry);
|
|
initializeRegionOnlyViewerPass(Registry);
|
|
initializeRegionOnlyPrinterPass(Registry);
|
|
initializeRuntimeLibraryInfoWrapperPass(Registry);
|
|
initializeSCEVAAWrapperPassPass(Registry);
|
|
initializeScalarEvolutionWrapperPassPass(Registry);
|
|
initializeStackSafetyGlobalInfoWrapperPassPass(Registry);
|
|
initializeStackSafetyInfoWrapperPassPass(Registry);
|
|
initializeTargetLibraryInfoWrapperPassPass(Registry);
|
|
initializeTargetTransformInfoWrapperPassPass(Registry);
|
|
initializeTypeBasedAAWrapperPassPass(Registry);
|
|
initializeScopedNoAliasAAWrapperPassPass(Registry);
|
|
initializeStaticDataProfileInfoWrapperPassPass(Registry);
|
|
initializeLCSSAVerificationPassPass(Registry);
|
|
initializeMemorySSAWrapperPassPass(Registry);
|
|
initializeUniformityInfoWrapperPassPass(Registry);
|
|
}
|
|
|
|
LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action,
|
|
char **OutMessages) {
|
|
raw_ostream *DebugOS = Action != LLVMReturnStatusAction ? &errs() : nullptr;
|
|
std::string Messages;
|
|
raw_string_ostream MsgsOS(Messages);
|
|
|
|
LLVMBool Result = verifyModule(*unwrap(M), OutMessages ? &MsgsOS : DebugOS);
|
|
|
|
// Duplicate the output to stderr.
|
|
if (DebugOS && OutMessages)
|
|
*DebugOS << MsgsOS.str();
|
|
|
|
if (Action == LLVMAbortProcessAction && Result)
|
|
report_fatal_error("Broken module found, compilation aborted!");
|
|
|
|
if (OutMessages)
|
|
*OutMessages = strdup(MsgsOS.str().c_str());
|
|
|
|
return Result;
|
|
}
|
|
|
|
LLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action) {
|
|
LLVMBool Result = verifyFunction(
|
|
*unwrap<Function>(Fn), Action != LLVMReturnStatusAction ? &errs()
|
|
: nullptr);
|
|
|
|
if (Action == LLVMAbortProcessAction && Result)
|
|
report_fatal_error("Broken function found, compilation aborted!");
|
|
|
|
return Result;
|
|
}
|
|
|
|
void LLVMViewFunctionCFG(LLVMValueRef Fn) {
|
|
Function *F = unwrap<Function>(Fn);
|
|
F->viewCFG();
|
|
}
|
|
|
|
void LLVMViewFunctionCFGOnly(LLVMValueRef Fn) {
|
|
Function *F = unwrap<Function>(Fn);
|
|
F->viewCFGOnly();
|
|
}
|