brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · aaac2cf Raw
122 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm-c/Analysis.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 17using namespace llvm;18 19/// initializeAnalysis - Initialize all passes linked into the Analysis library.20void llvm::initializeAnalysis(PassRegistry &Registry) {21  initializeAssumptionCacheTrackerPass(Registry);22  initializeBasicAAWrapperPassPass(Registry);23  initializeBlockFrequencyInfoWrapperPassPass(Registry);24  initializeBranchProbabilityInfoWrapperPassPass(Registry);25  initializeCallGraphWrapperPassPass(Registry);26  initializeCallGraphDOTPrinterPass(Registry);27  initializeCallGraphViewerPass(Registry);28  initializeCycleInfoWrapperPassPass(Registry);29  initializeDXILMetadataAnalysisWrapperPassPass(Registry);30  initializeDXILResourceWrapperPassPass(Registry);31  initializeDXILResourceBindingWrapperPassPass(Registry);32  initializeDXILResourceTypeWrapperPassPass(Registry);33  initializeDXILResourceWrapperPassPass(Registry);34  initializeDependenceAnalysisWrapperPassPass(Registry);35  initializeDominanceFrontierWrapperPassPass(Registry);36  initializeDomViewerWrapperPassPass(Registry);37  initializeDomPrinterWrapperPassPass(Registry);38  initializeDomOnlyViewerWrapperPassPass(Registry);39  initializePostDomViewerWrapperPassPass(Registry);40  initializeDomOnlyPrinterWrapperPassPass(Registry);41  initializePostDomPrinterWrapperPassPass(Registry);42  initializePostDomOnlyViewerWrapperPassPass(Registry);43  initializePostDomOnlyPrinterWrapperPassPass(Registry);44  initializeAAResultsWrapperPassPass(Registry);45  initializeGlobalsAAWrapperPassPass(Registry);46  initializeExternalAAWrapperPassPass(Registry);47  initializeImmutableModuleSummaryIndexWrapperPassPass(Registry);48  initializeIVUsersWrapperPassPass(Registry);49  initializeIRSimilarityIdentifierWrapperPassPass(Registry);50  initializeLazyBranchProbabilityInfoPassPass(Registry);51  initializeLazyBFIPassPass(Registry);52  initializeLazyBlockFrequencyInfoPassPass(Registry);53  initializeLazyValueInfoWrapperPassPass(Registry);54  initializeLoopInfoWrapperPassPass(Registry);55  initializeMemoryDependenceWrapperPassPass(Registry);56  initializeModuleSummaryIndexWrapperPassPass(Registry);57  initializeOptimizationRemarkEmitterWrapperPassPass(Registry);58  initializePhiValuesWrapperPassPass(Registry);59  initializePostDominatorTreeWrapperPassPass(Registry);60  initializeProfileSummaryInfoWrapperPassPass(Registry);61  initializeRegionInfoPassPass(Registry);62  initializeRegionViewerPass(Registry);63  initializeRegionPrinterPass(Registry);64  initializeRegionOnlyViewerPass(Registry);65  initializeRegionOnlyPrinterPass(Registry);66  initializeRuntimeLibraryInfoWrapperPass(Registry);67  initializeSCEVAAWrapperPassPass(Registry);68  initializeScalarEvolutionWrapperPassPass(Registry);69  initializeStackSafetyGlobalInfoWrapperPassPass(Registry);70  initializeStackSafetyInfoWrapperPassPass(Registry);71  initializeTargetLibraryInfoWrapperPassPass(Registry);72  initializeTargetTransformInfoWrapperPassPass(Registry);73  initializeTypeBasedAAWrapperPassPass(Registry);74  initializeScopedNoAliasAAWrapperPassPass(Registry);75  initializeStaticDataProfileInfoWrapperPassPass(Registry);76  initializeLCSSAVerificationPassPass(Registry);77  initializeMemorySSAWrapperPassPass(Registry);78  initializeUniformityInfoWrapperPassPass(Registry);79}80 81LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action,82                          char **OutMessages) {83  raw_ostream *DebugOS = Action != LLVMReturnStatusAction ? &errs() : nullptr;84  std::string Messages;85  raw_string_ostream MsgsOS(Messages);86 87  LLVMBool Result = verifyModule(*unwrap(M), OutMessages ? &MsgsOS : DebugOS);88 89  // Duplicate the output to stderr.90  if (DebugOS && OutMessages)91    *DebugOS << MsgsOS.str();92 93  if (Action == LLVMAbortProcessAction && Result)94    report_fatal_error("Broken module found, compilation aborted!");95 96  if (OutMessages)97    *OutMessages = strdup(MsgsOS.str().c_str());98 99  return Result;100}101 102LLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action) {103  LLVMBool Result = verifyFunction(104      *unwrap<Function>(Fn), Action != LLVMReturnStatusAction ? &errs()105                                                              : nullptr);106 107  if (Action == LLVMAbortProcessAction && Result)108    report_fatal_error("Broken function found, compilation aborted!");109 110  return Result;111}112 113void LLVMViewFunctionCFG(LLVMValueRef Fn) {114  Function *F = unwrap<Function>(Fn);115  F->viewCFG();116}117 118void LLVMViewFunctionCFGOnly(LLVMValueRef Fn) {119  Function *F = unwrap<Function>(Fn);120  F->viewCFGOnly();121}122