Skip to content
Snippets Groups Projects
Commit 8ac9ca49 authored by Benoit Lamarche's avatar Benoit Lamarche
Browse files

Add PrebuiltCompatibility category to properties

If those properties had a different value when the prebuilt dexes were
generated for an imported lib, they must be considered incompatible.

Bug: 33446455

Change-Id: I48c45d625006cd7031a02ee417aa6c6954d3d8c0
parent 8cf50cca
Branches
Tags ub-jack-douarn-b12
No related merge requests found
...@@ -197,6 +197,7 @@ public class Options { ...@@ -197,6 +197,7 @@ public class Options {
.addDefaultValue(AssertionPolicy.RUNTIME) .addDefaultValue(AssertionPolicy.RUNTIME)
.ignoreCase() .ignoreCase()
.addCategory(DumpInLibrary.class) .addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class)
.addCategory(Carnac.class); .addCategory(Carnac.class);
@Nonnull @Nonnull
...@@ -218,7 +219,8 @@ public class Options { ...@@ -218,7 +219,8 @@ public class Options {
public static final BooleanPropertyId LAMBDA_TO_ANONYMOUS_CONVERTER = BooleanPropertyId public static final BooleanPropertyId LAMBDA_TO_ANONYMOUS_CONVERTER = BooleanPropertyId
.create("jack.lambda.anonymous", "Enable lambda support with an anonymous class") .create("jack.lambda.anonymous", "Enable lambda support with an anonymous class")
.addDefaultValue(Boolean.TRUE) .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class); .addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final EnumPropertyId<LambdaGroupingScope> LAMBDA_GROUPING_SCOPE = EnumPropertyId public static final EnumPropertyId<LambdaGroupingScope> LAMBDA_GROUPING_SCOPE = EnumPropertyId
...@@ -267,14 +269,17 @@ public class Options { ...@@ -267,14 +269,17 @@ public class Options {
.addCategory(DumpInLibrary.class); .addCategory(DumpInLibrary.class);
/** /**
* property used to specify the kind of switch enum optimization that is enabled. * property used to specify the kind of switch enum optimization that is enabled. See(@link
* See(@link SwitchEnumOptStrategy) * SwitchEnumOptStrategy)
*/ */
@Nonnull @Nonnull
public static final EnumPropertyId<SwitchEnumOptStrategy> OPTIMIZED_ENUM_SWITCH = public static final EnumPropertyId<SwitchEnumOptStrategy> OPTIMIZED_ENUM_SWITCH =
EnumPropertyId.create("jack.optimization.enum.switch", "Optimize enum switch", EnumPropertyId.create(
SwitchEnumOptStrategy.class) "jack.optimization.enum.switch", "Optimize enum switch", SwitchEnumOptStrategy.class)
.addDefaultValue(SwitchEnumOptStrategy.NEVER).ignoreCase().addCategory(DumpInLibrary.class); .addDefaultValue(SwitchEnumOptStrategy.NEVER)
.ignoreCase()
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final BooleanPropertyId GENERATE_DEX_IN_LIBRARY = BooleanPropertyId public static final BooleanPropertyId GENERATE_DEX_IN_LIBRARY = BooleanPropertyId
...@@ -652,25 +657,35 @@ public class Options { ...@@ -652,25 +657,35 @@ public class Options {
.addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class);
@Nonnull @Nonnull
public static final BooleanPropertyId OPTIMIZE_TAIL_RECURSION = BooleanPropertyId.create( public static final BooleanPropertyId OPTIMIZE_TAIL_RECURSION =
"jack.optimization.tail-recursion", BooleanPropertyId.create("jack.optimization.tail-recursion", "Optimize tail recursive calls")
"Optimize tail recursive calls") .addDefaultValue(Boolean.FALSE)
.addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class); .addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final BooleanPropertyId EMIT_LOCAL_DEBUG_INFO = BooleanPropertyId.create( public static final BooleanPropertyId EMIT_LOCAL_DEBUG_INFO =
BooleanPropertyId.create(
"jack.dex.debug.vars", "Emit local variable debug info into generated dex") "jack.dex.debug.vars", "Emit local variable debug info into generated dex")
.addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.FALSE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final BooleanPropertyId EMIT_LINE_NUMBER_DEBUG_INFO = BooleanPropertyId.create( public static final BooleanPropertyId EMIT_LINE_NUMBER_DEBUG_INFO =
BooleanPropertyId.create(
"jack.dex.debug.lines", "Emit line number debug info into generated dex") "jack.dex.debug.lines", "Emit line number debug info into generated dex")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final BooleanPropertyId EMIT_SOURCE_FILE_DEBUG_INFO = BooleanPropertyId.create( public static final BooleanPropertyId EMIT_SOURCE_FILE_DEBUG_INFO =
BooleanPropertyId.create(
"jack.dex.debug.source", "Emit source file debug info into generated dex") "jack.dex.debug.source", "Emit source file debug info into generated dex")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final PropertyId<AndroidApiLevel> ANDROID_MIN_API_LEVEL = PropertyId public static final PropertyId<AndroidApiLevel> ANDROID_MIN_API_LEVEL = PropertyId
......
...@@ -34,6 +34,7 @@ import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum; ...@@ -34,6 +34,7 @@ import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JReferenceType; import com.android.jack.ir.ast.JReferenceType;
import com.android.jack.ir.ast.JType; import com.android.jack.ir.ast.JType;
import com.android.jack.library.DumpInLibrary; import com.android.jack.library.DumpInLibrary;
import com.android.jack.library.PrebuiltCompatibility;
import com.android.jack.lookup.CommonTypes; import com.android.jack.lookup.CommonTypes;
import com.android.jack.scheduling.filter.SourceTypeFilter; import com.android.jack.scheduling.filter.SourceTypeFilter;
import com.android.jack.transformations.request.Remove; import com.android.jack.transformations.request.Remove;
...@@ -72,13 +73,15 @@ public class FieldInitializerRemover implements RunnableSchedulable<JField> { ...@@ -72,13 +73,15 @@ public class FieldInitializerRemover implements RunnableSchedulable<JField> {
BooleanPropertyId BooleanPropertyId
.create("jack.legacy.dx.initialvalue.class", .create("jack.legacy.dx.initialvalue.class",
"Emit class literal as initial value of field") "Emit class literal as initial value of field")
.addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final BooleanPropertyId STRING_AS_INITIALVALUE_OF_OBJECT = BooleanPropertyId public static final BooleanPropertyId STRING_AS_INITIALVALUE_OF_OBJECT = BooleanPropertyId
.create("jack.legacy.runtime.initialvalue.string", .create("jack.legacy.runtime.initialvalue.string",
"Emit string literal as initial value of field") "Emit string literal as initial value of field")
.addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
private final boolean allowClassInInitialValue = private final boolean allowClassInInitialValue =
ThreadConfig.get(CLASS_AS_INITIALVALUE).booleanValue(); ThreadConfig.get(CLASS_AS_INITIALVALUE).booleanValue();
......
...@@ -71,6 +71,7 @@ import com.android.jack.ir.ast.JSwitchStatement; ...@@ -71,6 +71,7 @@ import com.android.jack.ir.ast.JSwitchStatement;
import com.android.jack.ir.ast.JThis; import com.android.jack.ir.ast.JThis;
import com.android.jack.ir.ast.marker.ThrownExceptionMarker; import com.android.jack.ir.ast.marker.ThrownExceptionMarker;
import com.android.jack.library.DumpInLibrary; import com.android.jack.library.DumpInLibrary;
import com.android.jack.library.PrebuiltCompatibility;
import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter; import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
import com.android.jack.scheduling.marker.DexCodeMarker; import com.android.jack.scheduling.marker.DexCodeMarker;
import com.android.jack.transformations.EmptyClinit; import com.android.jack.transformations.EmptyClinit;
...@@ -159,25 +160,35 @@ import javax.annotation.Nonnull; ...@@ -159,25 +160,35 @@ import javax.annotation.Nonnull;
public class CodeItemBuilder implements RunnableSchedulable<JMethod> { public class CodeItemBuilder implements RunnableSchedulable<JMethod> {
@Nonnull @Nonnull
public static final BooleanPropertyId EMIT_SYNTHETIC_LOCAL_DEBUG_INFO = BooleanPropertyId public static final BooleanPropertyId EMIT_SYNTHETIC_LOCAL_DEBUG_INFO =
.create("jack.dex.debug.vars.synthetic", BooleanPropertyId.create(
"jack.dex.debug.vars.synthetic",
"Emit synthetic local variable debug info into generated dex") "Emit synthetic local variable debug info into generated dex")
.addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.FALSE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final BooleanPropertyId DEX_OPTIMIZE = BooleanPropertyId.create( public static final BooleanPropertyId DEX_OPTIMIZE =
"jack.dex.optimize", "Define if Dex optimizations are activated") BooleanPropertyId.create("jack.dex.optimize", "Define if Dex optimizations are activated")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final BooleanPropertyId FORCE_JUMBO = BooleanPropertyId.create( public static final BooleanPropertyId FORCE_JUMBO =
BooleanPropertyId.create(
"jack.dex.forcejumbo", "Force string opcodes to be emitted as jumbo in dex") "jack.dex.forcejumbo", "Force string opcodes to be emitted as jumbo in dex")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
public static final BooleanPropertyId OPTIMIZE_BRANCHES = BooleanPropertyId.create( public static final BooleanPropertyId OPTIMIZE_BRANCHES =
"jack.dex.optimizebranches", "Remove redundant branches in dex") BooleanPropertyId.create("jack.dex.optimizebranches", "Remove redundant branches in dex")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
@Nonnull @Nonnull
private final com.android.jack.util.filter.Filter<JMethod> filter = private final com.android.jack.util.filter.Filter<JMethod> filter =
......
...@@ -40,9 +40,11 @@ public class Optimizations { ...@@ -40,9 +40,11 @@ public class Optimizations {
@Description("Optimize def/use chain") @Description("Optimize def/use chain")
public static class DefUseSimplifier implements Feature { public static class DefUseSimplifier implements Feature {
@Nonnull @Nonnull
public static final BooleanPropertyId ENABLE = BooleanPropertyId public static final BooleanPropertyId ENABLE =
.create("jack.optimization.def-use-simplifier", "Optimize def/use chain") BooleanPropertyId.create("jack.optimization.def-use-simplifier", "Optimize def/use chain")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
} }
/** /**
...@@ -52,9 +54,11 @@ public class Optimizations { ...@@ -52,9 +54,11 @@ public class Optimizations {
@Description("Optimize use/def chain") @Description("Optimize use/def chain")
public static class UseDefSimplifier implements Feature { public static class UseDefSimplifier implements Feature {
@Nonnull @Nonnull
public static final BooleanPropertyId ENABLE = BooleanPropertyId public static final BooleanPropertyId ENABLE =
.create("jack.optimization.use-def-simplifier", "Optimize use/def chain") BooleanPropertyId.create("jack.optimization.use-def-simplifier", "Optimize use/def chain")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
} }
/** /**
...@@ -64,10 +68,12 @@ public class Optimizations { ...@@ -64,10 +68,12 @@ public class Optimizations {
@Description("Optimize expressions using constants") @Description("Optimize expressions using constants")
public static class ExpressionSimplifier implements Feature { public static class ExpressionSimplifier implements Feature {
@Nonnull @Nonnull
public static final BooleanPropertyId ENABLE = BooleanPropertyId public static final BooleanPropertyId ENABLE =
.create("jack.optimization.expression-simplifier", BooleanPropertyId.create(
"Optimize expressions using constants") "jack.optimization.expression-simplifier", "Optimize expressions using constants")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
} }
/** /**
...@@ -77,10 +83,13 @@ public class Optimizations { ...@@ -77,10 +83,13 @@ public class Optimizations {
@Description("Optimize 'if' expressions using a boolean constant") @Description("Optimize 'if' expressions using a boolean constant")
public static class IfSimplifier implements Feature { public static class IfSimplifier implements Feature {
@Nonnull @Nonnull
public static final BooleanPropertyId ENABLE = BooleanPropertyId public static final BooleanPropertyId ENABLE =
.create("jack.optimization.if-simplifier", BooleanPropertyId.create(
"jack.optimization.if-simplifier",
"Optimize 'if' expressions using a boolean constant") "Optimize 'if' expressions using a boolean constant")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
} }
/** /**
...@@ -92,7 +101,9 @@ public class Optimizations { ...@@ -92,7 +101,9 @@ public class Optimizations {
@Nonnull @Nonnull
public static final BooleanPropertyId ENABLE = public static final BooleanPropertyId ENABLE =
BooleanPropertyId.create("jack.optimization.not-simplifier", "Optimize '!' operator") BooleanPropertyId.create("jack.optimization.not-simplifier", "Optimize '!' operator")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
} }
/** /**
......
...@@ -37,6 +37,7 @@ import com.android.jack.ir.ast.JThis; ...@@ -37,6 +37,7 @@ import com.android.jack.ir.ast.JThis;
import com.android.jack.ir.ast.JThisRef; import com.android.jack.ir.ast.JThisRef;
import com.android.jack.ir.sourceinfo.SourceInfo; import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.library.DumpInLibrary; import com.android.jack.library.DumpInLibrary;
import com.android.jack.library.PrebuiltCompatibility;
import com.android.jack.lookup.JMethodLookupException; import com.android.jack.lookup.JMethodLookupException;
import com.android.jack.scheduling.feature.VisibilityBridge; import com.android.jack.scheduling.feature.VisibilityBridge;
import com.android.jack.scheduling.filter.SourceTypeFilter; import com.android.jack.scheduling.filter.SourceTypeFilter;
...@@ -77,7 +78,7 @@ public class VisibilityBridgeAdder implements RunnableSchedulable<JDefinedClassO ...@@ -77,7 +78,7 @@ public class VisibilityBridgeAdder implements RunnableSchedulable<JDefinedClassO
@Nonnull @Nonnull
public static final BooleanPropertyId VISIBILITY_BRIDGE = BooleanPropertyId.create( public static final BooleanPropertyId VISIBILITY_BRIDGE = BooleanPropertyId.create(
"jack.legacy.runtime.visibilitybridges", "Generate visibility bridges").addDefaultValue( "jack.legacy.runtime.visibilitybridges", "Generate visibility bridges").addDefaultValue(
Boolean.TRUE).addCategory(DumpInLibrary.class); Boolean.TRUE).addCategory(DumpInLibrary.class).addCategory(PrebuiltCompatibility.class);
@Override @Override
public synchronized void run(@Nonnull JDefinedClassOrInterface declaredType) { public synchronized void run(@Nonnull JDefinedClassOrInterface declaredType) {
......
...@@ -42,6 +42,7 @@ import com.android.jack.ir.ast.JVariable; ...@@ -42,6 +42,7 @@ import com.android.jack.ir.ast.JVariable;
import com.android.jack.ir.ast.JVisitor; import com.android.jack.ir.ast.JVisitor;
import com.android.jack.ir.sourceinfo.SourceInfo; import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.library.DumpInLibrary; import com.android.jack.library.DumpInLibrary;
import com.android.jack.library.PrebuiltCompatibility;
import com.android.jack.lookup.CommonTypes; import com.android.jack.lookup.CommonTypes;
import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter; import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
import com.android.jack.transformations.LocalVarCreator; import com.android.jack.transformations.LocalVarCreator;
...@@ -93,7 +94,9 @@ public class SynchronizeTransformer implements RunnableSchedulable<JMethod> { ...@@ -93,7 +94,9 @@ public class SynchronizeTransformer implements RunnableSchedulable<JMethod> {
public static final BooleanPropertyId REUSE_SYNC_VARIABLE = BooleanPropertyId.create( public static final BooleanPropertyId REUSE_SYNC_VARIABLE = BooleanPropertyId.create(
"jack.transformation.reusesyncvariable", "jack.transformation.reusesyncvariable",
"Reduce the 'get class' usage in static synchronized methods by reusing a local variable") "Reduce the 'get class' usage in static synchronized methods by reusing a local variable")
.addDefaultValue(Boolean.TRUE).addCategory(DumpInLibrary.class); .addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
private final boolean reuseSyncVariable = ThreadConfig.get(REUSE_SYNC_VARIABLE).booleanValue(); private final boolean reuseSyncVariable = ThreadConfig.get(REUSE_SYNC_VARIABLE).booleanValue();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment