Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/gc/g1/c2/g1BarrierSetC2.hpp
40975 views
1
/*
2
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#ifndef SHARE_GC_G1_C2_G1BARRIERSETC2_HPP
26
#define SHARE_GC_G1_C2_G1BARRIERSETC2_HPP
27
28
#include "gc/shared/c2/cardTableBarrierSetC2.hpp"
29
30
class PhaseTransform;
31
class Type;
32
class TypeFunc;
33
34
class G1BarrierSetC2: public CardTableBarrierSetC2 {
35
protected:
36
virtual void pre_barrier(GraphKit* kit,
37
bool do_load,
38
Node* ctl,
39
Node* obj,
40
Node* adr,
41
uint adr_idx,
42
Node* val,
43
const TypeOopPtr* val_type,
44
Node* pre_val,
45
BasicType bt) const;
46
47
virtual void post_barrier(GraphKit* kit,
48
Node* ctl,
49
Node* store,
50
Node* obj,
51
Node* adr,
52
uint adr_idx,
53
Node* val,
54
BasicType bt,
55
bool use_precise) const;
56
57
bool g1_can_remove_pre_barrier(GraphKit* kit,
58
PhaseTransform* phase,
59
Node* adr,
60
BasicType bt,
61
uint adr_idx) const;
62
63
bool g1_can_remove_post_barrier(GraphKit* kit,
64
PhaseTransform* phase, Node* store,
65
Node* adr) const;
66
67
void g1_mark_card(GraphKit* kit,
68
IdealKit& ideal,
69
Node* card_adr,
70
Node* oop_store,
71
uint oop_alias_idx,
72
Node* index,
73
Node* index_adr,
74
Node* buffer,
75
const TypeFunc* tf) const;
76
77
// Helper for unsafe accesses, that may or may not be on the referent field.
78
// Generates the guards that check whether the result of
79
// Unsafe.getReference should be recorded in an SATB log buffer.
80
void insert_pre_barrier(GraphKit* kit, Node* base_oop, Node* offset, Node* pre_val, bool need_mem_bar) const;
81
82
static const TypeFunc* write_ref_field_pre_entry_Type();
83
static const TypeFunc* write_ref_field_post_entry_Type();
84
85
virtual Node* load_at_resolved(C2Access& access, const Type* val_type) const;
86
87
public:
88
virtual bool is_gc_barrier_node(Node* node) const;
89
virtual void eliminate_gc_barrier(PhaseMacroExpand* macro, Node* node) const;
90
virtual Node* step_over_gc_barrier(Node* c) const;
91
92
#ifdef ASSERT
93
virtual void verify_gc_barriers(Compile* compile, CompilePhase phase) const;
94
#endif
95
96
virtual bool escape_add_to_con_graph(ConnectionGraph* conn_graph, PhaseGVN* gvn, Unique_Node_List* delayed_worklist, Node* n, uint opcode) const;
97
};
98
99
#endif // SHARE_GC_G1_C2_G1BARRIERSETC2_HPP
100
101