About
Contact
QtCreator
KDevelop
Solarized
1
//===-- Analysis.cpp ------------------------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See
https://llvm.org/LICENSE.txt
for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include
"llvm-c/Analysis.h"
10
#include
"llvm/IR/Module.h"
11
#include
"llvm/IR/Verifier.h"
12
#include
"llvm/InitializePasses.h"
13
#include
"llvm/PassRegistry.h"
14
#include
"llvm/Support/raw_ostream.h"
15
#include
<cstring>
16
17
using
namespace
llvm
;
18
19
/// initializeAnalysis - Initialize all passes linked into the Analysis library.
20
void
llvm::
initializeAnalysis
(
PassRegistry
&
Registry
) {
21
initializeBasicAAWrapperPassPass
(
Registry
);
22
initializeBlockFrequencyInfoWrapperPassPass
(
Registry
);
23
initializeBranchProbabilityInfoWrapperPassPass
(
Registry
);
24
initializeCallGraphWrapperPassPass
(
Registry
);
25
initializeCallGraphDOTPrinterPass
(
Registry
);
26
initializeCallGraphViewerPass
(
Registry
);
27
initializeCycleInfoWrapperPassPass
(
Registry
);
28
initializeDependenceAnalysisWrapperPassPass
(
Registry
);
29
initializeDominanceFrontierWrapperPassPass
(
Registry
);
30
initializeDomViewerWrapperPassPass
(
Registry
);
31
initializeDomPrinterWrapperPassPass
(
Registry
);
32
initializeDomOnlyViewerWrapperPassPass
(
Registry
);
33
initializePostDomViewerWrapperPassPass
(
Registry
);
34
initializeDomOnlyPrinterWrapperPassPass
(
Registry
);
35
initializePostDomPrinterWrapperPassPass
(
Registry
);
36
initializePostDomOnlyViewerWrapperPassPass
(
Registry
);
37
initializePostDomOnlyPrinterWrapperPassPass
(
Registry
);
38
initializeAAResultsWrapperPassPass
(
Registry
);
39
initializeGlobalsAAWrapperPassPass
(
Registry
);
40
initializeIVUsersWrapperPassPass
(
Registry
);
41
initializeIntervalPartitionPass
(
Registry
);
42
initializeIRSimilarityIdentifierWrapperPassPass
(
Registry
);
43
initializeLazyBranchProbabilityInfoPassPass
(
Registry
);
44
initializeLazyBlockFrequencyInfoPassPass
(
Registry
);
45
initializeLazyValueInfoWrapperPassPass
(
Registry
);
46
initializeLoopInfoWrapperPassPass
(
Registry
);
47
initializeMemoryDependenceWrapperPassPass
(
Registry
);
48
initializeModuleSummaryIndexWrapperPassPass
(
Registry
);
49
initializeOptimizationRemarkEmitterWrapperPassPass
(
Registry
);
50
initializePhiValuesWrapperPassPass
(
Registry
);
51
initializePostDominatorTreeWrapperPassPass
(
Registry
);
52
initializeRegionInfoPassPass
(
Registry
);
53
initializeRegionViewerPass
(
Registry
);
54
initializeRegionPrinterPass
(
Registry
);
55
initializeRegionOnlyViewerPass
(
Registry
);
56
initializeRegionOnlyPrinterPass
(
Registry
);
57
initializeSCEVAAWrapperPassPass
(
Registry
);
58
initializeScalarEvolutionWrapperPassPass
(
Registry
);
59
initializeStackSafetyGlobalInfoWrapperPassPass
(
Registry
);
60
initializeStackSafetyInfoWrapperPassPass
(
Registry
);
61
initializeTargetTransformInfoWrapperPassPass
(
Registry
);
62
initializeTypeBasedAAWrapperPassPass
(
Registry
);
63
initializeScopedNoAliasAAWrapperPassPass
(
Registry
);
64
initializeLCSSAVerificationPassPass
(
Registry
);
65
initializeMemorySSAWrapperPassPass
(
Registry
);
66
}
67
68
LLVMBool
LLVMVerifyModule
(
LLVMModuleRef
M
,
LLVMVerifierFailureAction
Action
,
69
char
**
OutMessages
) {
70
raw_ostream
*
DebugOS
=
Action
!=
LLVMReturnStatusAction
? &
errs
() :
nullptr
;
71
std::
string
Messages
;
72
raw_string_ostream
MsgsOS
(
Messages
);
73
74
LLVMBool
Result
=
verifyModule
(
M:
*
unwrap
(
P:
M
),
OS:
OutMessages
? &
MsgsOS
:
DebugOS
);
75
76
// Duplicate the output to stderr.
77
if
(
DebugOS
&&
OutMessages
)
78
*
DebugOS
<<
MsgsOS
.
str
();
79
80
if
(
Action
==
LLVMAbortProcessAction
&&
Result
)
81
report_fatal_error
(
reason:
"Broken module found, compilation aborted!"
);
82
83
if
(
OutMessages
)
84
*
OutMessages
=
strdup
(
s:
MsgsOS
.
str
().
c_str
());
85
86
return
Result
;
87
}
88
89
LLVMBool
LLVMVerifyFunction
(
LLVMValueRef
Fn
,
LLVMVerifierFailureAction
Action
) {
90
LLVMBool
Result
=
verifyFunction
(
91
F:
*
unwrap
<
Function
>(
P:
Fn
),
OS:
Action
!=
LLVMReturnStatusAction
? &
errs
()
92
:
nullptr
);
93
94
if
(
Action
==
LLVMAbortProcessAction
&&
Result
)
95
report_fatal_error
(
reason:
"Broken function found, compilation aborted!"
);
96
97
return
Result
;
98
}
99
100
void
LLVMViewFunctionCFG
(
LLVMValueRef
Fn
) {
101
Function
*
F
=
unwrap
<
Function
>(
P:
Fn
);
102
F
->
viewCFG
();
103
}
104
105
void
LLVMViewFunctionCFGOnly
(
LLVMValueRef
Fn
) {
106
Function
*
F
=
unwrap
<
Function
>(
P:
Fn
);
107
F
->
viewCFGOnly
();
108
}
109