< prev index next >
src/hotspot/share/c1/c1_ValueMap.cpp
Print this page
*** 263,311 ****
class ShortLoopOptimizer : public ValueNumberingVisitor {
private:
GlobalValueNumbering* _gvn;
BlockList _loop_blocks;
bool _too_complicated_loop;
! bool _has_field_store[T_ARRAY + 1];
! bool _has_indexed_store[T_ARRAY + 1];
// simplified access to methods of GlobalValueNumbering
ValueMap* current_map() { return _gvn->current_map(); }
ValueMap* value_map_of(BlockBegin* block) { return _gvn->value_map_of(block); }
// implementation for abstract methods of ValueNumberingVisitor
void kill_memory() { _too_complicated_loop = true; }
void kill_field(ciField* field, bool all_offsets) {
current_map()->kill_field(field, all_offsets);
! assert(field->type()->basic_type() >= 0 && field->type()->basic_type() <= T_ARRAY, "Invalid type");
_has_field_store[field->type()->basic_type()] = true;
}
void kill_array(ValueType* type) {
current_map()->kill_array(type);
! BasicType basic_type = as_BasicType(type); assert(basic_type >= 0 && basic_type <= T_ARRAY, "Invalid type");
_has_indexed_store[basic_type] = true;
}
public:
ShortLoopOptimizer(GlobalValueNumbering* gvn)
: _gvn(gvn)
, _loop_blocks(ValueMapMaxLoopSize)
, _too_complicated_loop(false)
{
! for (int i=0; i<= T_ARRAY; i++){
_has_field_store[i] = false;
_has_indexed_store[i] = false;
}
}
bool has_field_store(BasicType type) {
! assert(type >= 0 && type <= T_ARRAY, "Invalid type");
return _has_field_store[type];
}
bool has_indexed_store(BasicType type) {
! assert(type >= 0 && type <= T_ARRAY, "Invalid type");
return _has_indexed_store[type];
}
bool process(BlockBegin* loop_header);
};
--- 263,311 ----
class ShortLoopOptimizer : public ValueNumberingVisitor {
private:
GlobalValueNumbering* _gvn;
BlockList _loop_blocks;
bool _too_complicated_loop;
! bool _has_field_store[T_VOID];
! bool _has_indexed_store[T_VOID];
// simplified access to methods of GlobalValueNumbering
ValueMap* current_map() { return _gvn->current_map(); }
ValueMap* value_map_of(BlockBegin* block) { return _gvn->value_map_of(block); }
// implementation for abstract methods of ValueNumberingVisitor
void kill_memory() { _too_complicated_loop = true; }
void kill_field(ciField* field, bool all_offsets) {
current_map()->kill_field(field, all_offsets);
! assert(field->type()->basic_type() >= 0 && field->type()->basic_type() < T_VOID, "Invalid type");
_has_field_store[field->type()->basic_type()] = true;
}
void kill_array(ValueType* type) {
current_map()->kill_array(type);
! BasicType basic_type = as_BasicType(type); assert(basic_type >= 0 && basic_type < T_VOID, "Invalid type");
_has_indexed_store[basic_type] = true;
}
public:
ShortLoopOptimizer(GlobalValueNumbering* gvn)
: _gvn(gvn)
, _loop_blocks(ValueMapMaxLoopSize)
, _too_complicated_loop(false)
{
! for (int i = 0; i < T_VOID; i++) {
_has_field_store[i] = false;
_has_indexed_store[i] = false;
}
}
bool has_field_store(BasicType type) {
! assert(type >= 0 && type < T_VOID, "Invalid type");
return _has_field_store[type];
}
bool has_indexed_store(BasicType type) {
! assert(type >= 0 && type < T_VOID, "Invalid type");
return _has_indexed_store[type];
}
bool process(BlockBegin* loop_header);
};
< prev index next >