Deneau, Tom tom.deneau at
Fri Aug 22 12:34:36 UTC 2014

I don't know the details of how the profile is collected but...
In my case with 2000000 elements and 1 different, in the profile, the branchTakenProbability is showing up as 1.0.
For other combinations of elements and differs I saw this:
     Elems    Differs      BTP 
    1000000    1000        < 1.0
    1000000      10        1.0
     100000      10        1.0
      10000      10        1.0
       1000      10        < 1.0

-- Tom

-----Original Message-----
From: Tom Rodriguez [mailto:tom.rodriguez at] 
Sent: Thursday, August 21, 2014 7:12 PM
To: Deneau, Tom
Cc: graal-dev at
Subject: Re: RemoveNeverExecutedCode

On Aug 21, 2014, at 4:39 PM, Deneau, Tom <tom.deneau at> wrote:

> I am trying to benchmark an HSAIL kernel that is implementing the following lambda
>     n -> {
>       if (a1[n] != a2[n]) {
>         isEqual = false;
>      }
> where a1 and a2 are arrays of doubles.   So it is basically doing an Arrays.equals.
> I set up the test to have 2,000,000 elements in the arrays and one of them does not match.
> Before I compile for HSAIL, I enable some profiling by running the above lambda on the cpu in non-parallel mode (IntStream.range().forEach()) so the lambda gets executed 2000000 times (and takes the false branch once).
> But even though one of the elements does not match, when I compile thru graal with the default -G:+RemoveNeverExecutedCode, I see that the isEqual = false path has been considered "not executed" and has been removed.
> Is taking a branch once out of 2,000,000 times considered "not executed"?
> Or is there some other flaw here?

Remember this means never executed according to the profile, so if it doesn't show up in the profile then it didn't happen.  Did the profile include the taken branch?


> Of course I can work around this  in this case by forcing -G:-RemoveNeverExecutedCode but I'd like to understand this.
> This is running in -server mode.
> -- Tom

More information about the graal-dev mailing list