Skip to content

Commit

Permalink
Merge d8b9179 into 02c064e
Browse files Browse the repository at this point in the history
  • Loading branch information
smarr committed Jun 25, 2017
2 parents 02c064e + d8b9179 commit 2b71994
Show file tree
Hide file tree
Showing 18 changed files with 1,058 additions and 1,036 deletions.
8 changes: 8 additions & 0 deletions .gitlab-ci.yml
Expand Up @@ -40,6 +40,14 @@ benchmark_job:
- ant compile
- export EXP=`if [[ "$CI_BUILD_REF_NAME" = "master" ]]; then echo "SOMns"; else echo "SOMns-exp"; fi`; rebench -d --without-nice -c --commit-id="$CI_BUILD_REF" --environment="Infinity Ubuntu" --project=SOMns --branch=master codespeed.conf $EXP

benchmark_interp_job:
stage: benchmark
tags: [benchmarks, infinity]
allow_failure: true
script:
- ant compile
- export EXP=`if [[ "$CI_BUILD_REF_NAME" = "master" ]]; then echo "SOMns-interp"; else echo "SOMns-interp-exp"; fi`; rebench -d --without-nice -c --commit-id="$CI_BUILD_REF" --environment="Infinity Ubuntu" --project=SOMns --branch=master codespeed.conf $EXP

benchmark_nightly_job:
stage: benchmark
tags: [benchmarks, infinity]
Expand Down
22 changes: 20 additions & 2 deletions codespeed.conf
Expand Up @@ -549,7 +549,6 @@ experiments:
- som-startup
- som-steady
executions:
#- SOMns-interp # let's not run those, it takes too long
- SOMns-graal
SOMns-Savina:
description: Run the Savina Actor benchmarks
Expand All @@ -573,8 +572,27 @@ experiments:
- som-startup
- som-steady
executions:
#- SOMns-interp # let's not run those, it takes too long
- SOMns-graal-exp
SOMns-interp:
description: All benchmarks on SOMns without Graal
actions: benchmark
benchmark:
- micro-startup
- macro-startup
- sort-startup
- som-startup
executions:
- SOMns-interp
SOMns-interp-exp:
description: All benchmarks on SOMns without Graal
actions: benchmark
benchmark:
- micro-startup
- macro-startup
- sort-startup
- som-startup
executions:
- SOMns-interp
SOMns-Savina-exp:
description: Run the Savina Actor benchmarks
actions: benchmarks
Expand Down
2 changes: 1 addition & 1 deletion som
Expand Up @@ -188,7 +188,7 @@ else:

if not args.interpreter:
flags += ['-server', '-XX:+UnlockExperimentalVMOptions', '-XX:+EnableJVMCI',
'-Djvmci.Compiler=graal']
'-Djvmci.Compiler=graal', '-XX:-UseJVMCICompiler']

