8027751: C1 crashes in Weblogic with G1 enabled

Keep T_OBJECT operands in registers for logical operations on x64

Reviewed-by: kvn, roland
This commit is contained in:
Igor Veresov 2013-11-05 00:59:30 -08:00
parent c8757a5edd
commit 7899a729a9
2 changed files with 49 additions and 2 deletions

View file

@ -1138,8 +1138,10 @@ IntervalUseKind LinearScan::use_kind_of_input_operand(LIR_Op* op, LIR_Opr opr) {
}
}
}
} else if (opr_type != T_LONG) {
// We want to sometimes use logical operations on pointers, in particular in GC barriers.
// Since 64bit logical operations do not current support operands on stack, we have to make sure
// T_OBJECT doesn't get spilled along with T_LONG.
} else if (opr_type != T_LONG LP64_ONLY(&& opr_type != T_OBJECT)) {
// integer instruction (note: long operands must always be in register)
switch (op->code()) {
case lir_cmp: