Skip to content

Commit 8a8cd00

Browse files
committed
[GR-19205] Mark a few loops as FULL_UNROLL_UNTIL_RETURN
* For LookupPackedEntryNode, this means the code until the `return`s in the loop is duplicated, which makes the index to read the value constant in compiled code.
1 parent faa6a90 commit 8a8cd00

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

src/main/java/org/truffleruby/core/hash/LookupPackedEntryNode.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package org.truffleruby.core.hash;
1111

12+
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
1213
import org.truffleruby.Layouts;
1314
import org.truffleruby.collections.BiFunctionNode;
1415
import org.truffleruby.language.RubyBaseNode;
@@ -87,7 +88,7 @@ protected int getSize(DynamicObject hash) {
8788
return Layouts.HASH.getSize(hash);
8889
}
8990

90-
@ExplodeLoop
91+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
9192
@Specialization(replaces = "getConstantIndexPackedArray")
9293
protected Object getPackedArray(VirtualFrame frame, DynamicObject hash, Object key, int hashed,
9394
BiFunctionNode defaultValueNode,
@@ -110,7 +111,6 @@ protected Object getPackedArray(VirtualFrame frame, DynamicObject hash, Object k
110111

111112
notInHashProfile.enter();
112113
return defaultValueNode.accept(frame, hash, key);
113-
114114
}
115115

116116
protected boolean equalKeys(boolean compareByIdentity, Object key, int hashed, Object otherKey, int otherHashed) {

src/main/java/org/truffleruby/core/hash/SetNode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package org.truffleruby.core.hash;
1111

12+
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
1213
import org.truffleruby.Layouts;
1314
import org.truffleruby.language.RubyBaseNode;
1415
import org.truffleruby.language.objects.shared.PropagateSharingNode;
@@ -59,7 +60,7 @@ protected Object setNull(DynamicObject hash, Object originalKey, Object value, b
5960
return value;
6061
}
6162

62-
@ExplodeLoop
63+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
6364
@Specialization(guards = "isPackedHash(hash)")
6465
protected Object setPackedArray(DynamicObject hash, Object originalKey, Object value, boolean byIdentity,
6566
@Cached("createBinaryProfile()") ConditionProfile strategyProfile) {

src/main/java/org/truffleruby/language/exceptions/TryNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public Object execute(VirtualFrame frame) {
7878
}
7979
}
8080

81-
@ExplodeLoop(kind = LoopExplosionKind.FULL_EXPLODE_UNTIL_RETURN)
81+
@ExplodeLoop(kind = LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN)
8282
private Object handleException(VirtualFrame frame, RaiseException exception) {
8383
for (RescueNode rescue : rescueParts) {
8484
if (rescue.canHandle(frame, exception.getException())) {

0 commit comments

Comments
 (0)