8293844: C2: Verify Location::{oop,normal} types in PhaseOutput::FillLocArray

Reviewed-by: kvn, dlong
This commit is contained in:
Aleksey Shipilev 2022-09-19 06:18:55 +00:00
parent 357a2cc22a
commit 26e08cf3d0

View File

@ -930,8 +930,16 @@ void PhaseOutput::FillLocArray( int idx, MachSafePointNode* sfpt, Node *local,
t->base() == Type::VectorD || t->base() == Type::VectorX ||
t->base() == Type::VectorY || t->base() == Type::VectorZ) {
array->append(new_loc_value( C->regalloc(), regnum, Location::vector ));
} else if (C->regalloc()->is_oop(local)) {
assert(t->base() == Type::OopPtr || t->base() == Type::InstPtr ||
t->base() == Type::AryPtr,
"Unexpected type: %s", t->msg());
array->append(new_loc_value( C->regalloc(), regnum, Location::oop ));
} else {
array->append(new_loc_value( C->regalloc(), regnum, C->regalloc()->is_oop(local) ? Location::oop : Location::normal ));
assert(t->base() == Type::Int || t->base() == Type::Half ||
t->base() == Type::FloatCon || t->base() == Type::FloatBot,
"Unexpected type: %s", t->msg());
array->append(new_loc_value( C->regalloc(), regnum, Location::normal ));
}
return;
}