annotate graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java @ 19306:a0a760b0fb5f

pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
author Doug Simon <doug.simon@oracle.com>
date Thu, 12 Feb 2015 01:54:05 +0100
parents 8ab925a6f724
children 61d3cb8e1280
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
1 /*
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
4 *
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
7 * published by the Free Software Foundation.
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
8 *
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
13 * accompanied this code).
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
14 *
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
18 *
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
21 * questions.
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
22 */
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
23 package com.oracle.graal.compiler.test;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
24
15259
d90e5c22ba55 Move GraalOptions to graal.compiler.common.
Josef Eisl <josef.eisl@jku.at>
parents: 14908
diff changeset
25 import static com.oracle.graal.compiler.common.GraalOptions.*;
7896
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
26 import static org.junit.Assert.*;
16841
cbd42807a31f moved NodeInfo and friends into separate com.oracle.graal.nodeinfo project so that annotation processor can be applied to the base Node class
Doug Simon <doug.simon@oracle.com>
parents: 16714
diff changeset
27
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
28 import java.util.*;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
29
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
30 import org.junit.*;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
31
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
32 import com.oracle.graal.debug.*;
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
33 import com.oracle.graal.debug.Debug.Scope;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
34 import com.oracle.graal.graph.*;
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
35 import com.oracle.graal.graph.iterators.*;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
36 import com.oracle.graal.nodes.*;
19306
a0a760b0fb5f pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 19250
diff changeset
37 import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions;
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
38 import com.oracle.graal.nodes.cfg.*;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
39 import com.oracle.graal.nodes.extended.*;
13505
75a67ebd50e8 Introduce a LoweringStage so that lowerings can be conditional on one of the three times that lowering is performed by default
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13370
diff changeset
40 import com.oracle.graal.nodes.spi.*;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
41 import com.oracle.graal.nodes.util.*;
13091
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
42 import com.oracle.graal.options.*;
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
43 import com.oracle.graal.options.OptionValue.OverrideScope;
7896
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
44 import com.oracle.graal.phases.*;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
45 import com.oracle.graal.phases.common.*;
15470
c55f44b3c5e5 remove NodesToDoubles, refactoring of node probability and inlining relevance computation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15421
diff changeset
46 import com.oracle.graal.phases.common.inlining.*;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
47 import com.oracle.graal.phases.schedule.*;
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
48 import com.oracle.graal.phases.schedule.SchedulePhase.SchedulingStrategy;
9267
950a385e059b Make LoweringPhase reentrant.
Roland Schatz <roland.schatz@oracle.com>
parents: 9266
diff changeset
49 import com.oracle.graal.phases.tiers.*;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
50
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
51 /**
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
52 * In these test the FrameStates are explicitly cleared out, so that the scheduling of
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
53 * FloatingReadNodes depends solely on the scheduling algorithm. The FrameStates normally keep the
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
54 * FloatingReadNodes above a certain point, so that they (most of the time...) magically do the
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
55 * right thing.
15421
f8907fc0cbe6 MemSchedTests: disable implicit null checks
Bernhard Urban <bernhard.urban@jku.at>
parents: 15259
diff changeset
56 *
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
57 * The scheduling shouldn't depend on FrameStates, which is tested by this class.
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
58 */
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
59 public class MemoryScheduleTest extends GraphScheduleTest {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
60
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
61 private static enum TestMode {
14908
8db6e76cb658 Formatter: Keep one enum constant per line
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 13694
diff changeset
62 WITH_FRAMESTATES,
8db6e76cb658 Formatter: Keep one enum constant per line
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 13694
diff changeset
63 WITHOUT_FRAMESTATES,
8db6e76cb658 Formatter: Keep one enum constant per line
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 13694
diff changeset
64 INLINED_WITHOUT_FRAMESTATES
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
65 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
66
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
67 public static class Container {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
68
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
69 public int a;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
70 public int b;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
71 public int c;
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
72
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
73 public Object obj;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
74 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
75
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
76 private static final Container container = new Container();
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
77 private static final List<Container> containerList = new ArrayList<>();
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
78
7896
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
79 /**
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
80 * In this test the read should be scheduled before the write.
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
81 */
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
82 public static int testSimpleSnippet() {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
83 try {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
84 return container.a;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
85 } finally {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
86 container.a = 15;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
87 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
88 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
89
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
90 @Test
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
91 public void testSimple() {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
92 for (TestMode mode : TestMode.values()) {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
93 SchedulePhase schedule = getFinalSchedule("testSimpleSnippet", mode);
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
94 StructuredGraph graph = schedule.getCFG().graph;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
95 assertReadAndWriteInSameBlock(schedule, true);
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
96 assertOrderedAfterSchedule(schedule, graph.getNodes().filter(FloatingReadNode.class).first(), graph.getNodes().filter(WriteNode.class).first());
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
97 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
98 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
99
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
100 /**
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
101 * In this case the read should be scheduled in the first block.
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
102 */
11862
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
103 public static int testSplit1Snippet(int a) {
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
104 try {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
105 return container.a;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
106 } finally {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
107 if (a < 0) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
108 container.a = 15;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
109 } else {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
110 container.b = 15;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
111 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
112 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
113 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
114
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
115 @Test
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
116 public void testSplit1() {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
117 for (TestMode mode : TestMode.values()) {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
118 SchedulePhase schedule = getFinalSchedule("testSplit1Snippet", mode);
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
119 assertReadWithinStartBlock(schedule, true);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
120 assertReadWithinAllReturnBlocks(schedule, false);
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
121 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
122 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
123
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
124 /**
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
125 * Here the read should float to the end.
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
126 */
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
127 public static int testSplit2Snippet(int a) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
128 try {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
129 return container.a;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
130 } finally {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
131 if (a < 0) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
132 container.c = 15;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
133 } else {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
134 container.b = 15;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
135 }
13694
0e8c22aa6ec3 adapt tests for new IfNode and MergeNode simplifications
Lukas Stadler <lukas.stadler@jku.at>
parents: 13692
diff changeset
136 container.obj = null;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
137 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
138 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
139
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
140 @Test
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
141 public void testSplit2() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
142 SchedulePhase schedule = getFinalSchedule("testSplit2Snippet", TestMode.WITHOUT_FRAMESTATES);
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
143 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
144 assertReadWithinAllReturnBlocks(schedule, true);
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
145 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
146
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
147 /**
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
148 * Here the read should not float to the end.
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
149 */
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
150 public static int testLoop1Snippet(int a, int b) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
151 try {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
152 return container.a;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
153 } finally {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
154 for (int i = 0; i < a; i++) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
155 if (b < 0) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
156 container.b = 10;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
157 } else {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
158 container.a = 15;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
159 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
160 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
161 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
162 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
163
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
164 @Test
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
165 public void testLoop1() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
166 SchedulePhase schedule = getFinalSchedule("testLoop1Snippet", TestMode.WITHOUT_FRAMESTATES);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
167 assertDeepEquals(6, schedule.getCFG().getBlocks().size());
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
168 assertReadWithinStartBlock(schedule, true);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
169 assertReadWithinAllReturnBlocks(schedule, false);
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
170 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
171
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
172 /**
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
173 * Here the read should float to the end.
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
174 */
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
175 public static int testLoop2Snippet(int a, int b) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
176 try {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
177 return container.a;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
178 } finally {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
179 for (int i = 0; i < a; i++) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
180 if (b < 0) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
181 container.b = 10;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
182 } else {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
183 container.c = 15;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
184 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
185 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
186 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
187 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
188
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
189 @Test
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
190 public void testLoop2() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
191 SchedulePhase schedule = getFinalSchedule("testLoop2Snippet", TestMode.WITHOUT_FRAMESTATES);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
192 assertDeepEquals(6, schedule.getCFG().getBlocks().size());
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
193 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
194 assertReadWithinAllReturnBlocks(schedule, true);
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
195 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
196
7896
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
197 /**
10920
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
198 * Here the read should float out of the loop.
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
199 */
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
200 public static int testLoop3Snippet(int a) {
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
201 int j = 0;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
202 for (int i = 0; i < a; i++) {
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
203 if (i - container.a == 0) {
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
204 break;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
205 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
206 j++;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
207 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
208 return j;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
209 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
210
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
211 @Test
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
212 public void testLoop3() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
213 SchedulePhase schedule = getFinalSchedule("testLoop3Snippet", TestMode.WITHOUT_FRAMESTATES);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
214 assertDeepEquals(6, schedule.getCFG().getBlocks().size());
10920
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
215 assertReadWithinStartBlock(schedule, true);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
216 assertReadWithinAllReturnBlocks(schedule, false);
10920
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
217 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
218
11862
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
219 public String testStringReplaceSnippet(String input) {
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
220 return input.replace('a', 'b');
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
221 }
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
222
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
223 @Test
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
224 public void testStringReplace() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
225 getFinalSchedule("testStringReplaceSnippet", TestMode.INLINED_WITHOUT_FRAMESTATES);
11862
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
226 test("testStringReplaceSnippet", "acbaaa");
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
227 }
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
228
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
229 /**
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
230 * Here the read should float out of the loop.
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
231 */
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
232 public static int testLoop5Snippet(int a, int b, MemoryScheduleTest obj) {
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
233 int ret = 0;
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
234 int bb = b;
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
235 for (int i = 0; i < a; i++) {
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
236 ret = obj.hash;
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
237 if (a > 10) {
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
238 bb++;
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
239 } else {
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
240 bb--;
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
241 }
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
242 ret = ret / 10;
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
243 }
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
244 return ret + bb;
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
245 }
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
246
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
247 @Test
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
248 public void testLoop5() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
249 SchedulePhase schedule = getFinalSchedule("testLoop5Snippet", TestMode.WITHOUT_FRAMESTATES);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
250 assertDeepEquals(10, schedule.getCFG().getBlocks().size());
11862
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
251 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
252 assertReadWithinAllReturnBlocks(schedule, false);
11862
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
253 }
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
254
10920
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
255 /**
7896
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
256 * Here the read should float to the end (into the same block as the return).
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
257 */
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
258 public static int testArrayCopySnippet(Integer intValue, char[] a, char[] b, int len) {
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
259 System.arraycopy(a, 0, b, 0, len);
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
260 return intValue.intValue();
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
261 }
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
262
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
263 @Test
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
264 public void testArrayCopy() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
265 SchedulePhase schedule = getFinalSchedule("testArrayCopySnippet", TestMode.INLINED_WITHOUT_FRAMESTATES);
9602
19c5a07c7843 Introduce a graph() method that returns a StructuredGraph, to make many explicit casts unnecessary
Christian Wimmer <christian.wimmer@oracle.com>
parents: 9601
diff changeset
266 StructuredGraph graph = schedule.getCFG().getStartBlock().getBeginNode().graph();
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
267 assertDeepEquals(1, graph.getNodes(ReturnNode.class).count());
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
268 ReturnNode ret = graph.getNodes(ReturnNode.class).first();
15421
f8907fc0cbe6 MemSchedTests: disable implicit null checks
Bernhard Urban <bernhard.urban@jku.at>
parents: 15259
diff changeset
269 assertTrue(ret.result() + " should be a FloatingReadNode", ret.result() instanceof FloatingReadNode);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
270 assertDeepEquals(schedule.getCFG().blockFor(ret), schedule.getCFG().blockFor(ret.result()));
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
271 assertReadWithinAllReturnBlocks(schedule, true);
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
272 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
273
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
274 /**
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
275 * Here the read should not float to the end.
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
276 */
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
277 public static int testIfRead1Snippet(int a) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
278 int res = container.a;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
279 if (a < 0) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
280 container.a = 10;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
281 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
282 return res;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
283 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
284
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
285 @Test
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
286 public void testIfRead1() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
287 SchedulePhase schedule = getFinalSchedule("testIfRead1Snippet", TestMode.WITHOUT_FRAMESTATES);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
288 assertDeepEquals(3, schedule.getCFG().getBlocks().size());
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
289 assertReadWithinStartBlock(schedule, true);
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
290 assertReadAndWriteInSameBlock(schedule, false);
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
291 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
292
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
293 /**
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
294 * Here the read should float in the else block.
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
295 */
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
296 public static int testIfRead2Snippet(int a) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
297 int res = 0;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
298 if (a < 0) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
299 container.a = 10;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
300 } else {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
301 res = container.a;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
302 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
303 return res;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
304 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
305
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
306 @Test
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
307 public void testIfRead2() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
308 SchedulePhase schedule = getFinalSchedule("testIfRead2Snippet", TestMode.WITHOUT_FRAMESTATES);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
309 assertDeepEquals(3, schedule.getCFG().getBlocks().size());
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
310 assertDeepEquals(1, schedule.getCFG().graph.getNodes().filter(FloatingReadNode.class).count());
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
311 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
312 assertReadWithinAllReturnBlocks(schedule, false);
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
313 assertReadAndWriteInSameBlock(schedule, false);
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
314 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
315
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
316 /**
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
317 * Here the read should float to the end, right before the write.
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
318 */
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
319 public static int testIfRead3Snippet(int a) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
320 if (a < 0) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
321 container.a = 10;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
322 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
323 int res = container.a;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
324 container.a = 20;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
325 return res;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
326 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
327
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
328 @Test
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
329 public void testIfRead3() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
330 SchedulePhase schedule = getFinalSchedule("testIfRead3Snippet", TestMode.WITHOUT_FRAMESTATES);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
331 assertDeepEquals(4, schedule.getCFG().getBlocks().size());
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
332 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
333 assertReadWithinAllReturnBlocks(schedule, true);
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
334 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
335
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
336 /**
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
337 * Here the read should be just in the if branch (with the write).
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
338 */
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
339 public static int testIfRead4Snippet(int a) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
340 if (a > 0) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
341 int res = container.a;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
342 container.a = 0x20;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
343 return res;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
344 } else {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
345 return 0x10;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
346 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
347 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
348
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
349 @Test
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
350 public void testIfRead4() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
351 SchedulePhase schedule = getFinalSchedule("testIfRead4Snippet", TestMode.WITHOUT_FRAMESTATES);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
352 assertDeepEquals(3, schedule.getCFG().getBlocks().size());
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
353 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
354 assertReadWithinAllReturnBlocks(schedule, false);
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
355 assertReadAndWriteInSameBlock(schedule, true);
7896
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
356 }
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
357
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
358 /**
11862
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
359 * Here the read should float to the end.
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
360 */
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
361 public static int testIfRead5Snippet(int a) {
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
362 if (a < 0) {
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
363 container.a = 10;
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
364 }
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
365 return container.a;
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
366 }
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
367
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
368 @Test
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
369 public void testIfRead5() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
370 SchedulePhase schedule = getFinalSchedule("testIfRead5Snippet", TestMode.WITHOUT_FRAMESTATES);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
371 assertDeepEquals(4, schedule.getCFG().getBlocks().size());
11862
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
372 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
373 assertReadWithinAllReturnBlocks(schedule, true);
11862
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
374 assertReadAndWriteInSameBlock(schedule, false);
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
375 }
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
376
15782
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
377 public static int testAntiDependencySnippet(int a) {
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
378 /*
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
379 * This read must not be scheduled after the following write.
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
380 */
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
381 int res = container.a;
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
382 container.a = 10;
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
383
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
384 /*
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
385 * Add some more basic blocks.
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
386 */
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
387 if (a < 0) {
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
388 container.b = 20;
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
389 }
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
390 container.c = 30;
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
391 return res;
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
392 }
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
393
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
394 @Test
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
395 public void testAntiDependency() {
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
396 SchedulePhase schedule = getFinalSchedule("testAntiDependencySnippet", TestMode.WITHOUT_FRAMESTATES);
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
397 assertDeepEquals(4, schedule.getCFG().getBlocks().size());
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
398 assertReadBeforeAllWritesInStartBlock(schedule);
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
399 }
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
400
11862
4635fdfd8256 MemoryScheduling: update testcases
Bernhard Urban <bernhard.urban@jku.at>
parents: 11815
diff changeset
401 /**
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
402 * testing scheduling within a block.
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
403 */
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
404 public static int testBlockScheduleSnippet() {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
405 int res = 0;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
406 container.a = 0x00;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
407 container.a = 0x10;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
408 container.a = 0x20;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
409 container.a = 0x30;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
410 container.a = 0x40;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
411 res = container.a;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
412 container.a = 0x50;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
413 container.a = 0x60;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
414 container.a = 0x70;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
415 return res;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
416 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
417
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
418 @Test
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
419 public void testBlockSchedule() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
420 SchedulePhase schedule = getFinalSchedule("testBlockScheduleSnippet", TestMode.WITHOUT_FRAMESTATES);
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
421 StructuredGraph graph = schedule.getCFG().graph;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
422 NodeIterable<WriteNode> writeNodes = graph.getNodes().filter(WriteNode.class);
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
423
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
424 assertDeepEquals(1, schedule.getCFG().getBlocks().size());
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
425 assertDeepEquals(8, writeNodes.count());
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
426 assertDeepEquals(1, graph.getNodes().filter(FloatingReadNode.class).count());
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
427
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
428 FloatingReadNode read = graph.getNodes().filter(FloatingReadNode.class).first();
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
429
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
430 WriteNode[] writes = new WriteNode[8];
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
431 int i = 0;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
432 for (WriteNode n : writeNodes) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
433 writes[i] = n;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
434 i++;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
435 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
436 assertOrderedAfterSchedule(schedule, writes[4], read);
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
437 assertOrderedAfterSchedule(schedule, read, writes[5]);
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
438 for (int j = 0; j < 7; j++) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
439 assertOrderedAfterSchedule(schedule, writes[j], writes[j + 1]);
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
440 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
441 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
442
13091
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
443 /**
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
444 * read should move inside the loop (out of loop is disabled).
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
445 */
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
446 public static int testBlockSchedule2Snippet(int value) {
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
447 int res = 0;
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
448
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
449 container.a = value;
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
450 for (int i = 0; i < 100; i++) {
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
451 if (i == 10) {
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
452 return container.a;
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
453 }
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
454 res += i;
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
455 }
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
456 return res;
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
457 }
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
458
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
459 @Test
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
460 public void testBlockSchedule2() {
18965
53fcb13db742 Always use read aware memory scheduling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 16841
diff changeset
461 SchedulePhase schedule = getFinalSchedule("testBlockSchedule2Snippet", TestMode.WITHOUT_FRAMESTATES, SchedulingStrategy.LATEST);
13091
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
462 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
463 assertReadWithinAllReturnBlocks(schedule, false);
13091
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
464 assertReadAndWriteInSameBlock(schedule, false);
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
465 }
d1c929751642 MemoryScheduleTest: add testcase for read block scheduling. add support to disable out_of_loop schedule for tests
Bernhard Urban <bernhard.urban@jku.at>
parents: 12503
diff changeset
466
16459
a039ae7e0e50 remove MemoryProxyNode (memory graph is built after proxies are removed)
Lukas Stadler <lukas.stadler@oracle.com>
parents: 16050
diff changeset
467 public static void testProxySnippet() {
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
468 while (container.a < container.b) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
469 List<Container> list = new ArrayList<>(containerList);
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
470 while (container.c < list.size()) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
471 if (container.obj != null) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
472 return;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
473 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
474 container.c++;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
475 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
476 container.a = 0;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
477 container.b--;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
478 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
479 container.b++;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
480 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
481
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
482 @Test
16459
a039ae7e0e50 remove MemoryProxyNode (memory graph is built after proxies are removed)
Lukas Stadler <lukas.stadler@oracle.com>
parents: 16050
diff changeset
483 public void testProxy() {
a039ae7e0e50 remove MemoryProxyNode (memory graph is built after proxies are removed)
Lukas Stadler <lukas.stadler@oracle.com>
parents: 16050
diff changeset
484 SchedulePhase schedule = getFinalSchedule("testProxySnippet", TestMode.WITHOUT_FRAMESTATES);
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
485 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
486 assertReadWithinAllReturnBlocks(schedule, false);
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
487 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
488
10920
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
489 private int hash = 0;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
490 private final char[] value = new char[3];
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
491
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
492 public int testStringHashCodeSnippet() {
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
493 int h = hash;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
494 if (h == 0 && value.length > 0) {
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
495 char[] val = value;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
496
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
497 for (int i = 0; i < value.length; i++) {
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
498 h = 31 * h + val[i];
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
499 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
500 hash = h;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
501 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
502 return h;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
503 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
504
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
505 @Test
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
506 public void testStringHashCode() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
507 SchedulePhase schedule = getFinalSchedule("testStringHashCodeSnippet", TestMode.WITHOUT_FRAMESTATES);
10920
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
508 assertReadWithinStartBlock(schedule, true);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
509 assertReadWithinAllReturnBlocks(schedule, false);
10920
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
510
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
511 hash = 0x1337;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
512 value[0] = 'a';
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
513 value[1] = 'b';
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
514 value[2] = 'c';
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
515 test("testStringHashCodeSnippet");
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
516 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
517
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
518 public static int testLoop4Snippet(int count) {
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
519 int[] a = new int[count];
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
520
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
521 for (int i = 0; i < a.length; i++) {
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
522 a[i] = i;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
523 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
524
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
525 int i = 0;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
526 int iwrap = count - 1;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
527 int sum = 0;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
528
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
529 while (i < count) {
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
530 sum += (a[i] + a[iwrap]) / 2;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
531 iwrap = i;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
532 i++;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
533 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
534 return sum;
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
535 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
536
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
537 @Test
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
538 public void testLoop4() {
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
539 SchedulePhase schedule = getFinalSchedule("testLoop4Snippet", TestMode.WITHOUT_FRAMESTATES);
11815
43bc62c78f77 attempt to canonicalize array length access when lowering array load|store operations
Doug Simon <doug.simon@oracle.com>
parents: 11798
diff changeset
540 assertReadWithinStartBlock(schedule, false);
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
541 assertReadWithinAllReturnBlocks(schedule, false);
10920
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
542 }
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
543
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
544 private void assertReadWithinAllReturnBlocks(SchedulePhase schedule, boolean withinReturnBlock) {
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
545 StructuredGraph graph = schedule.getCFG().graph;
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
546 assertTrue(graph.getNodes(ReturnNode.class).isNotEmpty());
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
547
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
548 int withRead = 0;
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
549 int returnBlocks = 0;
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
550 for (ReturnNode returnNode : graph.getNodes(ReturnNode.class)) {
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
551 Block block = schedule.getCFG().getNodeToBlock().get(returnNode);
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
552 for (Node node : schedule.getBlockToNodesMap().get(block)) {
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
553 if (node instanceof FloatingReadNode) {
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
554 withRead++;
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
555 break;
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
556 }
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
557 }
13692
c215dec9d3cf allow multiple ReturnNodes per graph
Lukas Stadler <lukas.stadler@jku.at>
parents: 13671
diff changeset
558 returnBlocks++;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
559 }
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
560 assertDeepEquals(withRead == returnBlocks, withinReturnBlock);
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
561 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
562
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
563 private void assertReadWithinStartBlock(SchedulePhase schedule, boolean withinStartBlock) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
564 boolean readEncountered = false;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
565 for (Node node : schedule.getBlockToNodesMap().get(schedule.getCFG().getStartBlock())) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
566 if (node instanceof FloatingReadNode) {
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
567 readEncountered = true;
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
568 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
569 }
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
570 assertDeepEquals(withinStartBlock, readEncountered);
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
571 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
572
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
573 private static void assertReadAndWriteInSameBlock(SchedulePhase schedule, boolean inSame) {
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
574 StructuredGraph graph = schedule.getCFG().graph;
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
575 FloatingReadNode read = graph.getNodes().filter(FloatingReadNode.class).first();
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
576 WriteNode write = graph.getNodes().filter(WriteNode.class).first();
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
577 assertTrue(!(inSame ^ schedule.getCFG().blockFor(read) == schedule.getCFG().blockFor(write)));
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
578 }
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
579
15782
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
580 private static void assertReadBeforeAllWritesInStartBlock(SchedulePhase schedule) {
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
581 boolean writeNodeFound = false;
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
582 boolean readNodeFound = false;
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
583 for (Node node : schedule.nodesFor(schedule.getCFG().getStartBlock())) {
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
584 if (node instanceof FloatingReadNode) {
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
585 assertTrue(!writeNodeFound);
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
586 readNodeFound = true;
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
587 } else if (node instanceof WriteNode) {
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
588 writeNodeFound = true;
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
589 }
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
590 }
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
591 assertTrue(readNodeFound);
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
592 }
6a6cb7f2db90 fix wrong handling of memory anti-dependencies in scheduler
Erik Eckstein <erik.eckstein@oracle.com>
parents: 15622
diff changeset
593
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
594 private SchedulePhase getFinalSchedule(final String snippet, final TestMode mode) {
18965
53fcb13db742 Always use read aware memory scheduling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 16841
diff changeset
595 return getFinalSchedule(snippet, mode, SchedulingStrategy.LATEST_OUT_OF_LOOPS);
13370
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
596 }
3e67710a6d08 SchedulePhase: remove old memory aware scheudling
Bernhard Urban <bernhard.urban@jku.at>
parents: 13217
diff changeset
597
18965
53fcb13db742 Always use read aware memory scheduling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 16841
diff changeset
598 private SchedulePhase getFinalSchedule(final String snippet, final TestMode mode, final SchedulingStrategy schedulingStrategy) {
19306
a0a760b0fb5f pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 19250
diff changeset
599 final StructuredGraph graph = parseEager(snippet, AllowAssumptions.NO);
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
600 try (Scope d = Debug.scope("FloatingReadTest", graph)) {
15421
f8907fc0cbe6 MemSchedTests: disable implicit null checks
Bernhard Urban <bernhard.urban@jku.at>
parents: 15259
diff changeset
601 try (OverrideScope s = OptionValue.override(OptScheduleOutOfLoops, schedulingStrategy == SchedulingStrategy.LATEST_OUT_OF_LOOPS, OptImplicitNullChecks, false)) {
19250
8ab925a6f724 made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 18965
diff changeset
602 HighTierContext context = new HighTierContext(getProviders(), null, getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL);
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
603 CanonicalizerPhase canonicalizer = new CanonicalizerPhase(true);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
604 canonicalizer.apply(graph, context);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
605 if (mode == TestMode.INLINED_WITHOUT_FRAMESTATES) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
606 new InliningPhase(canonicalizer).apply(graph, context);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
607 }
13505
75a67ebd50e8 Introduce a LoweringStage so that lowerings can be conditional on one of the three times that lowering is performed by default
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13370
diff changeset
608 new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context);
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
609 if (mode == TestMode.WITHOUT_FRAMESTATES || mode == TestMode.INLINED_WITHOUT_FRAMESTATES) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
610 for (Node node : graph.getNodes()) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
611 if (node instanceof StateSplit) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
612 FrameState stateAfter = ((StateSplit) node).stateAfter();
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
613 if (stateAfter != null) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
614 ((StateSplit) node).setStateAfter(null);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
615 GraphUtil.killWithUnusedFloatingInputs(stateAfter);
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
616 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
617 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
618 }
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
619 }
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
620 Debug.dump(graph, "after removal of framestates");
10896
8106edbdeac9 add NewMemoryAwareScheduling (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10893
diff changeset
621
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
622 new FloatingReadPhase().apply(graph);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
623 new RemoveValueProxyPhase().apply(graph);
7896
649379d3f88d don't kill memory proxies during RemoveValueProxyPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 7871
diff changeset
624
19250
8ab925a6f724 made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents: 18965
diff changeset
625 MidTierContext midContext = new MidTierContext(getProviders(), getCodeCache().getTarget(), OptimisticOptimizations.ALL, graph.method().getProfilingInfo(), null);
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
626 new GuardLoweringPhase().apply(graph, midContext);
13505
75a67ebd50e8 Introduce a LoweringStage so that lowerings can be conditional on one of the three times that lowering is performed by default
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13370
diff changeset
627 new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.MID_TIER).apply(graph, midContext);
16050
7b37f1b6d188 MemoryScheduleTest: fix lowering (lower down to low tier)
Bernhard Urban <bernhard.urban@jku.at>
parents: 15782
diff changeset
628 new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.LOW_TIER).apply(graph, midContext);
10920
9802c478a26c NewMemoryAwareScheduling: fix out of loop scheduling for floating reads (GRAAL-159)
Bernhard Urban <bernhard.urban@jku.at>
parents: 10896
diff changeset
629
18965
53fcb13db742 Always use read aware memory scheduling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 16841
diff changeset
630 SchedulePhase schedule = new SchedulePhase(schedulingStrategy);
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
631 schedule.apply(graph);
15622
7b09605b29c5 renamed GraalTest.assertEquals* to assertDeepEquals to avoid confusion with JUnit API methods
Doug Simon <doug.simon@oracle.com>
parents: 15537
diff changeset
632 assertDeepEquals(1, graph.getNodes().filter(StartNode.class).count());
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
633 return schedule;
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
634 }
13197
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
635 } catch (Throwable e) {
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
636 throw Debug.handle(e);
8569b9e047cd change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents: 13091
diff changeset
637 }
7871
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
638 }
886990f21773 memory-aware scheduling phase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
639 }