Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8266561: Remove Compile::_save_argument_registers #3884

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 0 additions & 3 deletions src/hotspot/share/opto/compile.cpp
Expand Up @@ -536,7 +536,6 @@ Compile::Compile( ciEnv* ci_env, ciMethod* target, int osr_bci,
bool subsume_loads, bool do_escape_analysis, bool eliminate_boxing, bool install_code, DirectiveSet* directive)
: Phase(Compiler),
_compile_id(ci_env->compile_id()),
_save_argument_registers(false),
_subsume_loads(subsume_loads),
_do_escape_analysis(do_escape_analysis),
_install_code(install_code),
Expand Down Expand Up @@ -839,12 +838,10 @@ Compile::Compile( ciEnv* ci_env,
const char *stub_name,
int is_fancy_jump,
bool pass_tls,
bool save_arg_registers,
bool return_pc,
DirectiveSet* directive)
: Phase(Compiler),
_compile_id(0),
_save_argument_registers(save_arg_registers),
_subsume_loads(true),
_do_escape_analysis(false),
_install_code(true),
Expand Down
4 changes: 1 addition & 3 deletions src/hotspot/share/opto/compile.hpp
Expand Up @@ -245,7 +245,6 @@ class Compile : public Phase {
private:
// Fixed parameters to this compilation.
const int _compile_id;
const bool _save_argument_registers; // save/restore arg regs for trampolines
const bool _subsume_loads; // Load can be matched as part of a larger op.
const bool _do_escape_analysis; // Do escape analysis.
const bool _install_code; // Install the code that was compiled
Expand Down Expand Up @@ -512,7 +511,6 @@ class Compile : public Phase {
bool eliminate_boxing() const { return _eliminate_boxing; }
/** Do aggressive boxing elimination. */
bool aggressive_unboxing() const { return _eliminate_boxing && AggressiveUnboxing; }
bool save_argument_registers() const { return _save_argument_registers; }
bool should_install_code() const { return _install_code; }

// Other fixed compilation parameters.
Expand Down Expand Up @@ -1036,7 +1034,7 @@ class Compile : public Phase {
Compile(ciEnv* ci_env, const TypeFunc *(*gen)(),
address stub_function, const char *stub_name,
int is_fancy_jump, bool pass_tls,
bool save_arg_registers, bool return_pc, DirectiveSet* directive);
bool return_pc, DirectiveSet* directive);

// Are we compiling a method?
bool has_method() { return method() != NULL; }
Expand Down
12 changes: 2 additions & 10 deletions src/hotspot/share/opto/matcher.cpp
Expand Up @@ -723,12 +723,10 @@ void Matcher::init_first_stack_mask() {
}

//---------------------------is_save_on_entry----------------------------------
bool Matcher::is_save_on_entry( int reg ) {
bool Matcher::is_save_on_entry(int reg) {
return
_register_save_policy[reg] == 'E' ||
_register_save_policy[reg] == 'A' || // Save-on-entry register?
// Also save argument registers in the trampolining stubs
(C->save_argument_registers() && is_spillable_arg(reg));
_register_save_policy[reg] == 'A'; // Save-on-entry register?
}

//---------------------------Fixup_Save_On_Entry-------------------------------
Expand All @@ -744,12 +742,6 @@ void Matcher::Fixup_Save_On_Entry( ) {
StartNode *start = C->start();
assert( start, "Expect a start node" );

// Save argument registers in the trampolining stubs
if( C->save_argument_registers() )
for( i = 0; i < _last_Mach_Reg; i++ )
if( is_spillable_arg(i) )
soe_cnt++;

// Input RegMask array shared by all Returns.
// The type for doubles and longs has a count of 2, but
// there is only 1 returned value
Expand Down
23 changes: 3 additions & 20 deletions src/hotspot/share/opto/output.cpp
Expand Up @@ -1266,21 +1266,6 @@ void PhaseOutput::estimate_buffer_size(int& const_req) {
// Compute prolog code size
_method_size = 0;
_frame_slots = OptoReg::reg2stack(C->matcher()->_old_SP) + C->regalloc()->_framesize;
#if defined(IA64) && !defined(AIX)
if (save_argument_registers()) {
// 4815101: this is a stub with implicit and unknown precision fp args.
// The usual spill mechanism can only generate stfd's in this case, which
// doesn't work if the fp reg to spill contains a single-precision denorm.
// Instead, we hack around the normal spill mechanism using stfspill's and
// ldffill's in the MachProlog and MachEpilog emit methods. We allocate
// space here for the fp arg regs (f8-f15) we're going to thusly spill.
//
// If we ever implement 16-byte 'registers' == stack slots, we can
// get rid of this hack and have SpillCopy generate stfspill/ldffill
// instead of stfd/stfs/ldfd/ldfs.
_frame_slots += 8*(16/BytesPerInt);
}
#endif
assert(_frame_slots >= 0 && _frame_slots < 1000000, "sanity check");

if (C->has_mach_constant_base_node()) {
Expand Down Expand Up @@ -3356,8 +3341,7 @@ void PhaseOutput::install() {
if (!C->should_install_code()) {
return;
} else if (C->stub_function() != NULL) {
install_stub(C->stub_name(),
C->save_argument_registers());
install_stub(C->stub_name());
} else {
install_code(C->method(),
C->entry_bci(),
Expand Down Expand Up @@ -3412,8 +3396,7 @@ void PhaseOutput::install_code(ciMethod* target,
}
}
}
void PhaseOutput::install_stub(const char* stub_name,
bool caller_must_gc_arguments) {
void PhaseOutput::install_stub(const char* stub_name) {
// Entry point will be accessed using stub_entry_point();
if (code_buffer() == NULL) {
Matcher::soft_match_failure();
Expand All @@ -3432,7 +3415,7 @@ void PhaseOutput::install_stub(const char* stub_name,
// _code_offsets.value(CodeOffsets::Frame_Complete),
frame_size_in_words(),
oop_map_set(),
caller_must_gc_arguments);
false);
assert(rs != NULL && rs->is_runtime_stub(), "sanity check");

C->set_stub_entry_point(rs->entry_point());
Expand Down
3 changes: 1 addition & 2 deletions src/hotspot/share/opto/output.hpp
Expand Up @@ -164,8 +164,7 @@ class PhaseOutput : public Phase {
bool has_wide_vectors,
RTMState rtm_state);

void install_stub(const char* stub_name,
bool caller_must_gc_arguments);
void install_stub(const char* stub_name);

// Constant table
ConstantTable& constant_table() { return _constant_table; }
Expand Down
49 changes: 24 additions & 25 deletions src/hotspot/share/opto/runtime.cpp
Expand Up @@ -124,8 +124,8 @@ static bool check_compiled_frame(JavaThread* thread) {
#endif // ASSERT


#define gen(env, var, type_func_gen, c_func, fancy_jump, pass_tls, save_arg_regs, return_pc) \
var = generate_stub(env, type_func_gen, CAST_FROM_FN_PTR(address, c_func), #var, fancy_jump, pass_tls, save_arg_regs, return_pc); \
#define gen(env, var, type_func_gen, c_func, fancy_jump, pass_tls, return_pc) \
var = generate_stub(env, type_func_gen, CAST_FROM_FN_PTR(address, c_func), #var, fancy_jump, pass_tls, return_pc); \
if (var == NULL) { return false; }

bool OptoRuntime::generate(ciEnv* env) {
Expand All @@ -134,23 +134,23 @@ bool OptoRuntime::generate(ciEnv* env) {

// Note: tls: Means fetching the return oop out of the thread-local storage
//
// variable/name type-function-gen , runtime method ,fncy_jp, tls,save_args,retpc
// variable/name type-function-gen , runtime method ,fncy_jp, tls,retpc
// -------------------------------------------------------------------------------------------------------------------------------
gen(env, _new_instance_Java , new_instance_Type , new_instance_C , 0 , true , false, false);
gen(env, _new_array_Java , new_array_Type , new_array_C , 0 , true , false, false);
gen(env, _new_array_nozero_Java , new_array_Type , new_array_nozero_C , 0 , true , false, false);
gen(env, _multianewarray2_Java , multianewarray2_Type , multianewarray2_C , 0 , true , false, false);
gen(env, _multianewarray3_Java , multianewarray3_Type , multianewarray3_C , 0 , true , false, false);
gen(env, _multianewarray4_Java , multianewarray4_Type , multianewarray4_C , 0 , true , false, false);
gen(env, _multianewarray5_Java , multianewarray5_Type , multianewarray5_C , 0 , true , false, false);
gen(env, _multianewarrayN_Java , multianewarrayN_Type , multianewarrayN_C , 0 , true , false, false);
gen(env, _complete_monitor_locking_Java , complete_monitor_enter_Type , SharedRuntime::complete_monitor_locking_C, 0, false, false, false);
gen(env, _monitor_notify_Java , monitor_notify_Type , monitor_notify_C , 0 , false, false, false);
gen(env, _monitor_notifyAll_Java , monitor_notify_Type , monitor_notifyAll_C , 0 , false, false, false);
gen(env, _rethrow_Java , rethrow_Type , rethrow_C , 2 , true , false, true );

gen(env, _slow_arraycopy_Java , slow_arraycopy_Type , SharedRuntime::slow_arraycopy_C , 0 , false, false, false);
gen(env, _register_finalizer_Java , register_finalizer_Type , register_finalizer , 0 , false, false, false);
gen(env, _new_instance_Java , new_instance_Type , new_instance_C , 0 , true, false);
gen(env, _new_array_Java , new_array_Type , new_array_C , 0 , true, false);
gen(env, _new_array_nozero_Java , new_array_Type , new_array_nozero_C , 0 , true, false);
gen(env, _multianewarray2_Java , multianewarray2_Type , multianewarray2_C , 0 , true, false);
gen(env, _multianewarray3_Java , multianewarray3_Type , multianewarray3_C , 0 , true, false);
gen(env, _multianewarray4_Java , multianewarray4_Type , multianewarray4_C , 0 , true, false);
gen(env, _multianewarray5_Java , multianewarray5_Type , multianewarray5_C , 0 , true, false);
gen(env, _multianewarrayN_Java , multianewarrayN_Type , multianewarrayN_C , 0 , true, false);
gen(env, _complete_monitor_locking_Java , complete_monitor_enter_Type , SharedRuntime::complete_monitor_locking_C, 0, false, false);
gen(env, _monitor_notify_Java , monitor_notify_Type , monitor_notify_C , 0 , false, false);
gen(env, _monitor_notifyAll_Java , monitor_notify_Type , monitor_notifyAll_C , 0 , false, false);
gen(env, _rethrow_Java , rethrow_Type , rethrow_C , 2 , true , true );

gen(env, _slow_arraycopy_Java , slow_arraycopy_Type , SharedRuntime::slow_arraycopy_C , 0 , false, false);
gen(env, _register_finalizer_Java , register_finalizer_Type , register_finalizer , 0 , false, false);

return true;
}
Expand All @@ -159,17 +159,16 @@ bool OptoRuntime::generate(ciEnv* env) {


// Helper method to do generation of RunTimeStub's
address OptoRuntime::generate_stub( ciEnv* env,
TypeFunc_generator gen, address C_function,
const char *name, int is_fancy_jump,
bool pass_tls,
bool save_argument_registers,
bool return_pc) {
address OptoRuntime::generate_stub(ciEnv* env,
TypeFunc_generator gen, address C_function,
const char *name, int is_fancy_jump,
bool pass_tls,
bool return_pc) {

// Matching the default directive, we currently have no method to match.
DirectiveSet* directive = DirectivesStack::getDefaultDirective(CompileBroker::compiler(CompLevel_full_optimization));
ResourceMark rm;
Compile C( env, gen, C_function, name, is_fancy_jump, pass_tls, save_argument_registers, return_pc, directive);
Compile C(env, gen, C_function, name, is_fancy_jump, pass_tls, return_pc, directive);
DirectivesStack::release(directive);
return C.stub_entry_point();
}
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/share/opto/runtime.hpp
Expand Up @@ -130,7 +130,7 @@ class OptoRuntime : public AllStatic {

private:
// define stubs
static address generate_stub(ciEnv* ci_env, TypeFunc_generator gen, address C_function, const char *name, int is_fancy_jump, bool pass_tls, bool save_arguments, bool return_pc);
static address generate_stub(ciEnv* ci_env, TypeFunc_generator gen, address C_function, const char* name, int is_fancy_jump, bool pass_tls, bool return_pc);

// References to generated stubs
static address _new_instance_Java;
Expand Down
1 change: 0 additions & 1 deletion src/hotspot/share/runtime/vmStructs.cpp
Expand Up @@ -912,7 +912,6 @@ typedef HashtableEntry<InstanceKlass*, mtClass> KlassHashtableEntry;
c2_nonstatic_field(Compile, _regalloc, PhaseRegAlloc*) \
c2_nonstatic_field(Compile, _method, ciMethod*) \
c2_nonstatic_field(Compile, _compile_id, const int) \
c2_nonstatic_field(Compile, _save_argument_registers, const bool) \
c2_nonstatic_field(Compile, _subsume_loads, const bool) \
c2_nonstatic_field(Compile, _do_escape_analysis, const bool) \
c2_nonstatic_field(Compile, _eliminate_boxing, const bool) \
Expand Down