annotate graal/com.oracle.graal.truffle.test/sl/TestInliningRecursive2.sl @ 17257:f735aa886cf6

Truffle: add new inlining tests; adapt tests for context sensitive inlining.
author Christian Humer <christian.humer@gmail.com>
date Mon, 29 Sep 2014 18:46:40 +0200
parents
children 5787218bad91
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17257
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
1 /*
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
2 * Tests that indirect recursions are not inlined.
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
3 */
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
4 function fib(a) {
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
5 if (a == 2 || a == 1) {
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
6 return 1;
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
7 }
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
8 return call(fib, a-1) + call(fib, a-2) + call(void, 0);
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
9 }
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
10
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
11 function call(f, a) {
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
12 return f(a);
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
13 }
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
14
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
15 function void(a) {
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
16 return a;
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
17 }
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
18
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
19 function test() {
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
20 i = 0;
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
21 sum = 0;
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
22 while (i < 100) {
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
23 sum = sum + fib(7);
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
24 i = i + 1;
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
25 }
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
26 return sum;
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
27 }
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
28
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
29 function main() {
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
30 waitForOptimization(callUntilOptimized(test));
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
31 assertTrue(isInlined(test, test, fib), "not inlined: test -> fib");
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
32 if (getOption("TruffleContextSensitiveInlining")) {
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
33 assertTrue(isInlined(test, fib, call), "not inlined: fib -> call");
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
34 assertFalse(isInlined(test, call, fib), "inlined: call -> fib");
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
35 assertTrue(isInlined(test, call, void), "inlined: call -> void");
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
36 }
f735aa886cf6 Truffle: add new inlining tests; adapt tests for context sensitive inlining.
Christian Humer <christian.humer@gmail.com>
parents:
diff changeset
37 }