-
Notifications
You must be signed in to change notification settings - Fork 139
/
Copy pathOMRCompilerEnv.hpp
149 lines (111 loc) · 4.14 KB
/
OMRCompilerEnv.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*******************************************************************************
* Copyright IBM Corp. and others 2000
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/
* or the Apache License, Version 2.0 which accompanies this distribution
* and is available at https://www.apache.org/licenses/LICENSE-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License, v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception [1] and GNU General Public
* License, version 2 with the OpenJDK Assembly Exception [2].
*
* [1] https://www.gnu.org/software/classpath/license.html
* [2] https://openjdk.org/legal/assembly-exception.html
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 OR GPL-2.0-only WITH OpenJDK-assembly-exception-1.0
*******************************************************************************/
#ifndef OMR_COMPILER_ENV_INCL
#define OMR_COMPILER_ENV_INCL
/*
* The following #define and typedef must appear before any #includes in this file
*/
#ifndef OMR_COMPILER_ENV_CONNECTOR
#define OMR_COMPILER_ENV_CONNECTOR
namespace OMR { class CompilerEnv; }
namespace OMR { typedef OMR::CompilerEnv CompilerEnvConnector; }
#endif
#include "infra/Annotations.hpp"
#include "env/RawAllocator.hpp"
#include "env/Environment.hpp"
#include "env/DebugEnv.hpp"
#include "env/PersistentAllocator.hpp"
#include "env/ClassEnv.hpp"
#include "env/ObjectModel.hpp"
#include "env/ArithEnv.hpp"
#include "env/VMEnv.hpp"
#include "env/VMMethodEnv.hpp"
#include "env/TRMemory.hpp"
namespace TR { class CompilerEnv; }
namespace OMR
{
class OMR_EXTENSIBLE CompilerEnv
{
public:
CompilerEnv(TR::RawAllocator raw, const TR::PersistentAllocatorKit &persistentAllocatorKit, OMRPortLibrary* const omrPortLib=NULL);
TR::CompilerEnv *self();
/// Primordial raw allocator. This is guaranteed to be thread safe.
///
TR::RawAllocator rawAllocator;
// Compilation host environment
//
TR::Environment host;
// Compilation target environment
//
TR::Environment target;
// Compilation relocatable target environment
//
TR::Environment relocatableTarget;
// Class information in this compilation environment.
//
TR::ClassEnv cls;
// Information about the VM environment.
//
TR::VMEnv vm;
// Information about methods in this compilation environment
//
TR::VMMethodEnv mtd;
// Object model in this compilation environment
//
TR::ObjectModel om;
// Arithmetic semantics in this compilation environment
//
TR::ArithEnv arith;
// Debug environment for the compiler. This is not thread safe.
//
TR::DebugEnv debug;
bool isInitialized() { return _initialized; }
// --------------------------------------------------------------------------
// Initialize a CompilerEnv. This should only be executed after a CompilerEnv
// object has been allocated and its constructor run. Its intent is to
// execute initialization logic that may require a completely initialized
// object beforehand.
//
void initialize();
TR::PersistentAllocator &persistentAllocator() { return _persistentAllocator; }
TR_PersistentMemory *persistentMemory() { return ::trPersistentMemory; }
OMRPortLibrary * const omrPortLib;
protected:
// Initialize 'target' environment for this compiler
//
void initializeTargetEnvironment();
// Initialize 'relocatableTarget' environment for this compiler
//
void initializeRelocatableTargetEnvironment();
// Initialize 'host' environment for this compiler
//
void initializeHostEnvironment();
private:
bool _initialized;
TR::PersistentAllocator _persistentAllocator;
public:
/// Compiler-lifetime region allocator.
/// NOTE: its a raw allocator until the region allocation work is completed.
///
TR::PersistentAllocator ®ionAllocator;
};
}
#endif