# HG changeset patch # User Thomas Wuerthinger # Date 1303928863 -7200 # Node ID 3fc322165071218a248ce5fbee9a4447b0652b92 # Parent fa3bda50cbfdf0a98e0222ff9ed55d20f83caede More flags clean up. diff -r fa3bda50cbfd -r 3fc322165071 graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java --- a/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Wed Apr 27 20:22:05 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Wed Apr 27 20:27:43 2011 +0200 @@ -513,7 +513,7 @@ @Override public void visitLoadField(LoadField x) { RiField field = x.field(); - boolean needsPatching = x.needsPatching(); + boolean needsPatching = !x.isLoaded(); LIRDebugInfo info = null; if (needsPatching || x.needsNullCheck()) { info = stateFor(x, x.stateBefore()); @@ -804,7 +804,7 @@ @Override public void visitStoreField(StoreField x) { RiField field = x.field(); - boolean needsPatching = x.needsPatching(); + boolean needsPatching = !x.isLoaded(); LIRDebugInfo info = null; if (needsPatching || x.needsNullCheck()) { diff -r fa3bda50cbfd -r 3fc322165071 graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java --- a/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Wed Apr 27 20:22:05 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Wed Apr 27 20:27:43 2011 +0200 @@ -732,22 +732,20 @@ void genGetField(int cpi, RiField field) { // Must copy the state here, because the field holder must still be on the stack. FrameState stateBefore = curState.immutableCopy(bci()); - boolean isLoaded = !C1XOptions.TestPatching && field.isResolved(); - LoadField load = new LoadField(apop(), field, stateBefore, isLoaded); + LoadField load = new LoadField(apop(), field, stateBefore); appendOptimizedLoadField(field.kind(), load); } void genPutField(int cpi, RiField field) { // Must copy the state here, because the field holder must still be on the stack. FrameState stateBefore = curState.immutableCopy(bci()); - boolean isLoaded = !C1XOptions.TestPatching && field.isResolved(); Value value = pop(field.kind().stackKind()); - appendOptimizedStoreField(new StoreField(apop(), field, value, stateBefore, isLoaded)); + appendOptimizedStoreField(new StoreField(apop(), field, value, stateBefore)); } void genGetStatic(int cpi, RiField field) { RiType holder = field.holder(); - boolean isInitialized = !C1XOptions.TestPatching && field.isResolved() && holder.isResolved() && holder.isInitialized(); + boolean isInitialized = !C1XOptions.TestPatching && field.isResolved(); CiConstant constantValue = null; if (isInitialized) { constantValue = field.constantValue(null); @@ -755,18 +753,17 @@ if (constantValue != null) { push(constantValue.kind.stackKind(), appendConstant(constantValue)); } else { - Value container = genResolveClass(RiType.Representation.StaticFields, holder, isInitialized, cpi); - LoadField load = new LoadField(container, field, null, isInitialized); + Value container = genResolveClass(RiType.Representation.StaticFields, holder, field.isResolved(), cpi); + LoadField load = new LoadField(container, field, null); appendOptimizedLoadField(field.kind(), load); } } void genPutStatic(int cpi, RiField field) { RiType holder = field.holder(); - boolean isInitialized = !C1XOptions.TestPatching && field.isResolved() && holder.isResolved() && holder.isInitialized(); - Value container = genResolveClass(RiType.Representation.StaticFields, holder, isInitialized, cpi); + Value container = genResolveClass(RiType.Representation.StaticFields, holder, field.isResolved(), cpi); Value value = pop(field.kind().stackKind()); - StoreField store = new StoreField(container, field, value, null, isInitialized); + StoreField store = new StoreField(container, field, value, null); appendOptimizedStoreField(store); } diff -r fa3bda50cbfd -r 3fc322165071 graal/GraalCompiler/src/com/sun/c1x/ir/AccessField.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/AccessField.java Wed Apr 27 20:22:05 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/AccessField.java Wed Apr 27 20:27:43 2011 +0200 @@ -24,7 +24,6 @@ import java.lang.reflect.*; -import com.sun.c1x.*; import com.sun.c1x.value.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -36,7 +35,6 @@ private Value object; protected final RiField field; - private boolean needsPatching; /** * Constructs a new access field object. @@ -47,17 +45,11 @@ * @param stateBefore the state before the field access * @param isLoaded indicates if the class is loaded */ - public AccessField(CiKind kind, Value object, RiField field, FrameState stateBefore, boolean isLoaded) { + public AccessField(CiKind kind, Value object, RiField field, FrameState stateBefore) { super(kind, stateBefore); this.object = object; this.field = field; - if (!isLoaded || (C1XOptions.TestPatching && !Modifier.isVolatile(field.accessFlags()))) { - // require patching if the field is not loaded (i.e. resolved), - // or if patch testing is turned on (but not if the field is volatile) - needsPatching = true; - } - initFlag(Flag.IsLoaded, isLoaded); - if (isLoaded && object.isNonNull()) { + if (field.isResolved() && object.isNonNull()) { eliminateNullCheck(); } assert object != null : "every field access must reference some object"; @@ -93,7 +85,7 @@ * @return {@code true} if the class is loaded */ public boolean isLoaded() { - return checkFlag(Flag.IsLoaded); + return field.isResolved(); } /** @@ -112,21 +104,13 @@ } /** - * Checks whether this field access will require patching. - * @return {@code true} if this field access will require patching - */ - public boolean needsPatching() { - return needsPatching; - } - - /** * Checks whether this field access may cause a trap or an exception, which * is if it either requires a null check or needs patching. * @return {@code true} if this field access can cause a trap */ @Override public boolean canTrap() { - return needsPatching() || needsNullCheck(); + return !isLoaded() || needsNullCheck(); } @Override diff -r fa3bda50cbfd -r 3fc322165071 graal/GraalCompiler/src/com/sun/c1x/ir/Invoke.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/Invoke.java Wed Apr 27 20:22:05 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/Invoke.java Wed Apr 27 20:27:43 2011 +0200 @@ -22,8 +22,6 @@ */ package com.sun.c1x.ir; -import java.lang.reflect.*; - import com.sun.c1x.debug.*; import com.sun.c1x.util.*; import com.sun.c1x.value.*; diff -r fa3bda50cbfd -r 3fc322165071 graal/GraalCompiler/src/com/sun/c1x/ir/LoadField.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/LoadField.java Wed Apr 27 20:22:05 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/LoadField.java Wed Apr 27 20:27:43 2011 +0200 @@ -40,8 +40,8 @@ * @param stateBefore the state before the field access * @param isLoaded indicates if the class is loaded */ - public LoadField(Value object, RiField field, FrameState stateBefore, boolean isLoaded) { - super(field.kind().stackKind(), object, field, stateBefore, isLoaded); + public LoadField(Value object, RiField field, FrameState stateBefore) { + super(field.kind().stackKind(), object, field, stateBefore); } /** diff -r fa3bda50cbfd -r 3fc322165071 graal/GraalCompiler/src/com/sun/c1x/ir/StoreField.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/StoreField.java Wed Apr 27 20:22:05 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/StoreField.java Wed Apr 27 20:27:43 2011 +0200 @@ -46,8 +46,8 @@ * @param stateBefore the state before the field access * @param isLoaded indicates if the class is loaded */ - public StoreField(Value object, RiField field, Value value, FrameState stateBefore, boolean isLoaded) { - super(CiKind.Void, object, field, stateBefore, isLoaded); + public StoreField(Value object, RiField field, Value value, FrameState stateBefore) { + super(CiKind.Void, object, field, stateBefore); this.value = value; setFlag(Flag.LiveSideEffect); if (value.kind != CiKind.Object) { diff -r fa3bda50cbfd -r 3fc322165071 graal/GraalCompiler/src/com/sun/c1x/ir/Value.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/Value.java Wed Apr 27 20:22:05 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/Value.java Wed Apr 27 20:27:43 2011 +0200 @@ -46,7 +46,6 @@ NoReadBarrier, // does not require read barrier NoWriteBarrier, // does not require write barrier - IsLoaded, // field or method is resolved and class is loaded and initialized LiveValue, // live because value is used LiveDeopt, // live for deoptimization LiveSideEffect, // live for possible side-effects only