examples.InliningChains Maven / Gradle / Ivy
public class InliningChains
{
public static void main(String[] args)
{
new InliningChains();
}
public InliningChains()
{
long count = 0;
for (int i = 0; i < 100_000; i++)
{
count = chainA1(count);
count = chainB1(count);
}
System.out.println("InliningChains: " + count);
}
private long chainA1(long count)
{
return 1 + chainA2(count);
}
private long chainA2(long count)
{
return 2 + chainA3(count);
}
private long chainA3(long count)
{
return 3 + chainA4(count);
}
private long chainA4(long count)
{
// last link will not be inlined
return bigMethod(count, 4);
}
private long chainB1(long count)
{
return chainB2(count) - 1;
}
private long chainB2(long count)
{
return chainB3(count) - 2;
}
private long chainB3(long count)
{
return count - 3;
}
private long bigMethod(long count, int i)
{
long a, b, c, d, e, f, g;
a = count;
b = count;
c = count;
d = count;
e = count;
f = count;
g = count;
a += i;
b += i;
c += i;
d += i;
e += i;
f += i;
g += i;
a += 1;
b += 2;
c += 3;
d += 4;
e += 5;
f += 6;
g += 7;
a += i;
b += i;
c += i;
d += i;
e += i;
f += i;
g += i;
a -= 7;
b -= 6;
c -= 5;
d -= 4;
e -= 3;
f -= 2;
g -= 1;
a++;
b++;
c++;
d++;
e++;
f++;
g++;
a /= 2;
b /= 2;
c /= 2;
d /= 2;
e /= 2;
f /= 2;
g /= 2;
long result = a + b + c + d + e + f + g;
return result;
}
}