|
Jlm
|
#include <Andersen.hpp>


Classes | |
| class | Configuration |
| class | Statistics |
Public Member Functions | |
| Andersen () | |
| ~Andersen () noexcept override | |
| Andersen (const Andersen &)=delete | |
| Andersen (Andersen &&)=delete | |
| Andersen & | operator= (const Andersen &)=delete |
| Andersen & | operator= (Andersen &&)=delete |
| void | SetConfiguration (Configuration config) |
| const Configuration & | GetConfiguration () const |
| std::unique_ptr< PointsToGraph > | Analyze (const rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector) override |
| std::unique_ptr< PointsToGraph > | Analyze (const LlvmRvsdgModule &module) |
| Shorthand for Analyze, ignoring collecting any statistics. | |
Public Member Functions inherited from jlm::llvm::aa::PointsToAnalysis | |
| virtual | ~PointsToAnalysis ()=default |
Static Public Member Functions | |
| static std::unique_ptr< PointsToGraph > | ConstructPointsToGraphFromPointerObjectSet (const PointerObjectSet &set, Statistics &statistics) |
| static std::unique_ptr< PointsToGraph > | ConstructPointsToGraphFromPointerObjectSet (const PointerObjectSet &set) |
Static Public Attributes | |
| static const char *const | ENV_TEST_ALL_CONFIGS = "JLM_ANDERSEN_TEST_ALL_CONFIGS" |
| static const char *const | ENV_USE_EXACT_CONFIG = "JLM_ANDERSEN_USE_EXACT_CONFIG" |
| static const char *const | ENV_DOUBLE_CHECK = "JLM_ANDERSEN_DOUBLE_CHECK" |
| static const char *const | ENV_DUMP_SUBSET_GRAPH = "JLM_ANDERSEN_DUMP_SUBSET_GRAPH" |
Static Private Member Functions | |
| static void | SolveConstraints (PointerObjectConstraintSet &constraints, const Configuration &config, Statistics &statistics) |
Private Attributes | |
| Configuration | Config_ = Configuration::DefaultConfiguration() |
| std::unique_ptr< PointerObjectSet > | Set_ = {} |
| std::unique_ptr< PointerObjectConstraintSet > | Constraints_ = {} |
class implementing Andersen's set constraint based pointer analysis, based on the Ph.D. thesis Lars Ole Andersen - Program Analysis and Specialization for the C Programming Language The analysis is inter-procedural, field-insensitive, context-insensitive, flow-insensitive, and uses a static heap model.
Definition at line 24 of file Andersen.hpp.
|
default |
|
overridedefaultnoexcept |
|
delete |
|
delete |
| std::unique_ptr< PointsToGraph > jlm::llvm::aa::Andersen::Analyze | ( | const LlvmRvsdgModule & | module | ) |
Shorthand for Analyze, ignoring collecting any statistics.
Definition at line 1677 of file Andersen.cpp.
|
overridevirtual |
Performs Andersen's alias analysis on the rvsdg module, producing a PointsToGraph describing what memory objects exists, and which values in the rvsdg program may point to them.
| module | the module to analyze |
| statisticsCollector | the collector that will receive pass statistics |
Implements jlm::llvm::aa::PointsToAnalysis.
Definition at line 1575 of file Andersen.cpp.
|
private |
Definition at line 750 of file Andersen.cpp.
|
private |
Definition at line 869 of file Andersen.cpp.
|
private |
Definition at line 888 of file Andersen.cpp.
|
private |
Definition at line 817 of file Andersen.cpp.
|
private |
Definition at line 1073 of file Andersen.cpp.
|
private |
Definition at line 1028 of file Andersen.cpp.
|
private |
Definition at line 914 of file Andersen.cpp.
|
private |
Definition at line 1050 of file Andersen.cpp.
|
private |
Definition at line 1265 of file Andersen.cpp.
|
private |
Definition at line 1124 of file Andersen.cpp.
|
private |
Definition at line 954 of file Andersen.cpp.
|
private |
Definition at line 1175 of file Andersen.cpp.
|
private |
Definition at line 1350 of file Andersen.cpp.
|
private |
Definition at line 840 of file Andersen.cpp.
|
private |
Definition at line 1087 of file Andersen.cpp.
|
private |
Definition at line 1190 of file Andersen.cpp.
|
private |
Definition at line 1232 of file Andersen.cpp.
|
private |
Definition at line 776 of file Andersen.cpp.
|
private |
Definition at line 763 of file Andersen.cpp.
|
private |
Definition at line 971 of file Andersen.cpp.
|
private |
Definition at line 993 of file Andersen.cpp.
|
private |
Definition at line 1015 of file Andersen.cpp.
|
private |
Traverses the given module, and initializes the members Set_ and Constraints_ with PointerObjects and constraints corresponding to the module.
| module | the module to analyze |
| statistics | the Statistics instance used to track info about the analysis |
Definition at line 1518 of file Andersen.cpp.
|
private |
Definition at line 1304 of file Andersen.cpp.
|
private |
Definition at line 1160 of file Andersen.cpp.
|
private |
Definition at line 940 of file Andersen.cpp.
|
private |
Definition at line 855 of file Andersen.cpp.
|
private |
Definition at line 902 of file Andersen.cpp.
|
private |
Definition at line 1430 of file Andersen.cpp.
|
private |
Definition at line 1464 of file Andersen.cpp.
|
private |
Definition at line 625 of file Andersen.cpp.
|
private |
Definition at line 797 of file Andersen.cpp.
|
private |
Definition at line 1205 of file Andersen.cpp.
|
private |
Definition at line 1387 of file Andersen.cpp.
|
private |
Definition at line 926 of file Andersen.cpp.
|
private |
Definition at line 1139 of file Andersen.cpp.
|
static |
Definition at line 1779 of file Andersen.cpp.
|
static |
Converts a PointerObjectSet into PointsToGraph nodes, and points-to-graph set memberships into edges.
In the PointerObjectSet, the PointsToExternal flag encodes pointing to an address available outside the module. This may however be the address of a memory object within the module, that has escaped. In the final PointsToGraph, any node marked as pointing to external, will get an edge to the special "external" node, as well as to every memory object node marked as escaped.
| set | the PointerObjectSet to convert |
| statistics | the statistics instance used to collect statistics about the process |
Definition at line 1684 of file Andersen.cpp.
| const Andersen::Configuration & jlm::llvm::aa::Andersen::GetConfiguration | ( | ) | const |
Definition at line 1512 of file Andersen.cpp.
| void jlm::llvm::aa::Andersen::SetConfiguration | ( | Configuration | config | ) |
Specify the PassConfiguration the Andersen pass should use when analyzing
| config |
Definition at line 1506 of file Andersen.cpp.
|
staticprivate |
Solves the constraint problem using the techniques and solver specified in the given config.
| constraints | the instance of PointerObjectConstraintSet being operated on |
| config | settings for the solving |
| statistics | the Statistics instance used to track info about the analysis |
Definition at line 1529 of file Andersen.cpp.
|
private |
Definition at line 472 of file Andersen.hpp.
|
private |
Definition at line 475 of file Andersen.hpp.
|
inlinestatic |
Environment variable that will trigger double-checking of the analysis. If ENV_TEST_ALL_CONFIGS is set, the output is double-checked against them all. Otherwise, the output is double-checked only against the default naive solver.
Definition at line 48 of file Andersen.hpp.
|
inlinestatic |
Environment variable that will trigger dumping the subset graph before and after solving.
Definition at line 53 of file Andersen.hpp.
|
inlinestatic |
Environment variable that when set, triggers analyzing the program with every single valid combination of Configuration flags. Must be set to a number, that determines how many times each config is used.
Definition at line 34 of file Andersen.hpp.
|
inlinestatic |
Alternative to testing all configs, this environment variable specifies exactly which config to use. It must be an index into the Configuration::GetAllConfigurations() vector. Should likely not be combined with ENV_TEST_ALL_CONFIGS or ENV_DOUBLE_CHECK
Definition at line 41 of file Andersen.hpp.
|
private |
Definition at line 474 of file Andersen.hpp.