8220502: Inefficient pre-sizing of PhiResolverState arrays in c1_LIRGenerator

Reviewed-by: thartmann, kvn
This commit is contained in:
Claes Redestad 2019-03-14 15:31:13 +01:00
parent cace9d1c8e
commit 23e0276cc9
2 changed files with 10 additions and 16 deletions

View file

@ -53,18 +53,13 @@
#define PATCHED_ADDR (max_jint)
#endif
void PhiResolverState::reset(int max_vregs) {
// Initialize array sizes
_virtual_operands.at_put_grow(max_vregs - 1, NULL, NULL);
_virtual_operands.trunc_to(0);
_other_operands.at_put_grow(max_vregs - 1, NULL, NULL);
_other_operands.trunc_to(0);
_vreg_table.at_put_grow(max_vregs - 1, NULL, NULL);
_vreg_table.trunc_to(0);
void PhiResolverState::reset() {
_virtual_operands.clear();
_other_operands.clear();
_vreg_table.clear();
}
//--------------------------------------------------------------
// PhiResolver
@ -78,13 +73,13 @@ void PhiResolverState::reset(int max_vregs) {
// r2 := r3 becomes r1 := r2
// r1 := r2 r2 := r3
PhiResolver::PhiResolver(LIRGenerator* gen, int max_vregs)
PhiResolver::PhiResolver(LIRGenerator* gen)
: _gen(gen)
, _state(gen->resolver_state())
, _temp(LIR_OprFact::illegalOpr)
{
// reinitialize the shared state arrays
_state.reset(max_vregs);
_state.reset();
}
@ -1021,8 +1016,7 @@ void LIRGenerator::move_to_phi(ValueStack* cur_state) {
// a block with only one predecessor never has phi functions
if (sux->number_of_preds() > 1) {
int max_phis = cur_state->stack_size() + cur_state->locals_size();
PhiResolver resolver(this, _virtual_register_number + max_phis * 2);
PhiResolver resolver(this);
ValueStack* sux_state = sux->state();
Value sux_value;

View file

@ -102,7 +102,7 @@ class ResolveNode: public CompilationResourceObj {
// This is shared state to be used by the PhiResolver so the operand
// arrays don't have to be reallocated for reach resolution.
// arrays don't have to be reallocated for each resolution.
class PhiResolverState: public CompilationResourceObj {
friend class PhiResolver;
@ -114,7 +114,7 @@ class PhiResolverState: public CompilationResourceObj {
public:
PhiResolverState() {}
void reset(int max_vregs);
void reset();
};
@ -146,7 +146,7 @@ class PhiResolver: public CompilationResourceObj {
}
public:
PhiResolver(LIRGenerator* _lir_gen, int max_vregs);
PhiResolver(LIRGenerator* _lir_gen);
~PhiResolver();
void move(LIR_Opr src, LIR_Opr dest);