Jlm
Loading...
Searching...
No Matches
Trace.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_IR_TRACE_HPP
7#define JLM_LLVM_IR_TRACE_HPP
8
10#include <jlm/rvsdg/node.hpp>
11#include <jlm/rvsdg/Trace.hpp>
12
13#include <optional>
14
15namespace jlm::llvm
16{
17
19{
20public:
21 explicit OutputTracer(bool enableCaching);
22
28 bool
33
38 void
39 setTraceThroughLoadedStates(bool traceThroughLoadedStates)
40 {
41 traceThroughLoadedStates_ = traceThroughLoadedStates;
42 }
43
44protected:
45 [[nodiscard]] rvsdg::Output &
46 traceStep(rvsdg::Output & output, const rvsdg::Region * withinRegion) override;
47
48private:
50};
51
64traceOutput(rvsdg::Output & output, const rvsdg::Region * withinRegion = nullptr);
65
66inline const rvsdg::Output &
67traceOutput(const rvsdg::Output & output, const rvsdg::Region * withinRegion = nullptr)
68{
69 return llvm::traceOutput(const_cast<rvsdg::Output &>(output), withinRegion);
70}
71
79std::optional<int64_t>
81
94{
98 [[nodiscard]] std::optional<int64_t>
99 getOffsetInBytes() const noexcept;
100
101 const rvsdg::Output * BasePointer = nullptr;
102 std::optional<std::vector<GetElementPtrOperation::Constant>> gepConstants{};
103};
104
115[[nodiscard]] TracedPointerOrigin
117
122{
128 std::unordered_map<const rvsdg::Output *, std::optional<int64_t>> AllTracedOutputs{};
129
135 std::unordered_map<const rvsdg::Output *, std::optional<int64_t>> TopOrigins{};
136};
137
150[[nodiscard]] bool
152 TracedPointerOrigin p,
153 TraceCollection & traceCollection,
154 size_t maxTraceCollectionSize);
155
156}
157
158#endif // JLM_LLVM_IR_TRACE_HPP
bool isTracingThroughLoadedStates()
Definition Trace.hpp:29
void setTraceThroughLoadedStates(bool traceThroughLoadedStates)
Definition Trace.hpp:39
rvsdg::Output & traceStep(rvsdg::Output &output, const rvsdg::Region *withinRegion) override
Definition Trace.cpp:32
Represent acyclic RVSDG subgraphs.
Definition region.hpp:213
Global memory state passed between functions.
bool TraceAllPointerOrigins(TracedPointerOrigin p, TraceCollection &traceCollection, const size_t maxTraceCollectionSize)
Definition Trace.cpp:326
rvsdg::Output & traceOutput(rvsdg::Output &output, const rvsdg::Region *withinRegion)
Definition Trace.cpp:62
TracedPointerOrigin TracePointerOriginPrecise(const rvsdg::Output &p)
Definition Trace.cpp:153
std::optional< int64_t > tryGetConstantSignedInteger(const rvsdg::Output &output)
Definition Trace.cpp:70
std::unordered_map< const rvsdg::Output *, std::optional< int64_t > > TopOrigins
Definition Trace.hpp:135
std::unordered_map< const rvsdg::Output *, std::optional< int64_t > > AllTracedOutputs
Definition Trace.hpp:128
std::optional< std::vector< GetElementPtrOperation::Constant > > gepConstants
Definition Trace.hpp:102
const rvsdg::Output * BasePointer
Definition Trace.hpp:101
std::optional< int64_t > getOffsetInBytes() const noexcept
Definition Trace.cpp:138