MCPcopy Create free account
hub / github.com/Samsung/UTopia / ArrayAnalyzer

Class ArrayAnalyzer

include/ftg/propanalysis/ArrayAnalyzer.h:12–42  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10namespace ftg {
11
12class ArrayAnalyzer : public ArgFlowAnalyzer {
13
14public:
15 ArrayAnalyzer(IndCallSolverMgr *Solver,
16 std::vector<const llvm::Function *> Funcs,
17 llvm::FunctionAnalysisManager &FAM,
18 const ArrayAnalysisReport *PreReport = nullptr);
19
20 std::unique_ptr<AnalyzerReport> getReport() override;
21 const ArrayAnalysisReport &result() const;
22
23private:
24 llvm::FunctionAnalysisManager &FAM;
25 std::unique_ptr<ArrayAnalysisReport> Report;
26
27 void analyzeProperty(llvm::Argument &A) override;
28 void analyzeArray(llvm::Argument &A);
29 void analyzeArrayLen(llvm::Instruction &I, ArgFlow &AF);
30 llvm::Value *getTrackingVariable(llvm::Loop &L);
31 llvm::Value *getRelatedIndV(llvm::Loop &L, llvm::ScalarEvolution &SEA);
32 void handleStackFrame(StackFrame &Frame, std::stack<StackFrame> &DefUseChains,
33 std::set<llvm::Value *> &VisitedNodes);
34 void handleUser(StackFrame &Frame, llvm::Value &User,
35 std::stack<StackFrame> &DefUseChains,
36 std::set<llvm::Value *> &VisitedNodes);
37 bool updateArgFlow(llvm::Argument &A);
38 void updateFieldFlow(ArgFlow &AF, std::vector<int> Indices = {});
39 void updateDefault(const llvm::Module &M);
40 void updateDefault(const llvm::Function &F,
41 const std::map<unsigned, int> &Values);
42};
43
44} // namespace ftg
45

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected