RFR: 8370200: Crash: assert(outer->outcnt() >= phis + 2 - be_loads && outer->outcnt() <= phis + 2 + stores + 1) failed: only phis [v3]

Roland Westrelin roland at openjdk.org
Thu Dec 11 09:50:50 UTC 2025


On Wed, 10 Dec 2025 10:11:56 GMT, Damon Fenacci <dfenacci at openjdk.org> wrote:

>> Roland Westrelin has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains eight additional commits since the last revision:
>> 
>>  - review
>>  - Merge branch 'master' into JDK-8370200
>>  - Update test/hotspot/jtreg/compiler/loopstripmining/TestMismatchedMemoryPhis.java
>>    
>>    Co-authored-by: Roberto Castañeda Lozano <robcasloz at users.noreply.github.com>
>>  - Update test/hotspot/jtreg/compiler/loopstripmining/TestMismatchedMemoryPhis.java
>>    
>>    Co-authored-by: Roberto Castañeda Lozano <robcasloz at users.noreply.github.com>
>>  - more
>>  - test
>>  - more
>>  - fix
>
> src/hotspot/share/opto/cfgnode.cpp line 2753:
> 
>> 2751: 
>> 2752: bool PhiNode::can_be_replaced_by(const PhiNode* other) const {
>> 2753:   return type() == Type::MEMORY && other->type() == Type::MEMORY && adr_type() != TypePtr::BOTTOM &&
> 
> I think I might miss something but I was wondering if we strictly need to check for `adr_type() != TypePtr::BOTTOM`

Are you suggesting we could do:


bool PhiNode::can_be_replaced_by(const PhiNode* other) const {
  return type() == Type::MEMORY && other->type() == Type::MEMORY && other->adr_type() == TypePtr::BOTTOM && has_same_inputs_as(other);
}


?

If there are 2 memory `Phi`s with same inputs and same `adr_type` then global value numbering should common them so that would make no difference.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/28677#discussion_r2609907749


More information about the hotspot-compiler-dev mailing list