Jlm
Loading...
Searching...
No Matches
jlm
llvm
opt
alias-analyses
AliasAnalysis.cpp
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
#include <
jlm/llvm/ir/operators/IntegerOperations.hpp
>
7
#include <
jlm/llvm/ir/operators/IOBarrier.hpp
>
8
#include <
jlm/llvm/opt/alias-analyses/AliasAnalysis.hpp
>
9
#include <
jlm/rvsdg/bitstring/constant.hpp
>
10
#include <
jlm/rvsdg/lambda.hpp
>
11
#include <
jlm/rvsdg/Phi.hpp
>
12
#include <
jlm/rvsdg/theta.hpp
>
13
14
namespace
jlm::llvm::aa
15
{
16
17
AliasAnalysis::AliasAnalysis
() =
default
;
18
19
AliasAnalysis::~AliasAnalysis
() noexcept = default;
20
30
static
bool
31
AreAliasResponsesCompatible
(
32
AliasAnalysis
::AliasQueryResponse a,
33
AliasAnalysis
::AliasQueryResponse b)
34
{
35
if
(a ==
AliasAnalysis::NoAlias
)
36
return
b !=
AliasAnalysis::MustAlias
;
37
if
(a ==
AliasAnalysis::MayAlias
)
38
return
true
;
39
if
(a ==
AliasAnalysis::MustAlias
)
40
return
b !=
AliasAnalysis::NoAlias
;
41
JLM_UNREACHABLE
(
"Unknown alias response"
);
42
}
43
44
ChainedAliasAnalysis::ChainedAliasAnalysis
(
45
std::shared_ptr<AliasAnalysis> first,
46
std::shared_ptr<AliasAnalysis> second)
47
: First_(std::move(first)),
48
Second_(std::move(second))
49
{}
50
51
ChainedAliasAnalysis::~ChainedAliasAnalysis
() noexcept = default;
52
53
AliasAnalysis
::AliasQueryResponse
54
ChainedAliasAnalysis
::Query(
55
const rvsdg::Output & p1,
56
size_t
s1,
57
const rvsdg::Output & p2,
58
size_t
s2)
59
{
60
const
auto
firstResponse = First_->
Query
(p1, s1, p2, s2);
61
if
(firstResponse == MayAlias)
62
return
Second_->Query(p1, s1, p2, s2);
63
64
// When building with asserts, always query the second analysis and double check
65
JLM_ASSERT
(
AreAliasResponsesCompatible
(firstResponse, Second_->Query(p1, s1, p2, s2)));
66
return
firstResponse;
67
}
68
69
std::string
70
ChainedAliasAnalysis::ToString
()
const
71
{
72
return
util::strfmt
(
"ChainedAA("
,
First_
->ToString(),
","
,
Second_
->ToString(),
")"
);
73
}
74
75
bool
76
IsPointerCompatible
(
const
rvsdg::Output
& value)
77
{
78
return
IsOrContains<PointerType>(*value.
Type
());
79
}
80
81
}
AliasAnalysis.hpp
IOBarrier.hpp
IntegerOperations.hpp
Phi.hpp
jlm::llvm::aa::AliasAnalysis
Definition
AliasAnalysis.hpp:26
jlm::llvm::aa::AliasAnalysis::~AliasAnalysis
virtual ~AliasAnalysis() noexcept
jlm::llvm::aa::AliasAnalysis::NoAlias
@ NoAlias
Definition
AliasAnalysis.hpp:34
jlm::llvm::aa::AliasAnalysis::MustAlias
@ MustAlias
Definition
AliasAnalysis.hpp:40
jlm::llvm::aa::AliasAnalysis::MayAlias
@ MayAlias
Definition
AliasAnalysis.hpp:37
jlm::llvm::aa::AliasAnalysis::AliasAnalysis
AliasAnalysis()
jlm::llvm::aa::ChainedAliasAnalysis
Definition
AliasAnalysis.hpp:70
jlm::llvm::aa::ChainedAliasAnalysis::First_
std::shared_ptr< AliasAnalysis > First_
Definition
AliasAnalysis.hpp:83
jlm::llvm::aa::ChainedAliasAnalysis::ToString
std::string ToString() const override
Definition
AliasAnalysis.cpp:70
jlm::llvm::aa::ChainedAliasAnalysis::Second_
std::shared_ptr< AliasAnalysis > Second_
Definition
AliasAnalysis.hpp:84
jlm::llvm::aa::ChainedAliasAnalysis::Query
AliasQueryResponse Query(const rvsdg::Output &p1, size_t s1, const rvsdg::Output &p2, size_t s2) override
Definition
AliasAnalysis.cpp:54
jlm::llvm::aa::ChainedAliasAnalysis::ChainedAliasAnalysis
ChainedAliasAnalysis(std::shared_ptr< AliasAnalysis > first, std::shared_ptr< AliasAnalysis > second)
Definition
AliasAnalysis.cpp:44
jlm::llvm::aa::ChainedAliasAnalysis::~ChainedAliasAnalysis
~ChainedAliasAnalysis() noexcept override
jlm::rvsdg::Output
Definition
node.hpp:246
jlm::rvsdg::Output::Type
const std::shared_ptr< const rvsdg::Type > & Type() const noexcept
Definition
node.hpp:366
JLM_ASSERT
#define JLM_ASSERT(x)
Definition
common.hpp:16
JLM_UNREACHABLE
#define JLM_UNREACHABLE(msg)
Definition
common.hpp:43
constant.hpp
jlm::llvm::aa
Definition
AgnosticModRefSummarizer.cpp:23
jlm::llvm::aa::AreAliasResponsesCompatible
static bool AreAliasResponsesCompatible(AliasAnalysis::AliasQueryResponse a, AliasAnalysis::AliasQueryResponse b)
Definition
AliasAnalysis.cpp:31
jlm::llvm::aa::IsPointerCompatible
bool IsPointerCompatible(const rvsdg::Output &value)
Definition
AliasAnalysis.cpp:76
jlm::util::strfmt
static std::string strfmt(Args... args)
Definition
strfmt.hpp:35
lambda.hpp
theta.hpp
Generated by
1.9.8