|
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 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 1633 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 1531 of file Andersen.cpp.
|
private |
Definition at line 742 of file Andersen.cpp.
|
private |
Definition at line 847 of file Andersen.cpp.
|
private |
Definition at line 866 of file Andersen.cpp.
|
private |
Definition at line 809 of file Andersen.cpp.
|
private |
Definition at line 1029 of file Andersen.cpp.
|
private |
Definition at line 984 of file Andersen.cpp.
|
private |
Definition at line 892 of file Andersen.cpp.
|
private |
Definition at line 1006 of file Andersen.cpp.
|
private |
Definition at line 1221 of file Andersen.cpp.
|
private |
Definition at line 1080 of file Andersen.cpp.
|
private |
Definition at line 932 of file Andersen.cpp.
|
private |
Definition at line 1131 of file Andersen.cpp.
|
private |
Definition at line 1306 of file Andersen.cpp.
|
private |
Definition at line 832 of file Andersen.cpp.
|
private |
Definition at line 1043 of file Andersen.cpp.
|
private |
Definition at line 1146 of file Andersen.cpp.
|
private |
Definition at line 1188 of file Andersen.cpp.
|
private |
Definition at line 768 of file Andersen.cpp.
|
private |
Definition at line 755 of file Andersen.cpp.
|
private |
Definition at line 949 of file Andersen.cpp.
|
private |
Definition at line 971 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 1474 of file Andersen.cpp.
|
private |
Definition at line 1260 of file Andersen.cpp.
|
private |
Definition at line 1116 of file Andersen.cpp.
|
private |
Definition at line 918 of file Andersen.cpp.
|
private |
Definition at line 880 of file Andersen.cpp.
|
private |
Definition at line 1386 of file Andersen.cpp.
|
private |
Definition at line 1420 of file Andersen.cpp.
|
private |
Definition at line 625 of file Andersen.cpp.
|
private |
Definition at line 789 of file Andersen.cpp.
|
private |
Definition at line 1161 of file Andersen.cpp.
|
private |
Definition at line 1343 of file Andersen.cpp.
|
private |
Definition at line 904 of file Andersen.cpp.
|
private |
Definition at line 1095 of file Andersen.cpp.
|
static |
Definition at line 1735 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 1640 of file Andersen.cpp.
| const Andersen::Configuration & jlm::llvm::aa::Andersen::GetConfiguration | ( | ) | const |
Definition at line 1468 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 1462 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 1485 of file Andersen.cpp.
|
private |
Definition at line 466 of file Andersen.hpp.
|
private |
Definition at line 469 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 468 of file Andersen.hpp.