Looking very good, thanks.  Ship it!

Actually, can you insert a comment why the injected counts are not scaled?  (Or 
perhaps they should be??)

Also, we may need a followup bug for the code with this comment:
  // Look for the following shape: AndI (ProfileBoolean) (ConI 1))

Since profileBoolean returns a TypeInt::BOOL, the AndI with (ConI 1) should 
fold up.
So there's some work to do in MulNode, which may allow that special pattern 
match to go away.
But I don't want to divert the present bug by a possibly complex dive into 
fixing AndI::Ideal.

(Generally speaking, pattern matching should assume strong normalization of its 
inputs.  Otherwise you end up duplicating pattern match code in many places, 
inconsistently.  Funny one-off idiom checks like this are evidence of 
incomplete IR normalization.  See http://en.wikipedia.org/wiki/Rewriting for 
some background on terms like "normalization" and "confluence" which are 
relevant to C2.)

— John

On Jan 27, 2015, at 8:05 AM, Vladimir Ivanov <vladimir.x.iva...@oracle.com> 
wrote:
> 
> Thanks for the feedback, John!
> 
> Updated webrev:
> http://cr.openjdk.java.net/~vlivanov/8063137/webrev.03/jdk
> http://cr.openjdk.java.net/~vlivanov/8063137/webrev.03/hotspot
> 
> Changes:
>  - renamed MHI::profileBranch to MHI::profileBoolean, and ProfileBranchNode 
> to ProfileBooleanNode;
>  - restructured profile layout ([0] => false_cnt, [1] => true_cnt)
>  - factored out profile injection in a separate function 
> (has_injected_profile() in parse2.cpp)
>  - ProfileBooleanNode stores true/false counts instead of taken/not_taken 
> counts
>  - matching from value counts to taken/not_taken happens in 
> has_injected_profile();
>  - added BoolTest::ne support
>  - sharpened test for AndI case: now it checks AndI (ProfileBoolean) (ConI 1) 
> shape
> 
> Best regards,
> Vladimir Ivanov

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to