RFR(S): 8142314: Bug in C1 ControlFlowOptimizer::delete_unnecessary_jumps with bytecode profiling

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed Nov 11 06:13:35 UTC 2015


Hi Volker,

I did not get next statement.
CMP instruction should produce flags which consumed by cmove and branch instructions.
Can you explain what is different there for Itanium?

 > On most platforms this does no harm as the cmp of the instruction
 > doesn't depend on the condition. However, on Itanium the the cmp
 > depends on the condition. Therefore the correct code should be:

Changes looks fine to me.

Thanks,
Vladimir

On 11/9/15 6:11 AM, Volker Simonis wrote:
> Hi,
>
> can I please have a review and a sponsor for the following change
> contributed by gunter.haug at sap.com:
>
> http://cr.openjdk.java.net/~simonis/webrevs/2015/8142314/
> https://bugs.openjdk.java.net/browse/JDK-8142314
>
> The function ControlFlowOptimizer::delete_unnecessary_jumps reorders
> basic block to minimize the number of branches required.
> For example, it transforms
>
> B1 ...
>    cmp [NE] [R1|I] [int:0|I]
>    branch [NE] [B1]
>    branch [AL] [B2]
> B1 ...
> B2 ...
>
> to
>
> B1 ...
>    cmp [EQ] [R1|I] [int:0|I]
>    branch [EQ] [B2]
> B1 ...
> B2 ...
>
> Bytecode profiling generates a pattern like this:
>
> B1 ...
>    cmp [NE] [R1|I] [int:0|I]
>    cmov [NE] [B1_counter] [B2_counter] [R2]
>    ...
>    branch [NE] [B1]
>    branch [AL] [B2]
> B1 ...
> B2 ...
>
> ControlFlowOptimizer::delete_unnecessary_jumps doesn't take care of
> the cmov. So the code above will transform to
>
> B1 ...
>    cmp [EQ] [R1|I] [int:0|I]
>    cmov [NE] [B1_counter] [B2_counter] [R2]
>    ...
>    branch [EQ] [B2]
> B1 ...
> B2 ...
>
> On most platforms this does no harm as the cmp of the instruction
> doesn't depend on the condition. However, on Itanium the the cmp
> depends on the condition. Therefore the correct code should be:
>
> B1 ...
>    cmp [EQ] [R1|I] [int:0|I]
>    cmov [EQ] [B2_counter] [B1_counter] [R2]
>    ...
>    branch [EQ] [B2]
> B1 ...
> B2 ...
>
>
> Thank you and best regards,
> Volker
>


More information about the hotspot-compiler-dev mailing list