Skip to content

Commit 3d6910b

Browse files
committed
Use AbstractAssumption instead of Assumption for Shape#leafAssumption to avoid extra instanceof guards when reading it on HotSpot
1 parent f7c601e commit 3d6910b

File tree

1 file changed

+12
-11
lines changed
  • truffle/src/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object

1 file changed

+12
-11
lines changed

truffle/src/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Shape.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public final class Shape {
132132
private final int propertyCount;
133133

134134
private final AbstractAssumption validAssumption;
135-
@CompilationFinal private volatile Assumption leafAssumption;
135+
@CompilationFinal private volatile AbstractAssumption leafAssumption;
136136

137137
/**
138138
* Shape transition map; lazily initialized. One of:
@@ -165,7 +165,8 @@ public final class Shape {
165165
private volatile Object predecessorShape;
166166

167167
private static final AtomicReferenceFieldUpdater<Shape, Object> TRANSITION_MAP_UPDATER = AtomicReferenceFieldUpdater.newUpdater(Shape.class, Object.class, "transitionMap");
168-
private static final AtomicReferenceFieldUpdater<Shape, Assumption> LEAF_ASSUMPTION_UPDATER = AtomicReferenceFieldUpdater.newUpdater(Shape.class, Assumption.class, "leafAssumption");
168+
private static final AtomicReferenceFieldUpdater<Shape, AbstractAssumption> LEAF_ASSUMPTION_UPDATER = AtomicReferenceFieldUpdater.newUpdater(Shape.class, AbstractAssumption.class,
169+
"leafAssumption");
169170
private static final AtomicReferenceFieldUpdater<Shape, PropertyAssumptions> PROPERTY_ASSUMPTIONS_UPDATER = //
170171
AtomicReferenceFieldUpdater.newUpdater(Shape.class, PropertyAssumptions.class, "sharedPropertyAssumptions");
171172

@@ -866,20 +867,20 @@ public boolean isValid() {
866867
*/
867868
@NonIdempotent
868869
public Assumption getLeafAssumption() {
869-
Assumption assumption = leafAssumption;
870+
AbstractAssumption assumption = leafAssumption;
870871
if (assumption != null) {
871872
return assumption;
872873
} else {
873874
CompilerDirectives.transferToInterpreterAndInvalidate();
874-
Assumption prev;
875-
Assumption next;
875+
AbstractAssumption prev;
876+
AbstractAssumption next;
876877
do {
877878
prev = LEAF_ASSUMPTION_UPDATER.get(this);
878879
if (prev != null) {
879880
return prev;
880881
} else {
881882
boolean isLeafShape = transitionMap == null;
882-
next = isLeafShape ? createLeafAssumption() : Assumption.NEVER_VALID;
883+
next = isLeafShape ? createLeafAssumption() : (AbstractAssumption) Assumption.NEVER_VALID;
883884
}
884885
} while (!LEAF_ASSUMPTION_UPDATER.compareAndSet(this, prev, next));
885886
return next;
@@ -894,7 +895,7 @@ public Assumption getLeafAssumption() {
894895
@NonIdempotent
895896
@TruffleBoundary
896897
public boolean isLeaf() {
897-
Assumption assumption = leafAssumption;
898+
AbstractAssumption assumption = leafAssumption;
898899
return assumption == null || assumption.isValid();
899900
}
900901

@@ -1596,13 +1597,13 @@ void invalidateValidAssumption() {
15961597
validAssumption.invalidate();
15971598
}
15981599

1599-
private static Assumption createLeafAssumption() {
1600-
return Truffle.getRuntime().createAssumption("leaf shape");
1600+
private static AbstractAssumption createLeafAssumption() {
1601+
return (AbstractAssumption) Truffle.getRuntime().createAssumption("leaf shape");
16011602
}
16021603

16031604
@TruffleBoundary
16041605
void invalidateLeafAssumption() {
1605-
Assumption prev;
1606+
AbstractAssumption prev;
16061607
do {
16071608
prev = LEAF_ASSUMPTION_UPDATER.get(this);
16081609
if (prev == Assumption.NEVER_VALID) {
@@ -1611,7 +1612,7 @@ void invalidateLeafAssumption() {
16111612
if (prev != null) {
16121613
prev.invalidate();
16131614
}
1614-
} while (!LEAF_ASSUMPTION_UPDATER.compareAndSet(this, prev, Assumption.NEVER_VALID));
1615+
} while (!LEAF_ASSUMPTION_UPDATER.compareAndSet(this, prev, (AbstractAssumption) Assumption.NEVER_VALID));
16151616
}
16161617

16171618
/**

0 commit comments

Comments
 (0)