mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-23 15:29:51 +00:00
bf301d5670
This provides an implementation of CFL alias analysis (including some supporting data structures). Currently, we don't have any extremely fancy features, sans some interprocedural analysis (i.e. no field sensitivity, etc.), and we do best sitting behind BasicAA + TBAA. In such a configuration, we take ~0.6-0.8% of total compile time, and give ~7-8% NoAlias responses to queries TBAA and BasicAA couldn't answer when bootstrapping LLVM. In testing this on other projects, we've seen up to 10.5% of queries dropped by BasicAA+TBAA answered with NoAlias by this algorithm. Patch by George Burgess IV (with minor modifications by me -- mostly adapting some BasicAA tests), thanks! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216970 91177308-0d34-0410-b5e6-96231b3b80d8
166 lines
5.6 KiB
C++
166 lines
5.6 KiB
C++
//===-- llvm/Analysis/Passes.h - Constructors for analyses ------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This header file defines prototypes for accessor functions that expose passes
|
|
// in the analysis libraries.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_ANALYSIS_PASSES_H
|
|
#define LLVM_ANALYSIS_PASSES_H
|
|
|
|
namespace llvm {
|
|
class FunctionPass;
|
|
class ImmutablePass;
|
|
class LoopPass;
|
|
class ModulePass;
|
|
class Pass;
|
|
class PassInfo;
|
|
class LibCallInfo;
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createGlobalsModRefPass - This pass provides alias and mod/ref info for
|
|
// global values that do not have their addresses taken.
|
|
//
|
|
Pass *createGlobalsModRefPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createAliasDebugger - This pass helps debug clients of AA
|
|
//
|
|
Pass *createAliasDebugger();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createAliasAnalysisCounterPass - This pass counts alias queries and how the
|
|
// alias analysis implementation responds.
|
|
//
|
|
ModulePass *createAliasAnalysisCounterPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createAAEvalPass - This pass implements a simple N^2 alias analysis
|
|
// accuracy evaluator.
|
|
//
|
|
FunctionPass *createAAEvalPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createNoAAPass - This pass implements a "I don't know" alias analysis.
|
|
//
|
|
ImmutablePass *createNoAAPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createBasicAliasAnalysisPass - This pass implements the stateless alias
|
|
// analysis.
|
|
//
|
|
ImmutablePass *createBasicAliasAnalysisPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createCFLAliasAnalysisPass - This pass implements a set-based approach to
|
|
// alias analysis.
|
|
//
|
|
ImmutablePass *createCFLAliasAnalysisPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
/// createLibCallAliasAnalysisPass - Create an alias analysis pass that knows
|
|
/// about the semantics of a set of libcalls specified by LCI. The newly
|
|
/// constructed pass takes ownership of the pointer that is provided.
|
|
///
|
|
FunctionPass *createLibCallAliasAnalysisPass(LibCallInfo *LCI);
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createScalarEvolutionAliasAnalysisPass - This pass implements a simple
|
|
// alias analysis using ScalarEvolution queries.
|
|
//
|
|
FunctionPass *createScalarEvolutionAliasAnalysisPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createTypeBasedAliasAnalysisPass - This pass implements metadata-based
|
|
// type-based alias analysis.
|
|
//
|
|
ImmutablePass *createTypeBasedAliasAnalysisPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createScopedNoAliasAAPass - This pass implements metadata-based
|
|
// scoped noalias analysis.
|
|
//
|
|
ImmutablePass *createScopedNoAliasAAPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createObjCARCAliasAnalysisPass - This pass implements ObjC-ARC-based
|
|
// alias analysis.
|
|
//
|
|
ImmutablePass *createObjCARCAliasAnalysisPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
/// createLazyValueInfoPass - This creates an instance of the LazyValueInfo
|
|
/// pass.
|
|
FunctionPass *createLazyValueInfoPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createDependenceAnalysisPass - This creates an instance of the
|
|
// DependenceAnalysis pass.
|
|
//
|
|
FunctionPass *createDependenceAnalysisPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createCostModelAnalysisPass - This creates an instance of the
|
|
// CostModelAnalysis pass.
|
|
//
|
|
FunctionPass *createCostModelAnalysisPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createDelinearizationPass - This pass implements attempts to restore
|
|
// multidimensional array indices from linearized expressions.
|
|
//
|
|
FunctionPass *createDelinearizationPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// Minor pass prototypes, allowing us to expose them through bugpoint and
|
|
// analyze.
|
|
FunctionPass *createInstCountPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createRegionInfoPass - This pass finds all single entry single exit regions
|
|
// in a function and builds the region hierarchy.
|
|
//
|
|
FunctionPass *createRegionInfoPass();
|
|
|
|
// Print module-level debug info metadata in human-readable form.
|
|
ModulePass *createModuleDebugInfoPrinterPass();
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
//
|
|
// createMemDepPrinter - This pass exhaustively collects all memdep
|
|
// information and prints it with -analyze.
|
|
//
|
|
FunctionPass *createMemDepPrinter();
|
|
|
|
// createJumpInstrTableInfoPass - This creates a pass that stores information
|
|
// about the jump tables created by JumpInstrTables
|
|
ImmutablePass *createJumpInstrTableInfoPass();
|
|
}
|
|
|
|
#endif
|