[12] RFR(M): 8210215: C2 should optimize trichotomy calculations
Vladimir Kozlov
vladimir.kozlov at oracle.com
Tue Oct 2 17:35:07 UTC 2018
Okay. My point is that such optimization should be handled separately and not part of
optimize_trichotomy(). You can have multi-inputs Region (not just 2 or 3) with the same If nodes case.
Thanks,
Vladimir
On 10/2/18 12:20 AM, Tobias Hartmann wrote:
> Hi Vladimir,
>
> On 01.10.2018 20:00, Vladimir Kozlov wrote:
>> We already have this optimization (for no Phi nodes) in RegionNode::Ideal() [1]:
>>
>> http://hg.openjdk.java.net/jdk/jdk/file/2f1698b6db15/src/hotspot/share/opto/cfgnode.cpp#l432
>>
>> I don't think we need to duplicate it here - just return false. Did you found that it does not work
>> in your case?
>
> That optimization only works if the region has no phi users but for shape 2, the region *has* a phi
> user. We can only remove the if because we know that the phi is merging the same value 'x':
>
> If
> / \
> Proj Proj
> \ / [...]
> \ / /
> Region1
> |
> | x x y
> \ | | /
> Phi
>
> For example, without this, TestTrichotomyExpressions::testEqual7 is not optimized. Below is the
> ideal graph for this test, node 41 is the corresponding region and 44 is the useless if because the
> only phi user 71 returns the same value for inputs 1 and 2.
>
> Thanks,
> Tobias
>
>
> Ideal graph for TestTrichotomyExpressions::testEqual7:
>
> 0 Root === 0 65 [[ 0 1 3 40 49 51 ]] inner
> 11 Parm === 3 [[ 33 ]] Parm1: int !jvms: TestTrichotomyExpressions::testEqual7 @ bci:-1
> 10 Parm === 3 [[ 33 ]] Parm0: int !jvms: TestTrichotomyExpressions::testEqual7 @ bci:-1
> 33 CmpI === _ 10 11 [[ 34 43 ]] !jvms: TestTrichotomyExpressions::compare7 @ bci:2
> TestTrichotomyExpressions::testEqual7 @ bci:2
> 34 Bool === _ 33 [[ 35 ]] [ne] !jvms: TestTrichotomyExpressions::compare7 @ bci:2
> TestTrichotomyExpressions::testEqual7 @ bci:2
> 5 Parm === 3 [[ 35 ]] Control !jvms: TestTrichotomyExpressions::testEqual7 @ bci:-1
> 43 Bool === _ 33 [[ 44 ]] [lt] !jvms: TestTrichotomyExpressions::compare7 @ bci:11
> TestTrichotomyExpressions::testEqual7 @ bci:2
> 36 IfTrue === 35 [[ 44 ]] #1 !jvms: TestTrichotomyExpressions::compare7 @ bci:2
> TestTrichotomyExpressions::testEqual7 @ bci:2
> 35 If === 5 34 [[ 36 37 ]] P=0.666667, C=98484.000000 !jvms:
> TestTrichotomyExpressions::compare7 @ bci:2 TestTrichotomyExpressions::testEqual7 @ bci:2
> 44 If === 36 43 [[ 45 46 ]] P=0.500000, C=65656.000000 !jvms:
> TestTrichotomyExpressions::compare7 @ bci:11 TestTrichotomyExpressions::testEqual7 @ bci:2
> 51 ConI === 0 [[ 71 ]] #int:1
> 40 ConI === 0 [[ 71 71 ]] #int:0
> 3 Start === 3 0 [[ 3 5 6 7 8 9 10 11 ]] #{0:control, 1:abIO, 2:memory, 3:rawptr:BotPTR,
> 4:return_address, 5:int, 6:int}
> 37 IfFalse === 35 [[ 41 ]] #0 !jvms: TestTrichotomyExpressions::compare7 @ bci:2
> TestTrichotomyExpressions::testEqual7 @ bci:2
> 45 IfTrue === 44 [[ 41 ]] #1 !jvms: TestTrichotomyExpressions::compare7 @ bci:11
> TestTrichotomyExpressions::testEqual7 @ bci:2
> 46 IfFalse === 44 [[ 41 ]] #0 !jvms: TestTrichotomyExpressions::compare7 @ bci:11
> TestTrichotomyExpressions::testEqual7 @ bci:2
> 71 Phi === 41 40 40 51 [[ 65 ]] #bool !orig=[63] !jvms: TestTrichotomyExpressions::testEqual7
> @ bci:13
> 9 Parm === 3 [[ 65 ]] ReturnAdr !jvms: TestTrichotomyExpressions::testEqual7 @ bci:-1
> 8 Parm === 3 [[ 65 ]] FramePtr !jvms: TestTrichotomyExpressions::testEqual7 @ bci:-1
> 7 Parm === 3 [[ 65 ]] Memory Memory: @BotPTR *+bot, idx=Bot; !jvms:
> TestTrichotomyExpressions::testEqual7 @ bci:-1
> 6 Parm === 3 [[ 65 ]] I_O !jvms: TestTrichotomyExpressions::testEqual7 @ bci:-1
> 41 Region === 41 46 45 37 [[ 41 65 71 ]] !jvms: TestTrichotomyExpressions::compare7 @
> bci:19 TestTrichotomyExpressions::testEqual7 @ bci:2
> 65 Return === 41 6 7 8 9 returns 71 [[ 0 ]]
>
More information about the hotspot-compiler-dev
mailing list