private boolean isVolatile(XField f) { return f != null && f.isVolatile(); }
public OpcodeStack.Item getSummary(XField field) { if (field == null) { return new OpcodeStack.Item(); } OpcodeStack.Item result = summary.get(field); if (result == null || field.isVolatile()) { String signature = field.getSignature(); return new OpcodeStack.Item(signature); } return result; }
public void killAllLoads(boolean primitiveOnly) { if (!REDUNDANT_LOAD_ELIMINATION) { return; } FieldSummary fieldSummary = AnalysisContext.currentAnalysisContext().getFieldSummary(); HashSet<AvailableLoad> killMe = new HashSet<>(); for (AvailableLoad availableLoad : getAvailableLoadMap().keySet()) { XField field = availableLoad.getField(); if ((!primitiveOnly || !field.isReferenceType()) && (field.isVolatile() || !field.isFinal() && (!USE_WRITTEN_OUTSIDE_OF_CONSTRUCTOR || fieldSummary.isWrittenOutsideOfConstructor(field)))) { if (RLE_DEBUG) { System.out.println("KILLING load of " + availableLoad + " in " + this); } killMe.add(availableLoad); } } killAvailableLoads(killMe); }
if (xfield.isVolatile()) { getFrame().killAllLoads();
private boolean interesting(XField f) { if (!f.isPublic() && !f.isProtected()) { return false; } if (!f.isStatic() || f.isSynthetic() || f.isVolatile()) { return false; } if (!f.isFinal()) { return true; } boolean isArray = f.getSignature().charAt(0) == '['; if (!(isArray || isCollection(f.getSignature()))) { return false; } return true; }
@Override public void visitGETFIELD(GETFIELD obj) { XField xfield = Hierarchy.findXField(obj, getCPG()); if (xfield != null) { if (xfield.isVolatile()) { getFrame().killAllLoads(); } if (doRedundantLoadElimination()) { loadInstanceField(xfield, obj); return; } } handleNormalInstruction(obj); }
&& !"Ljava/lang/String;".equals(getSigConstantOperand())) { XField declaration = getXFieldOperand(); if (declaration == null || !declaration.isVolatile()) { bugReporter.reportBug(new BugInstance(this, "DC_DOUBLECHECK", NORMAL_PRIORITY).addClassAndMethod(this) .addField(f).describe("FIELD_ON").addSourceLineRange(this, startPC, endPC));
if (!sawGetStaticAfterPutStatic && xfield.isVolatile()) { return;
if (field0 != null && field0.equals(field1) && (field0.isStatic() || fr0 != -1 && fr0 == fr1)) { int priority = NORMAL_PRIORITY; if (field0.isVolatile()) { priority++;
priority++; if (f.isVolatile()) { priority++;
if (xfield.isStatic() || xfield.isPublic() || xfield.isVolatile() || xfield.isFinal()) { continue;
String prefix; if (field != null) { if (field.isVolatile()) { return;
private boolean isVolatile(XField f) { return f != null && f.isVolatile(); }
public OpcodeStack.Item getSummary(XField field) { if (field == null) { return new OpcodeStack.Item(); } OpcodeStack.Item result = summary.get(field); if (result == null || field.isVolatile()) { String signature = field.getSignature(); return new OpcodeStack.Item(signature); } return result; }
public void killAllLoads(boolean primitiveOnly) { if (!REDUNDANT_LOAD_ELIMINATION) { return; } FieldSummary fieldSummary = AnalysisContext.currentAnalysisContext().getFieldSummary(); HashSet<AvailableLoad> killMe = new HashSet<AvailableLoad>(); for (AvailableLoad availableLoad : getAvailableLoadMap().keySet()) { XField field = availableLoad.getField(); if ((!primitiveOnly || !field.isReferenceType()) && (field.isVolatile() || !field.isFinal() && (!USE_WRITTEN_OUTSIDE_OF_CONSTRUCTOR || fieldSummary.isWrittenOutsideOfConstructor(field)))) { if (RLE_DEBUG) { System.out.println("KILLING load of " + availableLoad + " in " + this); } killMe.add(availableLoad); } } killAvailableLoads(killMe); }
if (xfield.isVolatile()) { getFrame().killAllLoads();
private boolean interesting(XField f) { if (!f.isPublic() && !f.isProtected()) { return false; } if (!f.isStatic() || f.isSynthetic() || f.isVolatile()) { return false; } if (!f.isFinal()) { return true; } boolean isArray = f.getSignature().charAt(0) == '['; if (!(isArray || isCollection(f.getSignature()))) { return false; } return true; }
@Override public void visitGETFIELD(GETFIELD obj) { XField xfield = Hierarchy.findXField(obj, getCPG()); if (xfield != null) { if (xfield.isVolatile()) { getFrame().killAllLoads(); } if (doRedundantLoadElimination()) { loadInstanceField(xfield, obj); return; } } handleNormalInstruction(obj); }
if (field0 != null && field0.equals(field1) && (field0.isStatic() || fr0 != -1 && fr0 == fr1)) { int priority = NORMAL_PRIORITY; if (field0.isVolatile()) { priority++;
String prefix; if (field != null) { if (field.isVolatile()) { return;