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