Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 382748ca6b77
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 7958447740da
Choose a head ref
  • 6 commits
  • 38 files changed
  • 2 contributors

Commits on Oct 14, 2014

  1. Finally make prepareInstruction clone instrs + labels and not share a…

    …ny state with IRScope.
    
    Problematic that we re-store info back into CFG at this point so debug output matches that
    interpreter.  That is ok though since JIT should still be fine with these changes.  It is
    not fine if we have debug on and interp is printing out CFG while the JIT is changing the
    CFG.  A problem for another day.
    
    Disabled OptimizeDynamicScope for now.  Something with cloning instrs + some closures
    makes it break.  It appears not not find lvars in its flattened state.
    enebo committed Oct 14, 2014
    Copy the full SHA
    a78963b View commit details
  2. Fix OptimizeDynScopesPass issue from last commit. We were using a nul…

    …l check to initialize
    
    which is no longer possible with new InterpreterContext.
    enebo committed Oct 14, 2014
    Copy the full SHA
    ec53bfb View commit details
  3. Copy the full SHA
    44364b1 View commit details
  4. Copy the full SHA
    09b0be3 View commit details

Commits on Oct 15, 2014

  1. Copy the full SHA
    75c138c View commit details
  2. Copy the full SHA
    7958447 View commit details
Showing with 156 additions and 172 deletions.
  1. +1 −1 core/src/main/java/org/jruby/Ruby.java
  2. +4 −4 core/src/main/java/org/jruby/internal/runtime/methods/CallConfiguration.java
  3. +2 −4 core/src/main/java/org/jruby/internal/runtime/methods/InterpretedIRMetaClassBody.java
  4. +5 −9 core/src/main/java/org/jruby/internal/runtime/methods/InterpretedIRMethod.java
  5. +4 −6 core/src/main/java/org/jruby/internal/runtime/methods/JavaMethod.java
  6. +6 −4 core/src/main/java/org/jruby/ir/IRScope.java
  7. +1 −1 core/src/main/java/org/jruby/ir/IRScriptBody.java
  8. +3 −3 core/src/main/java/org/jruby/ir/interpreter/Interpreter.java
  9. +2 −4 core/src/main/java/org/jruby/runtime/Helpers.java
  10. +11 −11 core/src/main/java/org/jruby/runtime/InterpretedIRBlockBody.java
  11. +6 −14 core/src/main/java/org/jruby/runtime/ThreadContext.java
  12. +1 −1 core/src/main/java/org/jruby/truffle/nodes/RubyCallNode.java
  13. +3 −3 core/src/main/java/org/jruby/truffle/nodes/control/DoWhileNode.java
  14. +2 −2 core/src/main/java/org/jruby/truffle/nodes/control/IfNode.java
  15. +3 −3 core/src/main/java/org/jruby/truffle/nodes/control/TryNode.java
  16. +3 −3 core/src/main/java/org/jruby/truffle/nodes/control/WhileNode.java
  17. +2 −2 core/src/main/java/org/jruby/truffle/nodes/core/ArrayConcatNode.java
  18. +16 −16 core/src/main/java/org/jruby/truffle/nodes/core/ArrayNodes.java
  19. +5 −5 core/src/main/java/org/jruby/truffle/nodes/core/BignumNodes.java
  20. +18 −18 core/src/main/java/org/jruby/truffle/nodes/core/FixnumNodes.java
  21. +5 −5 core/src/main/java/org/jruby/truffle/nodes/core/FixnumOrBignumNode.java
  22. +2 −2 core/src/main/java/org/jruby/truffle/nodes/core/FloatNodes.java
  23. +5 −5 core/src/main/java/org/jruby/truffle/nodes/core/GeneralDivModNode.java
  24. +18 −18 core/src/main/java/org/jruby/truffle/nodes/core/HashNodes.java
  25. +6 −6 core/src/main/java/org/jruby/truffle/nodes/core/RangeNodes.java
  26. +2 −2 core/src/main/java/org/jruby/truffle/nodes/core/StringNodes.java
  27. +2 −2 core/src/main/java/org/jruby/truffle/nodes/dispatch/CachedBooleanDispatchNode.java
  28. +5 −5 core/src/main/java/org/jruby/truffle/nodes/literal/RangeLiteralNode.java
  29. +1 −1 core/src/main/java/org/jruby/truffle/nodes/methods/CatchBreakAsReturnNode.java
  30. +1 −1 core/src/main/java/org/jruby/truffle/nodes/methods/CatchNextNode.java
  31. +2 −2 core/src/main/java/org/jruby/truffle/nodes/methods/CatchReturnNode.java
  32. +2 −2 core/src/main/java/org/jruby/truffle/nodes/methods/ExceptionTranslatingNode.java
  33. +1 −1 core/src/main/java/org/jruby/truffle/nodes/methods/RedoableNode.java
  34. +1 −1 core/src/main/java/org/jruby/truffle/nodes/methods/arguments/ReadOptionalArgumentNode.java
  35. +1 −1 core/src/main/java/org/jruby/truffle/nodes/methods/arguments/ReadPreArgumentNode.java
  36. +2 −2 core/src/main/java/org/jruby/truffle/nodes/methods/arguments/ReadRestArgumentNode.java
  37. +1 −1 core/src/main/java/org/jruby/truffle/nodes/methods/arguments/ShouldDestructureNode.java
  38. +1 −1 core/src/main/java/org/jruby/truffle/nodes/objects/ReadInstanceVariableNode.java
