Jlm
Loading...
Searching...
No Matches
LocalAliasAnalysis.hpp
Go to the documentation of this file.
1/*
2 * Copyright 2025 HÃ¥vard Krogstie <krogstie.havard@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
6#ifndef JLM_LLVM_OPT_ALIAS_ANALYSES_LOCALALIASANALYSIS_HPP
7#define JLM_LLVM_OPT_ALIAS_ANALYSES_LOCALALIASANALYSIS_HPP
8
11
12#include <optional>
13#include <unordered_map>
14
15namespace jlm::llvm::aa
16{
26{
27
28public:
30
31 ~LocalAliasAnalysis() noexcept override;
32
38 size_t
40
46 void
47 setMaxTraceCollectionSize(size_t maxTraceCollectionSize);
48
49 std::string
50 ToString() const override;
51
53 Query(const rvsdg::Output & p1, size_t s1, const rvsdg::Output & p2, size_t s2) override;
54
55private:
67 [[nodiscard]] static AliasQueryResponse
69 std::optional<int64_t> offset1,
70 size_t s1,
71 std::optional<int64_t> offset2,
72 size_t s2);
73
86 [[nodiscard]] static bool
87 IsOriginalOrigin(const rvsdg::Output & pointer);
88
95 [[nodiscard]] static bool
97
104 [[nodiscard]] static std::optional<size_t>
105 GetOriginalOriginSize(const rvsdg::Output & pointer);
106
122 [[nodiscard]] static std::optional<size_t>
123 GetRemainingSize(const rvsdg::Output & basePointer, const std::optional<int64_t> & offsetInBytes);
124
142 static void
144
154 [[nodiscard]] static size_t
156
163 static void
165
175 static void
176 RemoveTopOriginsWithinTheFirstNBytes(TraceCollection & traces, size_t s, size_t N);
177
190 [[nodiscard]] static bool
191 DoTraceCollectionsOverlap(TraceCollection & tc1, size_t s1, TraceCollection & tc2, size_t s2);
192
199 [[nodiscard]] static bool
200 hasOnlyAllocaTopOrigins(const TraceCollection & traceCollection);
201
206 static void
207 removeArgumentTopOrigins(TraceCollection & traceCollection);
208
226 [[nodiscard]] bool
227 IsOriginalOriginFullyTraceable(const rvsdg::Output & pointer);
228
234 [[nodiscard]] bool
236
242
247 std::unordered_map<const rvsdg::Output *, bool> IsFullyTraceable_;
248};
249
250}
251
252#endif // JLM_LLVM_OPT_ALIAS_ANALYSES_LOCALALIASANALYSIS_HPP
static void RemoveTopOriginsWithinTheFirstNBytes(TraceCollection &traces, size_t s, size_t N)
static bool IsOriginalOrigin(const rvsdg::Output &pointer)
~LocalAliasAnalysis() noexcept override
static bool hasOnlyAllocaTopOrigins(const TraceCollection &traceCollection)
bool HasOnlyFullyTraceableTopOrigins(TraceCollection &traces)
AliasQueryResponse Query(const rvsdg::Output &p1, size_t s1, const rvsdg::Output &p2, size_t s2) override
static std::optional< size_t > GetRemainingSize(const rvsdg::Output &basePointer, const std::optional< int64_t > &offsetInBytes)
std::string ToString() const override
static void removeArgumentTopOrigins(TraceCollection &traceCollection)
std::unordered_map< const rvsdg::Output *, bool > IsFullyTraceable_
static bool DoTraceCollectionsOverlap(TraceCollection &tc1, size_t s1, TraceCollection &tc2, size_t s2)
static void RemoveTopOriginsSmallerThanSize(TraceCollection &traces, size_t s)
void setMaxTraceCollectionSize(size_t maxTraceCollectionSize)
static bool HasOnlyOriginalTopOrigins(TraceCollection &traces)
static size_t GetMinimumOffsetFromStart(TraceCollection &traces)
bool IsOriginalOriginFullyTraceable(const rvsdg::Output &pointer)
static void RemoveTopOriginsWithRemainingSizeBelow(TraceCollection &traces, size_t s)
static AliasQueryResponse QueryOffsets(std::optional< int64_t > offset1, size_t s1, std::optional< int64_t > offset2, size_t s2)
static std::optional< size_t > GetOriginalOriginSize(const rvsdg::Output &pointer)