RFR: 8278784: C2: Refactor PhaseIdealLoop::remix_address_expressions() so it operates on longs [v3]
Tobias Hartmann
thartmann at openjdk.java.net
Tue Jan 18 08:07:26 UTC 2022
On Wed, 5 Jan 2022 16:07:58 GMT, Roland Westrelin <roland at openjdk.org> wrote:
>> The logic in PhaseIdealLoop::remix_address_expressions() that's
>> specific to int nodes apply equally to long nodes. This change
>> refactors that code so it applies to both integer types. This improves
>> performance on some of panama's micro-benchmarks.
>
> Roland Westrelin has updated the pull request incrementally with one additional commit since the last revision:
>
> Christian's review
Overall looks good to me but there a lots of places with inconsistent pointer asterisk placement (I started marking some). I don't have a strong opinion though, I just like consistency :)
src/hotspot/share/opto/loopopts.cpp line 359:
> 357: Node* PhaseIdealLoop::remix_address_expressions_add_left_shift(Node* n, IdealLoopTree* n_loop, Node* n_ctrl, BasicType bt) {
> 358: assert(bt == T_INT || bt == T_LONG, "only for integers");
> 359: int n_op = n->Opcode();
Seems to be unused or only used once with my suggested change. Maybe remove.
src/hotspot/share/opto/loopopts.cpp line 361:
> 359: int n_op = n->Opcode();
> 360:
> 361: if (n->Opcode() == Op_LShift(bt)) {
Suggestion:
if (n_op == Op_LShift(bt)) {
src/hotspot/share/opto/loopopts.cpp line 365:
> 363: Node* scale = n->in(2);
> 364: Node* scale_ctrl = get_ctrl(scale);
> 365: IdealLoopTree *scale_loop = get_loop(scale_ctrl);
Suggestion:
IdealLoopTree* scale_loop = get_loop(scale_ctrl);
src/hotspot/share/opto/loopopts.cpp line 376:
> 374: Node* add = n->in(1);
> 375: Node* add_ctrl = get_ctrl(add);
> 376: IdealLoopTree *add_loop = get_loop(add_ctrl);
Suggestion:
IdealLoopTree* add_loop = get_loop(add_ctrl);
src/hotspot/share/opto/loopopts.cpp line 387:
> 385: Node* zero = _igvn.integercon(0, bt);
> 386: set_ctrl(zero, C->root());
> 387: Node *neg = SubNode::make(zero, add->in(2), bt);
Suggestion:
Node* neg = SubNode::make(zero, add->in(2), bt);
src/hotspot/share/opto/loopopts.cpp line 395:
> 393: assert(add->Opcode() == Op_AddI || add->Opcode() == Op_AddL, "");
> 394: // See if one add input is loop invariant
> 395: Node *add_var = add->in(1);
Suggestion:
Node* add_var = add->in(1);
Same below.
src/hotspot/share/opto/loopopts.cpp line 434:
> 432: // moved out. We'd like to do all associative operators, but it's especially
> 433: // important (common) to do address expressions.
> 434: Node *PhaseIdealLoop::remix_address_expressions(Node *n) {
Suggestion:
Node* PhaseIdealLoop::remix_address_expressions(Node* n) {
Many more below.
test/hotspot/jtreg/compiler/c2/irTests/TestRemixAddressExpressions.java line 2:
> 1: /*
> 2: * Copyright (c) 2021, Red Hat, Inc. All rights reserved.
Suggestion:
* Copyright (c) 2022, Red Hat, Inc. All rights reserved.
-------------
Marked as reviewed by thartmann (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/6892
More information about the hotspot-compiler-dev
mailing list