if args.som_dnu:
flags += ['-Dsom.printStackTraceOnDNU=true']
Expand Down
71 changes: 36 additions & 35 deletions src/som/compiler/MixinDefinition.java
Expand Up @@ -25,21 +25,19 @@
import som.interpreter.SNodeFactory;
import som.interpreter.SomLanguage;
import som.interpreter.nodes.ClassInstantiationNode;
import som.interpreter.nodes.ClassSlotAccessNode;
import som.interpreter.nodes.ExpressionNode;
import som.interpreter.nodes.dispatch.AbstractDispatchNode;
import som.interpreter.nodes.dispatch.CachedSlotAccessNode.CachedImmutableSlotRead;
import som.interpreter.nodes.dispatch.CachedSlotAccessNode.CachedMutableSlotRead;
import som.interpreter.nodes.dispatch.CachedSlotAccessNode.CachedSlotWrite;
import som.interpreter.nodes.dispatch.CachedSlotAccessNode.SlotAccess;
import som.interpreter.nodes.dispatch.CachedSlotRead;
import som.interpreter.nodes.dispatch.CachedSlotRead.SlotAccess;
import som.interpreter.nodes.dispatch.CachedSlotWrite;
import som.interpreter.nodes.dispatch.ClassSlotAccessNode;
import som.interpreter.nodes.dispatch.DispatchGuard;
import som.interpreter.nodes.dispatch.DispatchGuard.CheckSObject;
import som.interpreter.nodes.dispatch.Dispatchable;
import som.interpreter.nodes.literals.NilLiteralNode;
import som.interpreter.objectstorage.ClassFactory;
import som.interpreter.objectstorage.FieldReadNode;
import som.interpreter.objectstorage.FieldWriteNode;
import som.interpreter.objectstorage.FieldWriteNode.AbstractFieldWriteNode;
import som.interpreter.objectstorage.InitializerFieldWrite;
import som.interpreter.objectstorage.StorageLocation;
import som.interpreter.transactions.CachedTxSlotRead;
import som.interpreter.transactions.CachedTxSlotWrite;
import som.vm.Symbols;
Expand All @@ -49,7 +47,6 @@
import som.vmobjects.SInvokable;
import som.vmobjects.SInvokable.SInitializer;
import som.vmobjects.SObject;
import som.vmobjects.SObject.SImmutableObject;
import som.vmobjects.SObject.SMutableObject;
import som.vmobjects.SObjectWithClass;
import som.vmobjects.SSymbol;
Expand Down Expand Up @@ -513,18 +510,17 @@ public AbstractDispatchNode getDispatchNode(final Object receiver,
final Object firstArg, final AbstractDispatchNode next,
final boolean forAtomic) {
SObject rcvr = (SObject) receiver;
if (rcvr instanceof SMutableObject) {
if (forAtomic && getAccessType() == SlotAccess.FIELD_READ) {
return new CachedTxSlotRead(getAccessType(),
createNode(rcvr), DispatchGuard.create(rcvr), next);
} else {
return new CachedMutableSlotRead(getAccessType(),
createNode(rcvr), DispatchGuard.create(rcvr), next);
}
StorageLocation loc = rcvr.getObjectLayout().getStorageLocation(this);
boolean isSet = loc.isSet(rcvr);

CachedSlotRead read = createNode(loc, DispatchGuard.createSObjectCheck(rcvr), next, isSet);

if (forAtomic && rcvr instanceof SMutableObject &&
getAccessType() == SlotAccess.FIELD_READ) {
return new CachedTxSlotRead(getAccessType(), read,
DispatchGuard.createSObjectCheck(rcvr), next);
} else {
assert rcvr instanceof SImmutableObject;
return new CachedImmutableSlotRead(getAccessType(),
createNode(rcvr), DispatchGuard.create(rcvr), next);
return read;
}
}

Expand All @@ -546,8 +542,10 @@ public Object invoke(final IndirectCallNode call, final Object[] arguments) {
return rcvr.readSlot(this);
}

protected FieldReadNode createNode(final SObject rcvr) {
return FieldReadNode.createRead(this, rcvr);
protected CachedSlotRead createNode(final StorageLocation loc,
final CheckSObject guard, final AbstractDispatchNode next,
final boolean isSet) {
return loc.getReadNode(getAccessType(), guard, next, isSet);
}

protected SlotAccess getAccessType() {
Expand Down Expand Up @@ -577,14 +575,18 @@ public SlotMutator(final SSymbol name, final AccessModifier acccessModifier,
}

@Override
public AbstractDispatchNode getDispatchNode(final Object rcvr,
public AbstractDispatchNode getDispatchNode(final Object receiver,
final Object firstArg, final AbstractDispatchNode next, final boolean forAtomic) {
SObject rcvr = (SObject) receiver;
StorageLocation loc = rcvr.getObjectLayout().getStorageLocation(mainSlot);
boolean isSet = loc.isSet(rcvr);
CachedSlotWrite write = loc.getWriteNode(mainSlot, DispatchGuard.createSObjectCheck(rcvr), next, isSet);

if (forAtomic) {
return new CachedTxSlotWrite(createWriteNode((SObject) rcvr, firstArg),
DispatchGuard.create(rcvr), next);
return new CachedTxSlotWrite(write,
DispatchGuard.createSObjectCheck(rcvr), next);
} else {
return new CachedSlotWrite(createWriteNode((SObject) rcvr, firstArg),
DispatchGuard.create(rcvr), next);
return write;
}
}

Expand All @@ -595,11 +597,6 @@ public Object invoke(final IndirectCallNode call, final Object[] arguments) {
rcvr.writeSlot(this, arguments[1]);
return rcvr;
}

protected AbstractFieldWriteNode createWriteNode(final SObject rcvr,
final Object firstArg) {
return FieldWriteNode.createWrite(mainSlot, rcvr, firstArg);
}
}

/**
Expand All @@ -617,10 +614,14 @@ public ClassSlotDefinition(final SSymbol name,
}

@Override
protected FieldReadNode createNode(final SObject rcvr) {
protected CachedSlotRead createNode(final StorageLocation loc,
final CheckSObject guard, final AbstractDispatchNode next,
final boolean isSet) {
CachedSlotRead read = super.createNode(loc, guard, next, isSet);
CachedSlotWrite write = loc.getWriteNode(this, guard, next, isSet);

ClassSlotAccessNode node = new ClassSlotAccessNode(mixinDefinition,
FieldReadNode.createRead(this, rcvr),
FieldWriteNode.createWriteObject(this, rcvr));
read, write);
return node;
}

Expand Down
149 changes: 0 additions & 149 deletions src/som/interpreter/nodes/dispatch/CachedSlotAccessNode.java

This file was deleted.

0 comments on commit 2b71994

Please sign in to comment.