2 changes: 1 addition & 1 deletion core/src/main/java/org/jruby/Ruby.java
Original file line number Diff line number Diff line change
@@ -2824,7 +2824,7 @@ public void loadFile(String scriptName, InputStream in, boolean wrap) {

try {
ThreadContext.pushBacktrace(context, "(root)", file, 0);
context.preNodeEval(objectClass, self, scriptName);
context.preNodeEval(self);
ParseResult parseResult = parseFile(scriptName, in, null);

if (wrap) {
Original file line number Diff line number Diff line change
@@ -48,15 +48,15 @@ void post(ThreadContext context) {
},
FrameBacktraceScopeFull (Framing.Backtrace, Scoping.Full) {
void pre(ThreadContext context, IRubyObject self, RubyModule implementer, String name, Block block, StaticScope scope) {
context.preMethodBacktraceAndScope(name, implementer, scope);
context.preMethodBacktraceAndScope(name, scope);
}
void post(ThreadContext context) {
context.postMethodBacktraceAndScope();
}
},
FrameBacktraceScopeDummy (Framing.Backtrace, Scoping.Dummy) {
void pre(ThreadContext context, IRubyObject self, RubyModule implementer, String name, Block block, StaticScope scope) {
context.preMethodBacktraceDummyScope(implementer, name, scope);
context.preMethodBacktraceDummyScope(name, scope);
}
void post(ThreadContext context) {
context.postMethodBacktraceDummyScope();
@@ -72,15 +72,15 @@ void post(ThreadContext context) {
},
FrameNoneScopeFull(Framing.None, Scoping.Full) {
void pre(ThreadContext context, IRubyObject self, RubyModule implementer, String name, Block block, StaticScope scope) {
context.preMethodScopeOnly(implementer, scope);
context.preMethodScopeOnly(scope);
}
void post(ThreadContext context) {
context.postMethodScopeOnly();
}
},
FrameNoneScopeDummy(Framing.None, Scoping.Dummy) {
void pre(ThreadContext context, IRubyObject self, RubyModule implementer, String name, Block block, StaticScope scope) {
context.preMethodNoFrameAndDummyScope(implementer, scope);
context.preMethodNoFrameAndDummyScope(scope);
}
void post(ThreadContext context) {
context.postMethodScopeOnly();
Original file line number Diff line number Diff line change
@@ -31,13 +31,11 @@ protected void post(ThreadContext context) {
@Override
protected void pre(ThreadContext context, IRubyObject self, String name, Block block) {
// update call stacks (push: frame, class, scope, etc.)

StaticScope ss = method.getStaticScope();
context.preMethodFrameAndClass(getImplementationClass(), name, self, block, ss);
context.preMethodFrameOnly(getImplementationClass(), name, self, block);
// Add a parent-link to current dynscope to support non-local returns cheaply
// This doesn't affect variable scoping since local variables will all have
// the right scope depth.
context.pushScope(DynamicScope.newDynamicScope(ss, context.getCurrentScope()));
context.pushScope(DynamicScope.newDynamicScope(method.getStaticScope(), context.getCurrentScope()));
context.setCurrentVisibility(getVisibility());
}

Original file line number Diff line number Diff line change
@@ -128,21 +128,17 @@ protected void post(ThreadContext context) {

protected void pre(ThreadContext context, IRubyObject self, String name, Block block) {
// update call stacks (push: frame, class, scope, etc.)
StaticScope ss = method.getStaticScope();
context.preMethodFrameAndClass(getImplementationClass(), name, self, block, ss);
if (this.pushScope) {
context.pushScope(DynamicScope.newDynamicScope(ss));
}
context.preMethodFrameOnly(getImplementationClass(), name, self, block);
if (this.pushScope) context.pushScope(DynamicScope.newDynamicScope(method.getStaticScope()));
context.setCurrentVisibility(getVisibility());
}

public void ensureInstrsReady() {
// SSS FIXME: Move this out of here to some other place?
// Prepare method if not yet done so we know if the method has an explicit/implicit call protocol
if (method.getInstrsForInterpretation() == null) {
InterpreterContext context = method.prepareForInterpretation();
this.pushScope = !context.getFlags().contains(IRFlags.DYNSCOPE_ELIMINATED);
}
// FIXME: This is resetting this flag per call and I now may want to push interpretercontext through to interpreter
InterpreterContext context = method.prepareForInterpretation();
this.pushScope = !context.getFlags().contains(IRFlags.DYNSCOPE_ELIMINATED);
}

public DynamicMethod getMethodForCaching() {
Original file line number Diff line number Diff line change
@@ -25,9 +25,7 @@
***** END LICENSE BLOCK *****/
package org.jruby.internal.runtime.methods;

import org.jruby.Ruby;
import org.jruby.RubyModule;
import org.jruby.anno.JRubyMethod;
import org.jruby.parser.StaticScope;
import org.jruby.runtime.Arity;
import org.jruby.runtime.Block;
@@ -120,23 +118,23 @@ protected final void preFrameOnly(ThreadContext context, IRubyObject self, Strin
}

protected final void preScopeOnly(ThreadContext context) {
context.preMethodScopeOnly(implementationClass, staticScope);
context.preMethodScopeOnly(staticScope);
}

protected final void preNoFrameDummyScope(ThreadContext context) {
context.preMethodNoFrameAndDummyScope(implementationClass, staticScope);
context.preMethodNoFrameAndDummyScope(staticScope);
}

protected final void preBacktraceOnly(ThreadContext context, String name) {
context.preMethodBacktraceOnly(name);
}

protected final void preBacktraceDummyScope(ThreadContext context, String name) {
context.preMethodBacktraceDummyScope(implementationClass, name, staticScope);
context.preMethodBacktraceDummyScope(name, staticScope);
}

protected final void preBacktraceAndScope(ThreadContext context, String name) {
context.preMethodBacktraceAndScope(name, implementationClass, staticScope);
context.preMethodBacktraceAndScope(name, staticScope);
}

protected final void preNoop() {}
10 changes: 6 additions & 4 deletions core/src/main/java/org/jruby/ir/IRScope.java
Original file line number Diff line number Diff line change
@@ -16,7 +16,6 @@
import org.jruby.ir.representations.BasicBlock;
import org.jruby.ir.representations.CFG;
import org.jruby.ir.representations.CFGLinearizer;
import org.jruby.ir.runtime.IRRuntimeHelpers;
import org.jruby.ir.transformations.inlining.CFGInliner;
import org.jruby.ir.transformations.inlining.SimpleCloneInfo;
import org.jruby.parser.StaticScope;
@@ -493,17 +492,20 @@ protected Instr[] prepareInstructions() {
// All same-named labels must be same Java instance for this to work or we would need
// to examine all Label operands and update this as well which would be expensive.
b.getLabel().setTargetPC(ipc);
// Set all renamed labels (simple clone makes a new copy) to their proper ipc
cloneInfo.getRenamedLabel(b.getLabel()).setTargetPC(ipc);

List<Instr> bbInstrs = b.getInstrs();
int bbInstrsLength = bbInstrs.size();
for (int i = 0; i < bbInstrsLength; i++) {
Instr instr = bbInstrs.get(i);
if (!(instr instanceof ReceiveSelfInstr)) {
if (instr instanceof Specializeable) {
instr = ((Specializeable) instr).specializeForInterpretation();
Instr newInstr = instr.clone(cloneInfo);

if (newInstr instanceof Specializeable) {
newInstr = ((Specializeable) newInstr).specializeForInterpretation();
}

Instr newInstr = instr;//.clone(cloneInfo);
newInstr.setIPC(ipc);

// We add back to original CFG so that debug output will match up with what
2 changes: 1 addition & 1 deletion core/src/main/java/org/jruby/ir/IRScriptBody.java
Original file line number Diff line number Diff line change
@@ -105,7 +105,7 @@ public IRubyObject interpret(ThreadContext context, IRubyObject self) {

scope.setModule(currModule);
if (!this.flags.contains(IRFlags.DYNSCOPE_ELIMINATED)) {
context.preMethodScopeOnly(currModule, scope);
context.preMethodScopeOnly(scope);
}
context.setCurrentVisibility(Visibility.PRIVATE);

6 changes: 3 additions & 3 deletions core/src/main/java/org/jruby/ir/interpreter/Interpreter.java
Original file line number Diff line number Diff line change
@@ -341,12 +341,12 @@ private static void processCall(ThreadContext context, Instr instr, Operation op
}
}

private static void processBookKeepingOp(ThreadContext context, Instr instr, Operation operation, StaticScope currScope,
private static void processBookKeepingOp(ThreadContext context, Instr instr, Operation operation,
String name, IRubyObject[] args, IRubyObject self, Block block,
RubyModule implClass, Visibility visibility, Object[] temp, DynamicScope currDynamicScope) {
switch(operation) {
case PUSH_FRAME:
context.preMethodFrameAndClass(implClass, name, self, block, currScope);
context.preMethodFrameOnly(implClass, name, self, block);
context.setCurrentVisibility(visibility);
break;
case POP_FRAME:
@@ -588,7 +588,7 @@ private static IRubyObject interpret(ThreadContext context, IRubyObject self,
currDynScope = getNewDynScope(context, scope, currScope);
context.pushScope(currDynScope);
} else {
processBookKeepingOp(context, instr, operation, currScope, name, args, self, block, implClass, visibility, temp, currDynScope);
processBookKeepingOp(context, instr, operation, name, args, self, block, implClass, visibility, temp, currDynScope);
}
break;
case OTHER_OP:
6 changes: 2 additions & 4 deletions core/src/main/java/org/jruby/runtime/Helpers.java
Original file line number Diff line number Diff line change
@@ -1708,18 +1708,16 @@ public static StaticScope preLoad(ThreadContext context, String scopeString, boo
}

public static void preLoadCommon(ThreadContext context, StaticScope staticScope, boolean wrap) {
RubyClass objectClass = context.runtime.getObject();
IRubyObject topLevel = context.runtime.getTopSelf();
if (wrap) {
staticScope.setModule(RubyModule.newModule(context.runtime));
} else {
staticScope.setModule(objectClass);
staticScope.setModule(context.runtime.getObject());
}
DynamicScope scope = DynamicScope.newDynamicScope(staticScope);

// Each root node has a top-level scope that we need to push
context.preScopedBody(scope);
context.preNodeEval(objectClass, topLevel);
context.preNodeEval(context.runtime.getTopSelf());
}

public static void postLoad(ThreadContext context) {
22 changes: 11 additions & 11 deletions core/src/main/java/org/jruby/runtime/InterpretedIRBlockBody.java
Original file line number Diff line number Diff line change
@@ -26,18 +26,18 @@ public InterpretedIRBlockBody(IRClosure closure, Arity arity, int argumentType)
}

public void ensureInstrsReady(Block.Type blockType) {
// FIXME: probably save interpcontext as a field and use that as a check so we are not retrieving per call
// Prepare closure if not yet done so we know if the method requires a dynscope or not
if (closure.getInstrsForInterpretation() == null) {
InterpreterContext context = closure.prepareForInterpretation();
this.pushScope = !context.getFlags().contains(IRFlags.DYNSCOPE_ELIMINATED);
this.reuseParentScope = context.getFlags().contains(IRFlags.REUSE_PARENT_DYNSCOPE);
if (IRRuntimeHelpers.isDebug()) {
LOG.info("Executing '" + closure + "'");
// The base IR may not have been processed yet
CFG cfg = closure.getCFG();
LOG.info("Graph:\n" + cfg.toStringGraph());
LOG.info("CFG:\n" + cfg.toStringInstrs());
}
InterpreterContext context = closure.prepareForInterpretation();
pushScope = !context.getFlags().contains(IRFlags.DYNSCOPE_ELIMINATED);
reuseParentScope = context.getFlags().contains(IRFlags.REUSE_PARENT_DYNSCOPE);

if (IRRuntimeHelpers.isDebug()) {
LOG.info("Executing '" + closure + "' (pushScope=" + pushScope + ", reuseParentScope=" + reuseParentScope);
// The base IR may not have been processed yet
CFG cfg = closure.getCFG();
LOG.info("Graph:\n" + cfg.toStringGraph());
LOG.info("CFG:\n" + cfg.toStringInstrs());
}
}

20 changes: 6 additions & 14 deletions core/src/main/java/org/jruby/runtime/ThreadContext.java
Original file line number Diff line number Diff line change
@@ -805,10 +805,6 @@ public void postBsfApply() {
popFrame();
}

public void preMethodFrameAndClass(RubyModule implClass, String name, IRubyObject self, Block block, StaticScope staticScope) {
pushCallFrame(implClass, name, self, block);
}

public void preMethodFrameAndScope(RubyModule clazz, String name, IRubyObject self, Block block,
StaticScope staticScope) {
pushCallFrame(clazz, name, self, block);
@@ -821,7 +817,7 @@ public void preMethodFrameAndDummyScope(RubyModule clazz, String name, IRubyObje
pushScope(staticScope.getDummyScope());
}

public void preMethodNoFrameAndDummyScope(RubyModule clazz, StaticScope staticScope) {
public void preMethodNoFrameAndDummyScope(StaticScope staticScope) {
pushScope(staticScope.getDummyScope());
}

@@ -838,16 +834,16 @@ public void postMethodFrameOnly() {
popFrame();
}

public void preMethodScopeOnly(RubyModule clazz, StaticScope staticScope) {
public void preMethodScopeOnly(StaticScope staticScope) {
pushScope(DynamicScope.newDynamicScope(staticScope));
}

public void postMethodScopeOnly() {
popScope();
}

public void preMethodBacktraceAndScope(String name, RubyModule clazz, StaticScope staticScope) {
preMethodScopeOnly(clazz, staticScope);
public void preMethodBacktraceAndScope(String name, StaticScope staticScope) {
preMethodScopeOnly(staticScope);
}

public void postMethodBacktraceAndScope() {
@@ -857,7 +853,7 @@ public void postMethodBacktraceAndScope() {
public void preMethodBacktraceOnly(String name) {
}

public void preMethodBacktraceDummyScope(RubyModule clazz, String name, StaticScope staticScope) {
public void preMethodBacktraceDummyScope(String name, StaticScope staticScope) {
pushScope(staticScope.getDummyScope());
}

@@ -877,11 +873,7 @@ public void prepareTopLevel(RubyClass objectClass, IRubyObject topSelf) {
getCurrentScope().getStaticScope().setModule(objectClass);
}

public void preNodeEval(RubyModule rubyClass, IRubyObject self, String name) {
pushEvalFrame(self);
}

public void preNodeEval(RubyModule rubyClass, IRubyObject self) {
public void preNodeEval(IRubyObject self) {
pushEvalFrame(self);
}

Original file line number Diff line number Diff line change
@@ -40,7 +40,7 @@ public class RubyCallNode extends RubyNode {

@Child protected DispatchHeadNode dispatchHead;

private final BranchProfile splatNotArrayProfile = new BranchProfile();
private final BranchProfile splatNotArrayProfile = BranchProfile.create();

@CompilerDirectives.CompilationFinal private boolean seenNullInUnsplat = false;
@CompilerDirectives.CompilationFinal private boolean seenIntegerFixnumInUnsplat = false;
Original file line number Diff line number Diff line change
@@ -31,9 +31,9 @@ public class DoWhileNode extends RubyNode {
@Child protected BooleanCastNode condition;
@Child protected RubyNode body;

private final BranchProfile breakProfile = new BranchProfile();
private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile breakProfile = BranchProfile.create();
private final BranchProfile nextProfile = BranchProfile.create();
private final BranchProfile redoProfile = BranchProfile.create();

public DoWhileNode(RubyContext context, SourceSection sourceSection, BooleanCastNode condition, RubyNode body) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -28,8 +28,8 @@ public class IfNode extends RubyNode {
@Child protected RubyNode thenBody;
@Child protected RubyNode elseBody;

private final BranchProfile thenProfile = new BranchProfile();
private final BranchProfile elseProfile = new BranchProfile();
private final BranchProfile thenProfile = BranchProfile.create();
private final BranchProfile elseProfile = BranchProfile.create();

@CompilerDirectives.CompilationFinal private int thenCount;
@CompilerDirectives.CompilationFinal private int elseCount;
Original file line number Diff line number Diff line change
@@ -30,9 +30,9 @@ public class TryNode extends RubyNode {
@Children final RescueNode[] rescueParts;
@Child protected RubyNode elsePart;

private final BranchProfile elseProfile = new BranchProfile();
private final BranchProfile controlFlowProfile = new BranchProfile();
private final BranchProfile raiseExceptionProfile = new BranchProfile();
private final BranchProfile elseProfile = BranchProfile.create();
private final BranchProfile controlFlowProfile = BranchProfile.create();
private final BranchProfile raiseExceptionProfile = BranchProfile.create();

public TryNode(RubyContext context, SourceSection sourceSection, ExceptionTranslatingNode tryPart, RescueNode[] rescueParts, RubyNode elsePart) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -29,9 +29,9 @@ public class WhileNode extends RubyNode {
@Child protected BooleanCastNode condition;
@Child protected RubyNode body;

private final BranchProfile breakProfile = new BranchProfile();
private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile breakProfile = BranchProfile.create();
private final BranchProfile nextProfile = BranchProfile.create();
private final BranchProfile redoProfile = BranchProfile.create();

public WhileNode(RubyContext context, SourceSection sourceSection, BooleanCastNode condition, RubyNode body) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -26,8 +26,8 @@ public final class ArrayConcatNode extends RubyNode {
@Children protected final RubyNode[] children;
@Child protected ArrayBuilderNode arrayBuilderNode;

private final BranchProfile appendArrayProfile = new BranchProfile();
private final BranchProfile appendObjectProfile = new BranchProfile();
private final BranchProfile appendArrayProfile = BranchProfile.create();
private final BranchProfile appendObjectProfile = BranchProfile.create();

public ArrayConcatNode(RubyContext context, SourceSection sourceSection, RubyNode[] children) {
super(context, sourceSection);
32 changes: 16 additions & 16 deletions core/src/main/java/org/jruby/truffle/nodes/core/ArrayNodes.java
Original file line number Diff line number Diff line change
@@ -643,11 +643,11 @@ public Object getObject(RubyArray array, RubyRange.IntegerFixnumRange range, Und
@CoreMethod(names = "[]=", minArgs = 2, maxArgs = 3, lowerFixnumParameters = 0)
public abstract static class IndexSetNode extends ArrayCoreMethodNode {

private final BranchProfile tooSmallBranch = new BranchProfile();
private final BranchProfile pastEndBranch = new BranchProfile();
private final BranchProfile appendBranch = new BranchProfile();
private final BranchProfile beyondBranch = new BranchProfile();
private final BranchProfile reallocateBranch = new BranchProfile();
private final BranchProfile tooSmallBranch = BranchProfile.create();
private final BranchProfile pastEndBranch = BranchProfile.create();
private final BranchProfile appendBranch = BranchProfile.create();
private final BranchProfile beyondBranch = BranchProfile.create();
private final BranchProfile reallocateBranch = BranchProfile.create();

public IndexSetNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -1238,8 +1238,8 @@ public Object deleteObject(VirtualFrame frame, RubyArray array, Object value) {
@CoreMethod(names = "delete_at", minArgs = 1, maxArgs = 1)
public abstract static class DeleteAtNode extends ArrayCoreMethodNode {

private static final BranchProfile tooSmallBranch = new BranchProfile();
private static final BranchProfile beyondEndBranch = new BranchProfile();
private static final BranchProfile tooSmallBranch = BranchProfile.create();
private static final BranchProfile beyondEndBranch = BranchProfile.create();

public DeleteAtNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -1335,9 +1335,9 @@ public Object dupObject(RubyArray array) {
@CoreMethod(names = "each", needsBlock = true, maxArgs = 0)
public abstract static class EachNode extends YieldingArrayCoreMethodNode {

private final BranchProfile breakProfile = new BranchProfile();
private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile breakProfile = BranchProfile.create();
private final BranchProfile nextProfile = BranchProfile.create();
private final BranchProfile redoProfile = BranchProfile.create();

public EachNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -1505,9 +1505,9 @@ public Object eachObject(VirtualFrame frame, RubyArray array, RubyProc block) {
@CoreMethod(names = "each_with_index", needsBlock = true, maxArgs = 0)
public abstract static class EachWithIndexNode extends YieldingArrayCoreMethodNode {

private final BranchProfile breakProfile = new BranchProfile();
private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile breakProfile = BranchProfile.create();
private final BranchProfile nextProfile = BranchProfile.create();
private final BranchProfile redoProfile = BranchProfile.create();

public EachWithIndexNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -1926,7 +1926,7 @@ public Object inject(VirtualFrame frame, RubyArray array, RubySymbol symbol, Und
@CoreMethod(names = "insert", minArgs = 2, maxArgs = 2)
public abstract static class InsertNode extends ArrayCoreMethodNode {

private static final BranchProfile tooSmallBranch = new BranchProfile();
private static final BranchProfile tooSmallBranch = BranchProfile.create();

public InsertNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -2617,7 +2617,7 @@ public Object product(RubyArray array, RubyArray other) {
@CoreMethod(names = {"push", "<<"}, isSplatted = true)
public abstract static class PushNode extends ArrayCoreMethodNode {

private final BranchProfile extendBranch = new BranchProfile();
private final BranchProfile extendBranch = BranchProfile.create();

public PushNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -2734,7 +2734,7 @@ protected boolean isSingleLongFixnum(RubyArray array, Object... values) {

public abstract static class PushOneNode extends ArrayCoreMethodNode {

private final BranchProfile extendBranch = new BranchProfile();
private final BranchProfile extendBranch = BranchProfile.create();

public PushOneNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
10 changes: 5 additions & 5 deletions core/src/main/java/org/jruby/truffle/nodes/core/BignumNodes.java
Original file line number Diff line number Diff line change
@@ -618,7 +618,7 @@ public abstract static class LeftShiftNode extends CoreMethodNode {

@Child protected FixnumOrBignumNode fixnumOrBignum;

private final BranchProfile bLessThanZero = new BranchProfile();
private final BranchProfile bLessThanZero = BranchProfile.create();

public LeftShiftNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -647,7 +647,7 @@ public abstract static class RightShiftNode extends CoreMethodNode {

@Child protected FixnumOrBignumNode fixnumOrBignum;

private final BranchProfile bLessThanZero = new BranchProfile();
private final BranchProfile bLessThanZero = BranchProfile.create();

public RightShiftNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -696,9 +696,9 @@ public Object nonZero(BigInteger value) {
@CoreMethod(names = "times", needsBlock = true, maxArgs = 0)
public abstract static class TimesNode extends YieldingCoreMethodNode {

private final BranchProfile breakProfile = new BranchProfile();
private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile breakProfile = BranchProfile.create();
private final BranchProfile nextProfile = BranchProfile.create();
private final BranchProfile redoProfile = BranchProfile.create();

public TimesNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
36 changes: 18 additions & 18 deletions core/src/main/java/org/jruby/truffle/nodes/core/FixnumNodes.java
Original file line number Diff line number Diff line change
@@ -391,14 +391,14 @@ protected static boolean canShiftIntoInt(int a, int b) {
@CoreMethod(names = "/", minArgs = 1, maxArgs = 1)
public abstract static class DivNode extends CoreMethodNode {

private final BranchProfile bGreaterZero = new BranchProfile();
private final BranchProfile bGreaterZeroAGreaterEqualZero = new BranchProfile();
private final BranchProfile bGreaterZeroALessZero = new BranchProfile();
private final BranchProfile aGreaterZero = new BranchProfile();
private final BranchProfile bMinusOne = new BranchProfile();
private final BranchProfile bMinusOneAMinimum = new BranchProfile();
private final BranchProfile bMinusOneANotMinimum = new BranchProfile();
private final BranchProfile finalCase = new BranchProfile();
private final BranchProfile bGreaterZero = BranchProfile.create();
private final BranchProfile bGreaterZeroAGreaterEqualZero = BranchProfile.create();
private final BranchProfile bGreaterZeroALessZero = BranchProfile.create();
private final BranchProfile aGreaterZero = BranchProfile.create();
private final BranchProfile bMinusOne = BranchProfile.create();
private final BranchProfile bMinusOneAMinimum = BranchProfile.create();
private final BranchProfile bMinusOneANotMinimum = BranchProfile.create();
private final BranchProfile finalCase = BranchProfile.create();

public DivNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -570,7 +570,7 @@ public int div(@SuppressWarnings("unused") long a, @SuppressWarnings("unused") B
@CoreMethod(names = "%", minArgs = 1, maxArgs = 1)
public abstract static class ModNode extends CoreMethodNode {

private final BranchProfile adjustProfile = new BranchProfile();
private final BranchProfile adjustProfile = BranchProfile.create();

public ModNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -1201,9 +1201,9 @@ public abstract static class LeftShiftNode extends CoreMethodNode {

@Child protected FixnumOrBignumNode fixnumOrBignum;

private final BranchProfile bAboveZeroProfile = new BranchProfile();
private final BranchProfile bNotAboveZeroProfile = new BranchProfile();
private final BranchProfile useBignumProfile = new BranchProfile();
private final BranchProfile bAboveZeroProfile = BranchProfile.create();
private final BranchProfile bNotAboveZeroProfile = BranchProfile.create();
private final BranchProfile useBignumProfile = BranchProfile.create();

public LeftShiftNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -1439,9 +1439,9 @@ public NilPlaceholder step(VirtualFrame frame, int from, int to, int step, RubyP
@CoreMethod(names = "times", needsBlock = true, maxArgs = 0)
public abstract static class TimesNode extends YieldingCoreMethodNode {

private final BranchProfile breakProfile = new BranchProfile();
private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile breakProfile = BranchProfile.create();
private final BranchProfile nextProfile = BranchProfile.create();
private final BranchProfile redoProfile = BranchProfile.create();

public TimesNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -1608,9 +1608,9 @@ public RubyString toS(long n) {
@CoreMethod(names = "upto", needsBlock = true, minArgs = 1, maxArgs = 1)
public abstract static class UpToNode extends YieldingCoreMethodNode {

private final BranchProfile breakProfile = new BranchProfile();
private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile breakProfile = BranchProfile.create();
private final BranchProfile nextProfile = BranchProfile.create();
private final BranchProfile redoProfile = BranchProfile.create();

public UpToNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -19,12 +19,12 @@

public class FixnumOrBignumNode extends Node {

private final BranchProfile lowerProfile = new BranchProfile();
private final BranchProfile integerProfile = new BranchProfile();
private final BranchProfile longProfile = new BranchProfile();
private final BranchProfile lowerProfile = BranchProfile.create();
private final BranchProfile integerProfile = BranchProfile.create();
private final BranchProfile longProfile = BranchProfile.create();

private final BranchProfile bignumProfile = new BranchProfile();
private final BranchProfile checkLongProfile = new BranchProfile();
private final BranchProfile bignumProfile = BranchProfile.create();
private final BranchProfile checkLongProfile = BranchProfile.create();

public Object fixnumOrBignum(BigInteger value) {
if (value.compareTo(RubyFixnum.MIN_VALUE_BIG) >= 0 && value.compareTo(RubyFixnum.MAX_VALUE_BIG) <= 0) {
Original file line number Diff line number Diff line change
@@ -571,8 +571,8 @@ public abstract static class RoundNode extends CoreMethodNode {

@Child protected FixnumOrBignumNode fixnumOrBignum;

private final BranchProfile greaterZero = new BranchProfile();
private final BranchProfile lessZero = new BranchProfile();
private final BranchProfile greaterZero = BranchProfile.create();
private final BranchProfile lessZero = BranchProfile.create();

public RoundNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -24,11 +24,11 @@ public class GeneralDivModNode extends Node {
@Child protected FixnumOrBignumNode fixnumOrBignumQuotient;
@Child protected FixnumOrBignumNode fixnumOrBignumRemainder;

private final BranchProfile bZeroProfile = new BranchProfile();
private final BranchProfile bMinusOneProfile = new BranchProfile();
private final BranchProfile bigIntegerFixnumProfile = new BranchProfile();
private final BranchProfile useFixnumPairProfile = new BranchProfile();
private final BranchProfile useObjectPairProfile = new BranchProfile();
private final BranchProfile bZeroProfile = BranchProfile.create();
private final BranchProfile bMinusOneProfile = BranchProfile.create();
private final BranchProfile bigIntegerFixnumProfile = BranchProfile.create();
private final BranchProfile useFixnumPairProfile = BranchProfile.create();
private final BranchProfile useObjectPairProfile = BranchProfile.create();

public GeneralDivModNode(RubyContext context) {
assert context != null;
36 changes: 18 additions & 18 deletions core/src/main/java/org/jruby/truffle/nodes/core/HashNodes.java
Original file line number Diff line number Diff line change
@@ -93,14 +93,14 @@ public boolean equal(RubyHash a, RubySymbol b) {
@CoreMethod(names = "[]", onSingleton = true, isSplatted = true)
public abstract static class ConstructNode extends HashCoreMethodNode {

private final BranchProfile singleObject = new BranchProfile();
private final BranchProfile singleArray = new BranchProfile();
private final BranchProfile objectArray = new BranchProfile();
private final BranchProfile smallObjectArray = new BranchProfile();
private final BranchProfile largeObjectArray = new BranchProfile();
private final BranchProfile otherArray = new BranchProfile();
private final BranchProfile singleOther = new BranchProfile();
private final BranchProfile keyValues = new BranchProfile();
private final BranchProfile singleObject = BranchProfile.create();
private final BranchProfile singleArray = BranchProfile.create();
private final BranchProfile objectArray = BranchProfile.create();
private final BranchProfile smallObjectArray = BranchProfile.create();
private final BranchProfile largeObjectArray = BranchProfile.create();
private final BranchProfile otherArray = BranchProfile.create();
private final BranchProfile singleOther = BranchProfile.create();
private final BranchProfile keyValues = BranchProfile.create();

public ConstructNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -198,8 +198,8 @@ public abstract static class GetIndexNode extends HashCoreMethodNode {
@Child protected DispatchHeadNode eqlNode;
@Child protected YieldDispatchHeadNode yield;

private final BranchProfile notInHashProfile = new BranchProfile();
private final BranchProfile useDefaultProfile = new BranchProfile();
private final BranchProfile notInHashProfile = BranchProfile.create();
private final BranchProfile useDefaultProfile = BranchProfile.create();

public GetIndexNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -276,9 +276,9 @@ public abstract static class SetIndexNode extends HashCoreMethodNode {

@Child protected DispatchHeadNode eqlNode;

private final BranchProfile considerExtendProfile = new BranchProfile();
private final BranchProfile extendProfile = new BranchProfile();
private final BranchProfile transitionToLinkedHashMapProfile = new BranchProfile();
private final BranchProfile considerExtendProfile = BranchProfile.create();
private final BranchProfile extendProfile = BranchProfile.create();
private final BranchProfile transitionToLinkedHashMapProfile = BranchProfile.create();

public SetIndexNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -791,11 +791,11 @@ public abstract static class MergeNode extends HashCoreMethodNode {

@Child protected DispatchHeadNode eqlNode;

private final BranchProfile nothingFromFirstProfile = new BranchProfile();
private final BranchProfile considerNothingFromSecondProfile = new BranchProfile();
private final BranchProfile nothingFromSecondProfile = new BranchProfile();
private final BranchProfile considerResultIsSmallProfile = new BranchProfile();
private final BranchProfile resultIsSmallProfile = new BranchProfile();
private final BranchProfile nothingFromFirstProfile = BranchProfile.create();
private final BranchProfile considerNothingFromSecondProfile = BranchProfile.create();
private final BranchProfile nothingFromSecondProfile = BranchProfile.create();
private final BranchProfile considerResultIsSmallProfile = BranchProfile.create();
private final BranchProfile resultIsSmallProfile = BranchProfile.create();

private final int smallHashSize = RubyContext.HASHES_SMALL;

12 changes: 6 additions & 6 deletions core/src/main/java/org/jruby/truffle/nodes/core/RangeNodes.java
Original file line number Diff line number Diff line change
@@ -112,9 +112,9 @@ public RubyArray collect(VirtualFrame frame, RubyRange.IntegerFixnumRange range,
@CoreMethod(names = "each", needsBlock = true, maxArgs = 0, lowerFixnumSelf = true)
public abstract static class EachNode extends YieldingCoreMethodNode {

private final BranchProfile breakProfile = new BranchProfile();
private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile breakProfile = BranchProfile.create();
private final BranchProfile nextProfile = BranchProfile.create();
private final BranchProfile redoProfile = BranchProfile.create();

public EachNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
@@ -278,9 +278,9 @@ public Object last(RubyRange.ObjectRange range) {
@CoreMethod(names = "step", needsBlock = true, minArgs = 1, maxArgs = 1)
public abstract static class StepNode extends YieldingCoreMethodNode {

private final BranchProfile breakProfile = new BranchProfile();
private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile breakProfile = BranchProfile.create();
private final BranchProfile nextProfile = BranchProfile.create();
private final BranchProfile redoProfile = BranchProfile.create();

public StepNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -182,8 +182,8 @@ public FormatNode(FormatNode prev) {
super(prev);
}

private final BranchProfile singleArrayProfile = new BranchProfile();
private final BranchProfile multipleArgumentsProfile = new BranchProfile();
private final BranchProfile singleArrayProfile = BranchProfile.create();
private final BranchProfile multipleArgumentsProfile = BranchProfile.create();

@Specialization
public RubyString format(RubyString format, Object[] args) {
Original file line number Diff line number Diff line change
@@ -29,14 +29,14 @@ public abstract class CachedBooleanDispatchNode extends CachedDispatchNode {

private final Assumption falseUnmodifiedAssumption;
private final RubyMethod falseMethod;
private final BranchProfile falseProfile = new BranchProfile();
private final BranchProfile falseProfile = BranchProfile.create();

private final Object falseValue;
@Child protected DirectCallNode falseCall;

private final Assumption trueUnmodifiedAssumption;
private final RubyMethod trueMethod;
private final BranchProfile trueProfile = new BranchProfile();
private final BranchProfile trueProfile = BranchProfile.create();

private final Object trueValue;
@Child protected DirectCallNode trueCall;
Original file line number Diff line number Diff line change
@@ -23,11 +23,11 @@ public abstract class RangeLiteralNode extends RubyNode {

private final boolean excludeEnd;

private final BranchProfile beginIntegerProfile = new BranchProfile();
private final BranchProfile beginLongProfile = new BranchProfile();
private final BranchProfile endIntegerProfile = new BranchProfile();
private final BranchProfile endLongProfile = new BranchProfile();
private final BranchProfile objectProfile = new BranchProfile();
private final BranchProfile beginIntegerProfile = BranchProfile.create();
private final BranchProfile beginLongProfile = BranchProfile.create();
private final BranchProfile endIntegerProfile = BranchProfile.create();
private final BranchProfile endLongProfile = BranchProfile.create();
private final BranchProfile objectProfile = BranchProfile.create();

public RangeLiteralNode(RubyContext context, SourceSection sourceSection, boolean excludeEnd) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -24,7 +24,7 @@ public class CatchBreakAsReturnNode extends RubyNode {

@Child protected RubyNode body;

private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile nextProfile = BranchProfile.create();

public CatchBreakAsReturnNode(RubyContext context, SourceSection sourceSection, RubyNode body) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -24,7 +24,7 @@ public class CatchNextNode extends RubyNode {

@Child protected RubyNode body;

private final BranchProfile nextProfile = new BranchProfile();
private final BranchProfile nextProfile = BranchProfile.create();

public CatchNextNode(RubyContext context, SourceSection sourceSection, RubyNode body) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -26,8 +26,8 @@ public class CatchReturnNode extends RubyNode {
@Child protected RubyNode body;
private final long returnID;

private final BranchProfile returnProfile = new BranchProfile();
private final BranchProfile returnToOtherMethodProfile = new BranchProfile();
private final BranchProfile returnProfile = BranchProfile.create();
private final BranchProfile returnToOtherMethodProfile = BranchProfile.create();

public CatchReturnNode(RubyContext context, SourceSection sourceSection, RubyNode body, long returnID) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -30,8 +30,8 @@ public class ExceptionTranslatingNode extends RubyNode {

@Child protected RubyNode child;

private final BranchProfile controlProfile = new BranchProfile();
private final BranchProfile rethrowProfile = new BranchProfile();
private final BranchProfile controlProfile = BranchProfile.create();
private final BranchProfile rethrowProfile = BranchProfile.create();

public ExceptionTranslatingNode(RubyContext context, SourceSection sourceSection, RubyNode child) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ public class RedoableNode extends RubyNode {

@Child protected RubyNode body;

private final BranchProfile redoProfile = new BranchProfile();
private final BranchProfile redoProfile = BranchProfile.create();

public RedoableNode(RubyContext context, SourceSection sourceSection, RubyNode body) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -26,7 +26,7 @@ public class ReadOptionalArgumentNode extends RubyNode {
private final int minimum;
@Child protected RubyNode defaultValue;

private final BranchProfile defaultValueProfile = new BranchProfile();
private final BranchProfile defaultValueProfile = BranchProfile.create();

public ReadOptionalArgumentNode(RubyContext context, SourceSection sourceSection, int index, int minimum, RubyNode defaultValue) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -24,7 +24,7 @@ public class ReadPreArgumentNode extends RubyNode {

private final int index;

private final BranchProfile outOfRangeProfile = new BranchProfile();
private final BranchProfile outOfRangeProfile = BranchProfile.create();
private final MissingArgumentBehaviour missingArgumentBehaviour;

private final RubyValueProfile argumentValueProfile = new RubyValueProfile();
Original file line number Diff line number Diff line change
@@ -28,8 +28,8 @@ public class ReadRestArgumentNode extends RubyNode {

private final int index;

private final BranchProfile noArgumentsLeftProfile = new BranchProfile();
private final BranchProfile subsetOfArgumentsProfile = new BranchProfile();
private final BranchProfile noArgumentsLeftProfile = BranchProfile.create();
private final BranchProfile subsetOfArgumentsProfile = BranchProfile.create();

public ReadRestArgumentNode(RubyContext context, SourceSection sourceSection, int index) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@ public class ShouldDestructureNode extends RubyNode {
private final Arity arity;
@Child protected RespondToNode respondToCheck;

private final BranchProfile checkRespondProfile = new BranchProfile();
private final BranchProfile checkRespondProfile = BranchProfile.create();

public ShouldDestructureNode(RubyContext context, SourceSection sourceSection, Arity arity, RespondToNode respondToCheck) {
super(context, sourceSection);
Original file line number Diff line number Diff line change
@@ -54,7 +54,7 @@ public void hookWrite(ObjectStorage object, String name, Object value) {
@Child protected ReadHeadObjectFieldNode readNode;
private final boolean isGlobal;

private final BranchProfile nullProfile = new BranchProfile();
private final BranchProfile nullProfile = BranchProfile.create();

public ReadInstanceVariableNode(RubyContext context, SourceSection sourceSection, String name, RubyNode receiver, boolean isGlobal) {
super(context, sourceSection);