Open sendaoYan opened 2 months ago
8201447: C1 does backedge profiling incorrectly
diff --git a/hotspot/src/cpu/riscv/vm/c1_LIRGenerator_riscv.cpp b/hotspot/src/cpu/riscv/vm/c1_LIRGenerator_riscv.cpp
index 5c7e5872e17..d6c63feecfc 100644
--- a/hotspot/src/cpu/riscv/vm/c1_LIRGenerator_riscv.cpp
+++ b/hotspot/src/cpu/riscv/vm/c1_LIRGenerator_riscv.cpp
@@ -1184,19 +1184,18 @@ void LIRGenerator::do_If(If* x) {
xin->load_item();
yin->load_item();
- set_no_result(x);
-
- LIR_Opr left = xin->result();
- LIR_Opr right = yin->result();
-
// add safepoint before generating condition code so it can be recomputed
if (x->is_safepoint()) {
// increment backedge counter if needed
- increment_backedge_counter_conditionally(lir_cond(cond), left, right, state_for(x, x->state_before()),
- x->tsux()->bci(), x->fsux()->bci(), x->profiled_bci());
+ increment_backedge_counter(state_for(x, x->state_before()), x->profiled_bci());
__ safepoint(LIR_OprFact::illegalOpr, state_for(x, x->state_before()));
}
+ set_no_result(x);
+
+ LIR_Opr left = xin->result();
+ LIR_Opr right = yin->result();
+
// Generate branch profiling. Profiling code doesn't kill flags.
__ cmp(lir_cond(cond), left, right);
profile_branch(x, cond);
To github.com:sendaoYan/riscv-port-jdk8u-ysd.git 6d726330ef7..2a10656d5f5 minus-jbs8276799 -> minus-jbs8276799
standalone.log