diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Analysis/Analysis.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Analysis/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | llvm/lib/Analysis/StackSafetyAnalysis.cpp | 60 | ||||
| -rw-r--r-- | llvm/lib/Passes/PassBuilder.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Passes/PassRegistry.def | 2 | 
5 files changed, 66 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/Analysis.cpp b/llvm/lib/Analysis/Analysis.cpp index 49b1bdb2e77..ec8e9ad7e67 100644 --- a/llvm/lib/Analysis/Analysis.cpp +++ b/llvm/lib/Analysis/Analysis.cpp @@ -77,6 +77,7 @@ void llvm::initializeAnalysis(PassRegistry &Registry) {    initializeRegionOnlyPrinterPass(Registry);    initializeSCEVAAWrapperPassPass(Registry);    initializeScalarEvolutionWrapperPassPass(Registry); +  initializeStackSafetyInfoWrapperPassPass(Registry);    initializeTargetTransformInfoWrapperPassPass(Registry);    initializeTypeBasedAAWrapperPassPass(Registry);    initializeScopedNoAliasAAWrapperPassPass(Registry); diff --git a/llvm/lib/Analysis/CMakeLists.txt b/llvm/lib/Analysis/CMakeLists.txt index c33e2a88127..c57d8ef69d6 100644 --- a/llvm/lib/Analysis/CMakeLists.txt +++ b/llvm/lib/Analysis/CMakeLists.txt @@ -81,6 +81,7 @@ add_llvm_library(LLVMAnalysis    ScalarEvolutionAliasAnalysis.cpp    ScalarEvolutionExpander.cpp    ScalarEvolutionNormalization.cpp +  StackSafetyAnalysis.cpp    SyncDependenceAnalysis.cpp    SyntheticCountsUtils.cpp    TargetLibraryInfo.cpp diff --git a/llvm/lib/Analysis/StackSafetyAnalysis.cpp b/llvm/lib/Analysis/StackSafetyAnalysis.cpp new file mode 100644 index 00000000000..3491242ff22 --- /dev/null +++ b/llvm/lib/Analysis/StackSafetyAnalysis.cpp @@ -0,0 +1,60 @@ +//===- StackSafetyAnalysis.cpp - Stack memory safety analysis -------------===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +//===----------------------------------------------------------------------===// + +#include "llvm/Analysis/StackSafetyAnalysis.h" + +#include "llvm/Analysis/ScalarEvolutionExpressions.h" +#include "llvm/Support/raw_ostream.h" + +using namespace llvm; + +#define DEBUG_TYPE "stack-safety" + +AnalysisKey StackSafetyAnalysis::Key; + +void StackSafetyInfo::print(raw_ostream &O) const { O << "Not Implemented\n"; } + +StackSafetyInfo StackSafetyAnalysis::run(Function &F, +                                         FunctionAnalysisManager &AM) { +  return StackSafetyInfo(); +} + +PreservedAnalyses StackSafetyPrinterPass::run(Function &F, +                                              FunctionAnalysisManager &AM) { +  OS << "'Stack Safety Local Analysis' for function '" << F.getName() << "'\n"; +  AM.getResult<StackSafetyAnalysis>(F).print(OS); +  return PreservedAnalyses::all(); +} + +char StackSafetyInfoWrapperPass::ID = 0; + +StackSafetyInfoWrapperPass::StackSafetyInfoWrapperPass() : FunctionPass(ID) { +  initializeStackSafetyInfoWrapperPassPass(*PassRegistry::getPassRegistry()); +} + +void StackSafetyInfoWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const { +  AU.addRequired<ScalarEvolutionWrapperPass>(); +  AU.setPreservesAll(); +} + +void StackSafetyInfoWrapperPass::print(raw_ostream &O, const Module *M) const { +  SSI.print(O); +} + +bool StackSafetyInfoWrapperPass::runOnFunction(Function &F) { return false; } + +static const char LocalPassArg[] = "stack-safety-local"; +static const char LocalPassName[] = "Stack Safety Local Analysis"; +INITIALIZE_PASS_BEGIN(StackSafetyInfoWrapperPass, LocalPassArg, LocalPassName, +                      false, true) +INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass) +INITIALIZE_PASS_END(StackSafetyInfoWrapperPass, LocalPassArg, LocalPassName, +                    false, true) diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 6ad1e4bca91..35ed0ace647 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -48,6 +48,7 @@  #include "llvm/Analysis/ScalarEvolution.h"  #include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"  #include "llvm/Analysis/ScopedNoAliasAA.h" +#include "llvm/Analysis/StackSafetyAnalysis.h"  #include "llvm/Analysis/TargetLibraryInfo.h"  #include "llvm/Analysis/TargetTransformInfo.h"  #include "llvm/Analysis/TypeBasedAliasAnalysis.h" @@ -62,7 +63,6 @@  #include "llvm/Support/Regex.h"  #include "llvm/Target/TargetMachine.h"  #include "llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h" -#include "llvm/Transforms/Instrumentation/CGProfile.h"  #include "llvm/Transforms/IPO/AlwaysInliner.h"  #include "llvm/Transforms/IPO/ArgumentPromotion.h"  #include "llvm/Transforms/IPO/CalledValuePropagation.h" @@ -89,6 +89,7 @@  #include "llvm/Transforms/IPO/WholeProgramDevirt.h"  #include "llvm/Transforms/InstCombine/InstCombine.h"  #include "llvm/Transforms/Instrumentation/BoundsChecking.h" +#include "llvm/Transforms/Instrumentation/CGProfile.h"  #include "llvm/Transforms/Instrumentation/ControlHeightReduction.h"  #include "llvm/Transforms/Instrumentation/GCOVProfiler.h"  #include "llvm/Transforms/Instrumentation/InstrProfiling.h" diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def index b444e8c5c31..5189381a472 100644 --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -120,6 +120,7 @@ FUNCTION_ANALYSIS("regions", RegionInfoAnalysis())  FUNCTION_ANALYSIS("no-op-function", NoOpFunctionAnalysis())  FUNCTION_ANALYSIS("opt-remark-emit", OptimizationRemarkEmitterAnalysis())  FUNCTION_ANALYSIS("scalar-evolution", ScalarEvolutionAnalysis()) +FUNCTION_ANALYSIS("stack-safety-local", StackSafetyAnalysis())  FUNCTION_ANALYSIS("targetlibinfo", TargetLibraryAnalysis())  FUNCTION_ANALYSIS("targetir",                    TM ? TM->getTargetIRAnalysis() : TargetIRAnalysis()) @@ -204,6 +205,7 @@ FUNCTION_PASS("print<memoryssa>", MemorySSAPrinterPass(dbgs()))  FUNCTION_PASS("print<phi-values>", PhiValuesPrinterPass(dbgs()))  FUNCTION_PASS("print<regions>", RegionInfoPrinterPass(dbgs()))  FUNCTION_PASS("print<scalar-evolution>", ScalarEvolutionPrinterPass(dbgs())) +FUNCTION_PASS("print<stack-safety-local>", StackSafetyPrinterPass(dbgs()))  FUNCTION_PASS("reassociate", ReassociatePass())  FUNCTION_PASS("scalarizer", ScalarizerPass())  FUNCTION_PASS("sccp", SCCPPass())  | 

