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();
22
28 [[nodiscard]] bool
30 {
32 }
33
39 [[nodiscard]] bool
41 {
43 }
44
49 void
50 setTraceThroughLoadedStates(const bool traceThroughLoadedStates)
51 {
52 traceThroughLoadedStates_ = traceThroughLoadedStates;
53 }
54
59 void
60 setTracingThroughHoistBarriers(const bool traceThroughHoistBarriers)
61 {
62 traceThroughHoistBarriers_ = traceThroughHoistBarriers;
63 }
64
65protected:
66 [[nodiscard]] TraceStepResult
67 traceStep(rvsdg::Output & output, BackEdgeState backEdgeState, const rvsdg::Region * withinRegion)
68 override;
69
70private:
73};
74
89 rvsdg::Output & output,
90 bool mayEnterSubregions,
91 const rvsdg::Region * withinRegion = nullptr);
92
93inline const rvsdg::Output &
95 const rvsdg::Output & output,
96 bool mayEnterSubregions,
97 const rvsdg::Region * withinRegion = nullptr)
98{
99 return llvm::traceOutput(const_cast<rvsdg::Output &>(output), mayEnterSubregions, withinRegion);
100}
101
109std::optional<int64_t>
111
124{
128 [[nodiscard]] std::optional<int64_t>
129 getOffsetInBytes() const noexcept;
130
131 const rvsdg::Output * BasePointer = nullptr;
132 std::optional<std::vector<GetElementPtrOperation::Constant>> gepConstants{};
133};
134
145[[nodiscard]] TracedPointerOrigin
147
152{
158 std::unordered_map<const rvsdg::Output *, std::optional<int64_t>> AllTracedOutputs{};
159
165 std::unordered_map<const rvsdg::Output *, std::optional<int64_t>> TopOrigins{};
166};
167
180[[nodiscard]] bool
182 TracedPointerOrigin p,
183 TraceCollection & traceCollection,
184 size_t maxTraceCollectionSize);
185
186}
187
188#endif // JLM_LLVM_IR_TRACE_HPP
bool isTracingThroughHoistBarriers() const noexcept
Definition Trace.hpp:40
bool isTracingThroughLoadedStates() const noexcept
Definition Trace.hpp:29
bool traceThroughHoistBarriers_
Definition Trace.hpp:72
void setTracingThroughHoistBarriers(const bool traceThroughHoistBarriers)
Definition Trace.hpp:60
TraceStepResult traceStep(rvsdg::Output &output, BackEdgeState backEdgeState, const rvsdg::Region *withinRegion) override
Definition Trace.cpp:32
void setTraceThroughLoadedStates(const bool traceThroughLoadedStates)
Definition Trace.hpp:50
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:353
rvsdg::Output & traceOutput(rvsdg::Output &output, bool mayEnterSubregions, const rvsdg::Region *withinRegion)
Definition Trace.cpp:84
TracedPointerOrigin TracePointerOriginPrecise(const rvsdg::Output &p)
Definition Trace.cpp:180
std::optional< int64_t > tryGetConstantSignedInteger(const rvsdg::Output &output)
Definition Trace.cpp:97
std::unordered_map< const rvsdg::Output *, std::optional< int64_t > > TopOrigins
Definition Trace.hpp:165
std::unordered_map< const rvsdg::Output *, std::optional< int64_t > > AllTracedOutputs
Definition Trace.hpp:158
std::optional< std::vector< GetElementPtrOperation::Constant > > gepConstants
Definition Trace.hpp:132
const rvsdg::Output * BasePointer
Definition Trace.hpp:131
std::optional< int64_t > getOffsetInBytes() const noexcept
Definition Trace.cpp:165