blob: 9ea0777dd3737c17b80ffca9e7efa835c10fd0fa [file] [log] [blame]
// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.ir.optimize.info;
import com.android.tools.r8.graph.DexEncodedMethod.ClassInlinerEligibility;
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.analysis.type.ClassTypeLatticeElement;
import com.android.tools.r8.ir.analysis.type.TypeLatticeElement;
import com.android.tools.r8.ir.optimize.info.ParameterUsagesInfo.ParameterUsage;
import com.android.tools.r8.ir.optimize.info.initializer.ClassInitializerInfo;
import com.android.tools.r8.ir.optimize.info.initializer.InstanceInitializerInfo;
import java.util.BitSet;
import java.util.Set;
public interface MethodOptimizationInfo {
enum InlinePreference {
NeverInline,
ForceInline,
Default
}
boolean isDefaultMethodOptimizationInfo();
boolean isUpdatableMethodOptimizationInfo();
UpdatableMethodOptimizationInfo asUpdatableMethodOptimizationInfo();
boolean cannotBeKept();
boolean classInitializerMayBePostponed();
TypeLatticeElement getDynamicUpperBoundType();
ClassTypeLatticeElement getDynamicLowerBoundType();
ParameterUsage getParameterUsages(int parameter);
BitSet getNonNullParamOrThrow();
BitSet getNonNullParamOnNormalExits();
boolean hasBeenInlinedIntoSingleCallSite();
boolean isReachabilitySensitive();
boolean returnsArgument();
int getReturnedArgument();
boolean neverReturnsNull();
boolean neverReturnsNormally();
boolean returnsConstant();
boolean returnsConstantNumber();
boolean returnsConstantString();
ClassInlinerEligibility getClassInlinerEligibility();
Set<DexType> getInitializedClassesOnNormalExit();
ClassInitializerInfo getClassInitializerInfo();
InstanceInitializerInfo getInstanceInitializerInfo();
boolean isInitializerEnablingJavaAssertions();
long getReturnedConstantNumber();
DexString getReturnedConstantString();
boolean forceInline();
boolean neverInline();
boolean useIdentifierNameString();
boolean checksNullReceiverBeforeAnySideEffect();
boolean triggersClassInitBeforeAnySideEffect();
boolean mayHaveSideEffects();
boolean returnValueOnlyDependsOnArguments();
boolean returnValueHasBeenPropagated();
UpdatableMethodOptimizationInfo mutableCopy();
}