Skip to content

Commit b1a894d

Browse files
committed
[GR-36557] Fix bad size calculation.
PullRequest: graal/11765
2 parents 347f858 + 041968b commit b1a894d

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

compiler/src/org.graalvm.compiler.truffle.compiler/src/org/graalvm/compiler/truffle/compiler/phases/inlining/CallNode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,10 +381,12 @@ public int getSize() {
381381
return ir.getNodeCount();
382382
}
383383

384-
public void recalculateSize() {
384+
public int recalculateSize() {
385385
if (getCallTree().useSize) {
386386
graphSize = NodeCostUtil.computeGraphSize(ir);
387+
return graphSize;
387388
}
389+
return ir.getNodeCount();
388390
}
389391

390392
public Object getPolicyData() {

compiler/src/org.graalvm.compiler.truffle.compiler/src/org/graalvm/compiler/truffle/compiler/phases/inlining/DefaultInliningPolicy.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ public Object newCallNodeData(CallNode callNode) {
112112
private void inline(CallTree tree) {
113113
String inlineOnly = options.get(PolyglotCompilerOptions.InlineOnly);
114114
final int inliningBudget = options.get(PolyglotCompilerOptions.InliningInliningBudget);
115-
int inlinedSize = tree.getRoot().getSize();
116115
final PriorityQueue<CallNode> inlineQueue = getQueue(tree, CallNode.State.Expanded);
116+
int rootSize = tree.getRoot().getSize();
117117
CallNode candidate;
118118
while ((candidate = inlineQueue.poll()) != null) {
119119
if (!InliningPolicy.acceptForInline(candidate, inlineOnly)) {
@@ -124,12 +124,15 @@ private void inline(CallTree tree) {
124124
continue;
125125
}
126126
int candidateCost = candidate.getSize();
127-
if (inlinedSize + candidateCost > inliningBudget) {
128-
break;
127+
if (rootSize + candidateCost > inliningBudget) {
128+
rootSize = tree.getRoot().recalculateSize();
129+
if (rootSize + candidateCost > inliningBudget) {
130+
break;
131+
}
129132
}
130133
if (data(candidate).callDiff <= 0) {
131134
candidate.inline();
132-
inlinedSize += candidateCost;
135+
rootSize += candidateCost;
133136
updateQueue(candidate, inlineQueue, CallNode.State.Expanded);
134137
}
135138
}

0 commit comments

Comments
 (0)