VapourSynth-llvmexpr
Loading...
Searching...
No Matches
RelAccessAnalysisPass.cpp
Go to the documentation of this file.
1
19
23
24#include <set>
25
26namespace analysis {
27
29RelAccessAnalysisPass::run(const std::vector<Token>& tokens,
30 AnalysisManager& am) {
33
34 std::set<RelYAccess> seen;
35 for (const auto& token : tokens) {
36 if (token.type == TokenType::ClipRel) {
37 const auto& payload =
38 std::get<TokenPayloadClipAccess>(token.payload);
39 bool use_mirror =
40 payload.has_mode ? payload.use_mirror : result.mirror_boundary;
41 RelYAccess access{.clip_idx = payload.clip_idx,
42 .rel_y = payload.rel_y,
43 .use_mirror = use_mirror};
44 if (!seen.contains(access)) {
45 seen.insert(access);
46 result.unique_rel_y_accesses.push_back(access);
47 }
48 result.min_rel_x = std::min(result.min_rel_x, payload.rel_x);
49 result.max_rel_x = std::max(result.max_rel_x, payload.rel_x);
50 } else if (token.type == TokenType::ClipCur) {
51 const auto& payload =
52 std::get<TokenPayloadClipAccess>(token.payload);
53 RelYAccess access{.clip_idx = payload.clip_idx,
54 .rel_y = 0,
55 .use_mirror = result.mirror_boundary};
56 if (!seen.contains(access)) {
57 seen.insert(access);
58 result.unique_rel_y_accesses.push_back(access);
59 }
60 }
61 }
62 return result;
63}
64
65} // namespace analysis
RelAccessAnalysisResult run(const std::vector< Token > &tokens, AnalysisManager &am) override
std::vector< RelYAccess > unique_rel_y_accesses