comparison src/share/vm/opto/compile.hpp @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents b40ac3579043
children 137868b7aa6f
comparison
equal deleted inserted replaced
6724:36d1d483d5d6 6725:da91efe96a93
1 /* 1 /*
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 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 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
139 logAliasCacheSize = 6, 139 logAliasCacheSize = 6,
140 AliasCacheSize = (1<<logAliasCacheSize) 140 AliasCacheSize = (1<<logAliasCacheSize)
141 }; 141 };
142 struct AliasCacheEntry { const TypePtr* _adr_type; int _index; }; // simple duple type 142 struct AliasCacheEntry { const TypePtr* _adr_type; int _index; }; // simple duple type
143 enum { 143 enum {
144 trapHistLength = methodDataOopDesc::_trap_hist_limit 144 trapHistLength = MethodData::_trap_hist_limit
145 }; 145 };
146 146
147 // Constant entry of the constant table. 147 // Constant entry of the constant table.
148 class Constant { 148 class Constant {
149 private: 149 private:
150 BasicType _type; 150 BasicType _type;
151 union {
151 jvalue _value; 152 jvalue _value;
153 Metadata* _metadata;
154 } _v;
152 int _offset; // offset of this constant (in bytes) relative to the constant table base. 155 int _offset; // offset of this constant (in bytes) relative to the constant table base.
153 float _freq; 156 float _freq;
154 bool _can_be_reused; // true (default) if the value can be shared with other users. 157 bool _can_be_reused; // true (default) if the value can be shared with other users.
155 158
156 public: 159 public:
157 Constant() : _type(T_ILLEGAL), _offset(-1), _freq(0.0f), _can_be_reused(true) { _value.l = 0; } 160 Constant() : _type(T_ILLEGAL), _offset(-1), _freq(0.0f), _can_be_reused(true) { _v._value.l = 0; }
158 Constant(BasicType type, jvalue value, float freq = 0.0f, bool can_be_reused = true) : 161 Constant(BasicType type, jvalue value, float freq = 0.0f, bool can_be_reused = true) :
159 _type(type), 162 _type(type),
160 _value(value),
161 _offset(-1), 163 _offset(-1),
162 _freq(freq), 164 _freq(freq),
163 _can_be_reused(can_be_reused) 165 _can_be_reused(can_be_reused)
164 {} 166 {
167 assert(type != T_METADATA, "wrong constructor");
168 _v._value = value;
169 }
170 Constant(Metadata* metadata, bool can_be_reused = true) :
171 _type(T_METADATA),
172 _offset(-1),
173 _freq(0.0f),
174 _can_be_reused(can_be_reused)
175 {
176 _v._metadata = metadata;
177 }
165 178
166 bool operator==(const Constant& other); 179 bool operator==(const Constant& other);
167 180
168 BasicType type() const { return _type; } 181 BasicType type() const { return _type; }
169 182
170 jlong get_jlong() const { return _value.j; } 183 jlong get_jlong() const { return _v._value.j; }
171 jfloat get_jfloat() const { return _value.f; } 184 jfloat get_jfloat() const { return _v._value.f; }
172 jdouble get_jdouble() const { return _value.d; } 185 jdouble get_jdouble() const { return _v._value.d; }
173 jobject get_jobject() const { return _value.l; } 186 jobject get_jobject() const { return _v._value.l; }
187
188 Metadata* get_metadata() const { return _v._metadata; }
174 189
175 int offset() const { return _offset; } 190 int offset() const { return _offset; }
176 void set_offset(int offset) { _offset = offset; } 191 void set_offset(int offset) { _offset = offset; }
177 192
178 float freq() const { return _freq; } 193 float freq() const { return _freq; }
217 void calculate_offsets_and_size(); 232 void calculate_offsets_and_size();
218 int find_offset(Constant& con) const; 233 int find_offset(Constant& con) const;
219 234
220 void add(Constant& con); 235 void add(Constant& con);
221 Constant add(MachConstantNode* n, BasicType type, jvalue value); 236 Constant add(MachConstantNode* n, BasicType type, jvalue value);
237 Constant add(Metadata* metadata);
222 Constant add(MachConstantNode* n, MachOper* oper); 238 Constant add(MachConstantNode* n, MachOper* oper);
223 Constant add(MachConstantNode* n, jfloat f) { 239 Constant add(MachConstantNode* n, jfloat f) {
224 jvalue value; value.f = f; 240 jvalue value; value.f = f;
225 return add(n, T_FLOAT, value); 241 return add(n, T_FLOAT, value);
226 } 242 }
268 uint _decompile_count; // Cumulative decompilation counts. 284 uint _decompile_count; // Cumulative decompilation counts.
269 bool _do_inlining; // True if we intend to do inlining 285 bool _do_inlining; // True if we intend to do inlining
270 bool _do_scheduling; // True if we intend to do scheduling 286 bool _do_scheduling; // True if we intend to do scheduling
271 bool _do_freq_based_layout; // True if we intend to do frequency based block layout 287 bool _do_freq_based_layout; // True if we intend to do frequency based block layout
272 bool _do_count_invocations; // True if we generate code to count invocations 288 bool _do_count_invocations; // True if we generate code to count invocations
273 bool _do_method_data_update; // True if we generate code to update methodDataOops 289 bool _do_method_data_update; // True if we generate code to update MethodData*s
274 int _AliasLevel; // Locally-adjusted version of AliasLevel flag. 290 int _AliasLevel; // Locally-adjusted version of AliasLevel flag.
275 bool _print_assembly; // True if we should dump assembly code for this compilation 291 bool _print_assembly; // True if we should dump assembly code for this compilation
276 #ifndef PRODUCT 292 #ifndef PRODUCT
277 bool _trace_opto_output; 293 bool _trace_opto_output;
278 bool _parsed_irreducible_loop; // True if ciTypeFlow detected irreducible loops during parsing 294 bool _parsed_irreducible_loop; // True if ciTypeFlow detected irreducible loops during parsing
894 // correspondence between Use-Def edges and Def-Use edges 910 // correspondence between Use-Def edges and Def-Use edges
895 // The option no_dead_code enables stronger checks that the 911 // The option no_dead_code enables stronger checks that the
896 // graph is strongly connected from root in both directions. 912 // graph is strongly connected from root in both directions.
897 void verify_graph_edges(bool no_dead_code = false) PRODUCT_RETURN; 913 void verify_graph_edges(bool no_dead_code = false) PRODUCT_RETURN;
898 914
899 // Print bytecodes, including the scope inlining tree
900 void print_codes();
901
902 // End-of-run dumps. 915 // End-of-run dumps.
903 static void print_statistics() PRODUCT_RETURN; 916 static void print_statistics() PRODUCT_RETURN;
904 917
905 // Dump formatted assembly 918 // Dump formatted assembly
906 void dump_asm(int *pcs = NULL, uint pc_limit = 0) PRODUCT_RETURN; 919 void dump_asm(int *pcs = NULL, uint pc_limit = 0) PRODUCT_RETURN;