8220502: Inefficient pre-sizing of PhiResolverState arrays in c1_LIRGenerator
Reviewed-by: thartmann, kvn
--- a/src/hotspot/share/c1/c1_LIRGenerator.cpp Thu Mar 14 09:38:17 2019 -0400
+++ b/src/hotspot/share/c1/c1_LIRGenerator.cpp Thu Mar 14 15:31:13 2019 +0100
@@ -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 @@
// 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 @@
// 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;
--- a/src/hotspot/share/c1/c1_LIRGenerator.hpp Thu Mar 14 09:38:17 2019 -0400
+++ b/src/hotspot/share/c1/c1_LIRGenerator.hpp Thu Mar 14 15:31:13 2019 +0100
@@ -102,7 +102,7 @@
// 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 @@
public:
PhiResolverState() {}
- void reset(int max_vregs);
+ void reset();
};
@@ -146,7 +146,7 @@
}
public:
- PhiResolver(LIRGenerator* _lir_gen, int max_vregs);
+ PhiResolver(LIRGenerator* _lir_gen);
~PhiResolver();
void move(LIR_Opr src, LIR_Opr dest);