|
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. More... | |
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 25 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 1528 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 1426 of file Andersen.cpp.
|
private |
Definition at line 718 of file Andersen.cpp.
|
private |
Definition at line 823 of file Andersen.cpp.
|
private |
Definition at line 842 of file Andersen.cpp.
|
private |
Definition at line 785 of file Andersen.cpp.
|
private |
Definition at line 961 of file Andersen.cpp.
|
private |
Definition at line 916 of file Andersen.cpp.
|
private |
Definition at line 868 of file Andersen.cpp.
|
private |
Definition at line 938 of file Andersen.cpp.
|
private |
Definition at line 1116 of file Andersen.cpp.
|
private |
Definition at line 975 of file Andersen.cpp.
|
private |
Definition at line 1026 of file Andersen.cpp.
|
private |
Definition at line 1201 of file Andersen.cpp.
|
private |
Definition at line 808 of file Andersen.cpp.
|
private |
Definition at line 1041 of file Andersen.cpp.
|
private |
Definition at line 1083 of file Andersen.cpp.
|
private |
Definition at line 744 of file Andersen.cpp.
|
private |
Definition at line 731 of file Andersen.cpp.
|
private |
Definition at line 894 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 1369 of file Andersen.cpp.
|
private |
Definition at line 1155 of file Andersen.cpp.
|
private |
Definition at line 1011 of file Andersen.cpp.
|
private |
Definition at line 856 of file Andersen.cpp.
|
private |
Definition at line 1281 of file Andersen.cpp.
|
private |
Definition at line 1315 of file Andersen.cpp.
|
private |
Definition at line 617 of file Andersen.cpp.
|
private |
Definition at line 765 of file Andersen.cpp.
|
private |
Definition at line 1056 of file Andersen.cpp.
|
private |
Definition at line 1238 of file Andersen.cpp.
|
private |
Definition at line 880 of file Andersen.cpp.
|
private |
Definition at line 990 of file Andersen.cpp.
|
static |
Definition at line 1630 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 1535 of file Andersen.cpp.
| const Andersen::Configuration & jlm::llvm::aa::Andersen::GetConfiguration | ( | ) | const |
Definition at line 1363 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 1357 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 1380 of file Andersen.cpp.
|
private |
Definition at line 455 of file Andersen.hpp.
|
private |
Definition at line 458 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 49 of file Andersen.hpp.
|
inlinestatic |
Environment variable that will trigger dumping the subset graph before and after solving.
Definition at line 54 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 35 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 42 of file Andersen.hpp.
|
private |
Definition at line 457 of file Andersen.hpp.