119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===-- Analysis.cpp ------------------------------------------------------===// 219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// The LLVM Compiler Infrastructure 419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// This file is distributed under the University of Illinois Open Source 619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// License. See LICENSE.TXT for details. 719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===// 919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm-c/Analysis.h" 1119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm-c/Initialization.h" 1219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/InitializePasses.h" 1319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/Analysis/Verifier.h" 1419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include <cstring> 1519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanusing namespace llvm; 1719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman/// initializeAnalysis - Initialize all passes linked into the Analysis library. 1919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanvoid llvm::initializeAnalysis(PassRegistry &Registry) { 2019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeAliasAnalysisAnalysisGroup(Registry); 2119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeAliasAnalysisCounterPass(Registry); 2219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeAAEvalPass(Registry); 2319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeAliasDebuggerPass(Registry); 2419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeAliasSetPrinterPass(Registry); 2519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeNoAAPass(Registry); 2619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeBasicAliasAnalysisPass(Registry); 2719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeBlockFrequencyInfoPass(Registry); 2819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeBranchProbabilityInfoPass(Registry); 2919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeCFGViewerPass(Registry); 3019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeCFGPrinterPass(Registry); 3119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeCFGOnlyViewerPass(Registry); 3219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeCFGOnlyPrinterPass(Registry); 3319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializePrintDbgInfoPass(Registry); 3419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeDominanceFrontierPass(Registry); 3519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeDomViewerPass(Registry); 3619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeDomPrinterPass(Registry); 3719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeDomOnlyViewerPass(Registry); 3819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializePostDomViewerPass(Registry); 3919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeDomOnlyPrinterPass(Registry); 4019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializePostDomPrinterPass(Registry); 4119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializePostDomOnlyViewerPass(Registry); 4219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializePostDomOnlyPrinterPass(Registry); 4319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeIVUsersPass(Registry); 4419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeInstCountPass(Registry); 4519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeIntervalPartitionPass(Registry); 4619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeLazyValueInfoPass(Registry); 4719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeLibCallAliasAnalysisPass(Registry); 4819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeLintPass(Registry); 4919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeLoopDependenceAnalysisPass(Registry); 5019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeLoopInfoPass(Registry); 5119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeMemDepPrinterPass(Registry); 5219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeMemoryDependenceAnalysisPass(Registry); 5319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeModuleDebugInfoPrinterPass(Registry); 5419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializePostDominatorTreePass(Registry); 5519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeProfileEstimatorPassPass(Registry); 5619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeNoProfileInfoPass(Registry); 5719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeNoPathProfileInfoPass(Registry); 5819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeProfileInfoAnalysisGroup(Registry); 5919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializePathProfileInfoAnalysisGroup(Registry); 6019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeLoaderPassPass(Registry); 6119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializePathProfileLoaderPassPass(Registry); 6219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeProfileVerifierPassPass(Registry); 6319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializePathProfileVerifierPass(Registry); 6419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeRegionInfoPass(Registry); 6519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeRegionViewerPass(Registry); 6619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeRegionPrinterPass(Registry); 6719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeRegionOnlyViewerPass(Registry); 6819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeRegionOnlyPrinterPass(Registry); 6919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeScalarEvolutionPass(Registry); 7019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeScalarEvolutionAliasAnalysisPass(Registry); 7119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeTypeBasedAliasAnalysisPass(Registry); 7219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 7319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 7419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanvoid LLVMInitializeAnalysis(LLVMPassRegistryRef R) { 7519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman initializeAnalysis(*unwrap(R)); 7619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 7719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 7819bac1e08be200c31efd26f0f5fd144c9b3eefd3John BaumanLLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action, 7919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman char **OutMessages) { 8019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman std::string Messages; 8119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 8219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman LLVMBool Result = verifyModule(*unwrap(M), 8319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman static_cast<VerifierFailureAction>(Action), 8419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman OutMessages? &Messages : 0); 8519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 8619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (OutMessages) 8719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman *OutMessages = strdup(Messages.c_str()); 8819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 8919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman return Result; 9019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 9119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 9219bac1e08be200c31efd26f0f5fd144c9b3eefd3John BaumanLLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action) { 9319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman return verifyFunction(*unwrap<Function>(Fn), 9419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman static_cast<VerifierFailureAction>(Action)); 9519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 9619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 9719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanvoid LLVMViewFunctionCFG(LLVMValueRef Fn) { 9819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Function *F = unwrap<Function>(Fn); 9919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman F->viewCFG(); 10019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 10119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 10219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanvoid LLVMViewFunctionCFGOnly(LLVMValueRef Fn) { 10319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Function *F = unwrap<Function>(Fn); 10419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman F->viewCFGOnly(); 10519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 106