Request for review: 6896617: Optimize sun.nio.cs.ISO_8859_1$Encode.encodeArrayLoop() on x86
Vladimir Kozlov
vladimir.kozlov at oracle.com
Wed Jan 9 18:11:39 PST 2013
On 1/9/13 5:11 PM, Vitaly Davidovich wrote:
> One could write this as:
> boolean overflow = false;
> if (len > (dl - dp))
> {
> overflow = true;
> len = dl - dp;
> }
>
> One would hope jit can do this automatically and also CSE away the dl -
> dp bit. :)
Yes, JIT can convert Ulf's code into above code - SplitIf optimization
in C2. But it could be complicated by surrounding code.
And generating only one dl-dp is regular optimization which JIT does.
Thanks,
Vladimir
>
> Sent from my phone
>
> On Jan 9, 2013 7:39 PM, "Vladimir Kozlov" <vladimir.kozlov at oracle.com
> <mailto:vladimir.kozlov at oracle.com>> wrote:
>
> From JIT compiler view current code is better since it has only one
> compare. Your code has two compares: one to calculate "overflow" and
> an other (depended on first) to calculate "len".
>
> Thanks,
> Vladimir
>
> On 1/9/13 3:57 PM, Ulf Zibis wrote:
>
> Another little simplification:
> 179 boolean overflow = sr > dr;
> 180 sr = overflow ? dr : sr;
> or in your existing logic:
> 178 int len = sl - sp;
> 179 boolean overflow = len > (dl - dp);
> 180 len = overflow ? dl - dp : len;
> (len is equivalent to sr)
>
> -Ulf
>
> Am 09.01.2013 19:03, schrieb Vladimir Kozlov:
>
> Ulf,
>
> Thank you for this suggestion but I would like to keep
> surrounding
> code intact. I will rename "overflowflag" to "overflow". It
> is used to
> indicate that we should return CoderResult.OVERFLOW result.
>
> Thanks,
> Vladimir
>
> On 1/9/13 3:58 AM, Ulf Zibis wrote:
>
> Am 09.01.2013 01:10, schrieb Vitaly Davidovich:
>
> On Jan 8, 2013 6:18 PM, "Vladimir Kozlov"
> <vladimir.kozlov at oracle.com
> <mailto:vladimir.kozlov at oracle.com>>
> wrote:
>
> http://cr.openjdk.java.net/~**__kvn/6896617_jdk/webrev
> <http://cr.openjdk.java.net/~**kvn/6896617_jdk/webrev><http://__cr.openjdk.java.net/~kvn/__6896617_jdk/webrev
> <http://cr.openjdk.java.net/~kvn/6896617_jdk/webrev>>
>
>
>
> Another tweak:
> 168 char[] sa = src.array();
> 169 int sp = src.arrayOffset() +
> src.position();
> 170 int sr = src.remaining();
> 171 int sl = sp + sr;
> 172 assert (sp <= sl); // superfluous, sr
> is always >= 0
> 173 sp = (sp <= sl ? sp : sl); //
> superfluous "
> 174 byte[] da = dst.array();
> 175 int dp = dst.arrayOffset() +
> dst.position();
> 170 int dr = dst.remaining();
> 176 int dl = dp + dr;
> 177 assert (dp <= dl); // superfluous "
> 178 dp = (dp <= dl ? dp : dl); //
> superfluous "
> 179 boolean overflow = false;
> 180 if (sr > dr) {
> 181 sr = dr;
> 182 overflow = true;
> 183 }
>
> Why you called it "overflowflag", in that way, you could
> name each
> variable "myvaluevariable" or "myvaluefield" ;-)
>
>
> -Ulf
>
>
>
More information about the hotspot-compiler-dev
mailing list