diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/BottomFieldState.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/BottomFieldState.java
index efb1342..f71be76 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/BottomFieldState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/BottomFieldState.java
@@ -8,8 +8,8 @@
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
 import com.android.tools.r8.ir.analysis.value.AbstractValueFactory;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteParameterState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteValueState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyValueState;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 
@@ -53,12 +53,12 @@
   public FieldState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ProgramField field,
-      NonEmptyParameterState parameterState,
+      NonEmptyValueState parameterState,
       Action onChangedAction) {
     if (parameterState.isUnknown()) {
       return unknown();
     }
-    ConcreteParameterState concreteParameterState = parameterState.asConcrete();
+    ConcreteValueState concreteParameterState = parameterState.asConcrete();
     if (field.getType().isArrayType()) {
       return ConcreteArrayTypeFieldState.create(
           concreteParameterState.getAbstractValue(appView), concreteParameterState.copyInFlow());
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteArrayTypeFieldState.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteArrayTypeFieldState.java
index 2f669dc..d8b4587 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteArrayTypeFieldState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteArrayTypeFieldState.java
@@ -7,7 +7,7 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteReferenceTypeParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteReferenceTypeValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.InFlow;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
@@ -94,7 +94,7 @@
   public FieldState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ProgramField field,
-      ConcreteReferenceTypeParameterState parameterState,
+      ConcreteReferenceTypeValueState parameterState,
       Action onChangedAction) {
     boolean abstractValueChanged =
         mutableJoinAbstractValue(appView, field, parameterState.getAbstractValue(appView));
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteClassTypeFieldState.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteClassTypeFieldState.java
index 9b382ba..4217f4c 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteClassTypeFieldState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteClassTypeFieldState.java
@@ -8,7 +8,7 @@
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.ir.analysis.type.DynamicType;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteReferenceTypeParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteReferenceTypeValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.InFlow;
 import com.android.tools.r8.optimize.argumentpropagation.utils.WideningUtils;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -117,7 +117,7 @@
   public FieldState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ProgramField field,
-      ConcreteReferenceTypeParameterState parameterState,
+      ConcreteReferenceTypeValueState parameterState,
       Action onChangedAction) {
     boolean abstractValueChanged =
         mutableJoinAbstractValue(appView, field, parameterState.getAbstractValue(appView));
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteFieldState.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteFieldState.java
index 94e0afd..1605e9f 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteFieldState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteFieldState.java
@@ -7,9 +7,9 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.InFlow;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyValueState;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 import java.util.Collections;
@@ -102,12 +102,12 @@
   public FieldState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ProgramField field,
-      NonEmptyParameterState parameterState,
+      NonEmptyValueState parameterState,
       Action onChangedAction) {
     if (parameterState.isUnknown()) {
       return unknown();
     }
-    ConcreteParameterState concreteParameterState = parameterState.asConcrete();
+    ConcreteValueState concreteParameterState = parameterState.asConcrete();
     if (isReference()) {
       assert concreteParameterState.isReferenceParameter();
       return asReference()
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcretePrimitiveTypeFieldState.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcretePrimitiveTypeFieldState.java
index 875a5eb..68e767e 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcretePrimitiveTypeFieldState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcretePrimitiveTypeFieldState.java
@@ -7,7 +7,7 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcretePrimitiveTypeParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcretePrimitiveTypeValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.InFlow;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
@@ -88,7 +88,7 @@
   public FieldState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ProgramField field,
-      ConcretePrimitiveTypeParameterState parameterState,
+      ConcretePrimitiveTypeValueState parameterState,
       Action onChangedAction) {
     assert field.getType().isPrimitiveType();
     boolean abstractValueChanged =
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteReferenceTypeFieldState.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteReferenceTypeFieldState.java
index fad2b58..f7c99bd 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteReferenceTypeFieldState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/ConcreteReferenceTypeFieldState.java
@@ -8,7 +8,7 @@
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.ir.analysis.type.DynamicType;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteReferenceTypeParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteReferenceTypeValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.InFlow;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
@@ -46,6 +46,6 @@
   public abstract FieldState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ProgramField field,
-      ConcreteReferenceTypeParameterState parameterState,
+      ConcreteReferenceTypeValueState parameterState,
       Action onChangedAction);
 }
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/FieldState.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/FieldState.java
index 18fb4ba..7fee282 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/FieldState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/FieldState.java
@@ -8,7 +8,7 @@
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
 import com.android.tools.r8.ir.analysis.value.AbstractValueFactory;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyValueState;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 
@@ -94,6 +94,6 @@
   public abstract FieldState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ProgramField field,
-      NonEmptyParameterState parameterState,
+      NonEmptyValueState parameterState,
       Action onChangedAction);
 }
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/UnknownFieldState.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/UnknownFieldState.java
index c480bec..b4f2743 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/UnknownFieldState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/state/UnknownFieldState.java
@@ -7,7 +7,7 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyValueState;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 import java.util.function.Function;
@@ -51,7 +51,7 @@
   public FieldState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ProgramField field,
-      NonEmptyParameterState parameterState,
+      NonEmptyValueState parameterState,
       Action onChangedAction) {
     return this;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
index 3314582..0e24e5d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/ConcreteCallSiteOptimizationInfo.java
@@ -18,8 +18,8 @@
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
 import com.android.tools.r8.ir.analysis.value.UnknownValue;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteMonomorphicMethodState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteParameterState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteValueState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ValueState;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import it.unimi.dsi.fastutil.ints.Int2ReferenceArrayMap;
 import it.unimi.dsi.fastutil.ints.Int2ReferenceMap;
@@ -141,12 +141,12 @@
         new ConcreteCallSiteOptimizationInfo(methodState.size());
     boolean isTop = true;
     for (int argumentIndex = 0; argumentIndex < methodState.size(); argumentIndex++) {
-      ParameterState parameterState = methodState.getParameterState(argumentIndex);
+      ValueState parameterState = methodState.getParameterState(argumentIndex);
       if (parameterState.isUnknown()) {
         continue;
       }
 
-      ConcreteParameterState concreteParameterState = parameterState.asConcrete();
+      ConcreteValueState concreteParameterState = parameterState.asConcrete();
 
       // Constant propagation.
         AbstractValue abstractValue = concreteParameterState.getAbstractValue(appView);
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
index 0dc55d3..0eae64d 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
@@ -27,21 +27,21 @@
 import com.android.tools.r8.ir.code.InvokeMethod;
 import com.android.tools.r8.ir.code.InvokeMethodWithReceiver;
 import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteArrayTypeParameterState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteClassTypeParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteArrayTypeValueState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteClassTypeValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteMonomorphicMethodState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteMonomorphicMethodStateOrBottom;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteMonomorphicMethodStateOrUnknown;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcretePolymorphicMethodState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcretePolymorphicMethodStateOrBottom;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcretePrimitiveTypeParameterState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteReceiverParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcretePrimitiveTypeValueState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteReceiverValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodParameter;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodParameterFactory;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodStateCollectionByReference;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ParameterState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.UnknownMethodState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ValueState;
 import com.android.tools.r8.optimize.argumentpropagation.reprocessingcriteria.ArgumentPropagatorReprocessingCriteriaCollection;
 import com.android.tools.r8.optimize.argumentpropagation.reprocessingcriteria.MethodReprocessingCriteria;
 import com.android.tools.r8.optimize.argumentpropagation.reprocessingcriteria.ParameterReprocessingCriteria;
@@ -129,7 +129,7 @@
       methodState = methodState.asPolymorphic().getMethodStateForBounds(DynamicType.unknown());
     }
     if (methodState.isMonomorphic()) {
-      ParameterState parameterState =
+      ValueState parameterState =
           methodState.asMonomorphic().getParameterState(methodParameter.getIndex());
       return parameterState.isUnknown();
     }
@@ -420,7 +420,7 @@
       ProgramMethod context,
       ConcreteMonomorphicMethodStateOrBottom existingMethodState,
       DynamicType dynamicReceiverType) {
-    List<ParameterState> parameterStates = new ArrayList<>(invoke.arguments().size());
+    List<ValueState> parameterStates = new ArrayList<>(invoke.arguments().size());
 
     MethodReprocessingCriteria methodReprocessingCriteria =
         singleTarget != null
@@ -461,7 +461,7 @@
   // track the dynamic type for receivers.
   // TODO(b/190154391): Consider validating the above hypothesis by using
   //  computeParameterStateForNonReceiver() for receivers.
-  private ParameterState computeParameterStateForReceiver(
+  private ValueState computeParameterStateForReceiver(
       ProgramMethod resolvedMethod,
       DynamicType dynamicReceiverType,
       ConcreteMonomorphicMethodStateOrBottom existingMethodState,
@@ -469,24 +469,24 @@
     // Don't compute a state for this parameter if the stored state is already unknown.
     if (existingMethodState.isMonomorphic()
         && existingMethodState.asMonomorphic().getParameterState(0).isUnknown()) {
-      return ParameterState.unknown();
+      return ValueState.unknown();
     }
 
     // For receivers we only track the dynamic type. Therefore, if there is no need to track the
     // dynamic type of the receiver of the targeted method, then just return unknown.
     if (!parameterReprocessingCriteria.shouldReprocessDueToDynamicType()) {
-      return ParameterState.unknown();
+      return ValueState.unknown();
     }
 
     DynamicType widenedDynamicReceiverType =
         WideningUtils.widenDynamicReceiverType(appView, resolvedMethod, dynamicReceiverType);
     return widenedDynamicReceiverType.isUnknown()
-        ? ParameterState.unknown()
-        : new ConcreteReceiverParameterState(dynamicReceiverType);
+        ? ValueState.unknown()
+        : new ConcreteReceiverValueState(dynamicReceiverType);
   }
 
   @SuppressWarnings("UnusedVariable")
-  private ParameterState computeParameterStateForNonReceiver(
+  private ValueState computeParameterStateForNonReceiver(
       InvokeMethod invoke,
       ProgramMethod singleTarget,
       int argumentIndex,
@@ -494,7 +494,7 @@
       AbstractValueSupplier abstractValueSupplier,
       ProgramMethod context,
       ConcreteMonomorphicMethodStateOrBottom existingMethodState) {
-    ParameterState modeledState =
+    ValueState modeledState =
         modeling.modelParameterStateForArgumentToFunction(
             invoke, singleTarget, argumentIndex, argument, context);
     if (modeledState != null) {
@@ -504,7 +504,7 @@
     // Don't compute a state for this parameter if the stored state is already unknown.
     if (existingMethodState.isMonomorphic()
         && existingMethodState.asMonomorphic().getParameterState(argumentIndex).isUnknown()) {
-      return ParameterState.unknown();
+      return ValueState.unknown();
     }
 
     Value argumentRoot = argument.getAliasedValue(aliasedValueConfiguration);
@@ -522,15 +522,15 @@
           methodParameterFactory.create(
               context, argumentRoot.getDefinition().asArgument().getIndex());
       if (isMethodParameterAlreadyUnknown(forwardedParameter, context)) {
-        return ParameterState.unknown();
+        return ValueState.unknown();
       }
       if (parameterTypeElement.isClassType()) {
-        return new ConcreteClassTypeParameterState(forwardedParameter);
+        return new ConcreteClassTypeValueState(forwardedParameter);
       } else if (parameterTypeElement.isArrayType()) {
-        return new ConcreteArrayTypeParameterState(forwardedParameter);
+        return new ConcreteArrayTypeValueState(forwardedParameter);
       } else {
         assert parameterTypeElement.isPrimitiveType();
-        return new ConcretePrimitiveTypeParameterState(forwardedParameter);
+        return new ConcretePrimitiveTypeValueState(forwardedParameter);
       }
     }
 
@@ -538,8 +538,8 @@
     if (parameterTypeElement.isArrayType()) {
       Nullability nullability = argument.getType().nullability();
       return nullability.isMaybeNull()
-          ? ParameterState.unknown()
-          : new ConcreteArrayTypeParameterState(nullability);
+          ? ValueState.unknown()
+          : new ConcreteArrayTypeValueState(nullability);
     }
 
     AbstractValue abstractValue = abstractValueSupplier.getAbstractValue(argument);
@@ -551,16 +551,16 @@
       DynamicType widenedDynamicType =
           WideningUtils.widenDynamicNonReceiverType(appView, dynamicType, parameterType);
       return abstractValue.isUnknown() && widenedDynamicType.isUnknown()
-          ? ParameterState.unknown()
-          : new ConcreteClassTypeParameterState(abstractValue, widenedDynamicType);
+          ? ValueState.unknown()
+          : new ConcreteClassTypeValueState(abstractValue, widenedDynamicType);
     }
 
     // For primitive types, we only track the abstract value, thus if the abstract value is unknown,
     // we use UnknownParameterState.
     assert parameterTypeElement.isPrimitiveType();
     return abstractValue.isUnknown()
-        ? ParameterState.unknown()
-        : new ConcretePrimitiveTypeParameterState(abstractValue);
+        ? ValueState.unknown()
+        : new ConcretePrimitiveTypeValueState(abstractValue);
   }
 
   @SuppressWarnings("ReferenceEquality")
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScannerModeling.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScannerModeling.java
index 7931180..3e5e433 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScannerModeling.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScannerModeling.java
@@ -7,7 +7,7 @@
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.code.InvokeMethod;
 import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ValueState;
 import com.android.tools.r8.optimize.compose.ArgumentPropagatorComposeModeling;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 
@@ -22,7 +22,7 @@
             : null;
   }
 
-  ParameterState modelParameterStateForArgumentToFunction(
+  ValueState modelParameterStateForArgumentToFunction(
       InvokeMethod invoke,
       ProgramMethod singleTarget,
       int argumentIndex,
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java
index 6b05437..fbe7a42 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java
@@ -18,14 +18,14 @@
 import com.android.tools.r8.ir.optimize.info.ConcreteCallSiteOptimizationInfo;
 import com.android.tools.r8.ir.optimize.info.MethodOptimizationInfo;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteClassTypeParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteClassTypeValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteMethodState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteMonomorphicMethodState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodStateCollectionByReference;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ParameterState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.StateCloner;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ValueState;
 import com.android.tools.r8.optimize.argumentpropagation.utils.WideningUtils;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.InternalOptions;
@@ -158,13 +158,13 @@
     }
 
     // Verify that there is no parameter with bottom info.
-    assert monomorphicMethodState.getParameterStates().stream().noneMatch(ParameterState::isBottom);
+    assert monomorphicMethodState.getParameterStates().stream().noneMatch(ValueState::isBottom);
 
     // Verify that all in-parameter information has been pruned by the InParameterFlowPropagator.
     assert monomorphicMethodState.getParameterStates().stream()
-        .filter(ParameterState::isConcrete)
-        .map(ParameterState::asConcrete)
-        .noneMatch(ConcreteParameterState::hasInFlow);
+        .filter(ValueState::isConcrete)
+        .map(ValueState::asConcrete)
+        .noneMatch(ConcreteValueState::hasInFlow);
 
     if (monomorphicMethodState.size() > 0) {
       getSimpleFeedback()
@@ -182,7 +182,7 @@
     // arguments.
     MethodOptimizationInfo optimizationInfo = method.getOptimizationInfo();
     if (optimizationInfo.returnsArgument()) {
-      ParameterState returnedArgumentState =
+      ValueState returnedArgumentState =
           monomorphicMethodState.getParameterState(optimizationInfo.getReturnedArgument());
       OptimizationFeedback.getSimple()
           .methodReturnsAbstractValue(
@@ -199,7 +199,7 @@
 
     int numberOfArguments = method.getDefinition().getNumberOfArguments();
     boolean isReturnValueUsed;
-    List<ParameterState> parameterStates;
+    List<ValueState> parameterStates;
     if (methodState.isMonomorphic()) {
       ConcreteMonomorphicMethodState monomorphicMethodState = methodState.asMonomorphic();
       isReturnValueUsed = monomorphicMethodState.isReturnValueUsed();
@@ -207,10 +207,9 @@
     } else {
       assert methodState.isUnknown();
       isReturnValueUsed = true;
-      parameterStates =
-          ListUtils.newInitializedArrayList(numberOfArguments, ParameterState.unknown());
+      parameterStates = ListUtils.newInitializedArrayList(numberOfArguments, ValueState.unknown());
     }
-    List<ParameterState> narrowedParameterStates =
+    List<ValueState> narrowedParameterStates =
         ListUtils.mapOrElse(
             parameterStates,
             (argumentIndex, parameterState) -> {
@@ -221,7 +220,7 @@
               if (!argumentType.isAlwaysNull(appView)) {
                 return parameterState;
               }
-              return new ConcreteClassTypeParameterState(
+              return new ConcreteClassTypeValueState(
                   appView.abstractValueFactory().createNullValue(argumentType),
                   DynamicType.definitelyNull());
             },
@@ -236,8 +235,7 @@
     for (int argumentIndex = 0;
         argumentIndex < methodState.getParameterStates().size();
         argumentIndex++) {
-      ConcreteParameterState parameterState =
-          methodState.getParameterState(argumentIndex).asConcrete();
+      ConcreteValueState parameterState = methodState.getParameterState(argumentIndex).asConcrete();
       if (parameterState == null || !parameterState.isClassParameter()) {
         continue;
       }
@@ -248,7 +246,7 @@
             argumentIndex,
             parameterState.mutableJoin(
                 appView,
-                new ConcreteClassTypeParameterState(AbstractValue.bottom(), DynamicType.unknown()),
+                new ConcreteClassTypeValueState(AbstractValue.bottom(), DynamicType.unknown()),
                 staticType,
                 StateCloner.getIdentity()));
       }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomArrayTypeParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomArrayTypeValueState.java
similarity index 74%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomArrayTypeParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomArrayTypeValueState.java
index 6eca890..bf1ba8b 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomArrayTypeParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomArrayTypeValueState.java
@@ -12,20 +12,20 @@
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 
-public class BottomArrayTypeParameterState extends BottomParameterState {
+public class BottomArrayTypeValueState extends BottomValueState {
 
-  private static final BottomArrayTypeParameterState INSTANCE = new BottomArrayTypeParameterState();
+  private static final BottomArrayTypeValueState INSTANCE = new BottomArrayTypeValueState();
 
-  private BottomArrayTypeParameterState() {}
+  private BottomArrayTypeValueState() {}
 
-  public static BottomArrayTypeParameterState get() {
+  public static BottomArrayTypeValueState get() {
     return INSTANCE;
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ParameterState parameterState,
+      ValueState parameterState,
       DexType parameterType,
       StateCloner cloner,
       Action onChangedAction) {
@@ -37,7 +37,7 @@
     }
     assert parameterState.isConcrete();
     assert parameterState.asConcrete().isReferenceParameter();
-    ConcreteReferenceTypeParameterState concreteParameterState =
+    ConcreteReferenceTypeValueState concreteParameterState =
         parameterState.asConcrete().asReferenceParameter();
     if (concreteParameterState.isArrayParameter()) {
       return cloner.mutableCopy(concreteParameterState);
@@ -46,11 +46,11 @@
     if (nullability.isMaybeNull()) {
       return unknown();
     }
-    return new ConcreteArrayTypeParameterState(nullability, concreteParameterState.copyInFlow());
+    return new ConcreteArrayTypeValueState(nullability, concreteParameterState.copyInFlow());
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteFieldState fieldState,
       DexType parameterType,
@@ -62,7 +62,7 @@
       if (nullability.isUnknown()) {
         return unknown();
       }
-      return new ConcreteArrayTypeParameterState(nullability, classFieldState.copyInFlow());
+      return new ConcreteArrayTypeValueState(nullability, classFieldState.copyInFlow());
     }
     return unknown();
   }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomClassTypeParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomClassTypeValueState.java
similarity index 81%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomClassTypeParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomClassTypeValueState.java
index a0e8525..df28567 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomClassTypeParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomClassTypeValueState.java
@@ -14,20 +14,20 @@
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 
-public class BottomClassTypeParameterState extends BottomParameterState {
+public class BottomClassTypeValueState extends BottomValueState {
 
-  private static final BottomClassTypeParameterState INSTANCE = new BottomClassTypeParameterState();
+  private static final BottomClassTypeValueState INSTANCE = new BottomClassTypeValueState();
 
-  private BottomClassTypeParameterState() {}
+  private BottomClassTypeValueState() {}
 
-  public static BottomClassTypeParameterState get() {
+  public static BottomClassTypeValueState get() {
     return INSTANCE;
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ParameterState parameterState,
+      ValueState parameterState,
       DexType parameterType,
       StateCloner cloner,
       Action onChangedAction) {
@@ -39,7 +39,7 @@
     }
     assert parameterState.isConcrete();
     assert parameterState.asConcrete().isReferenceParameter();
-    ConcreteReferenceTypeParameterState concreteParameterState =
+    ConcreteReferenceTypeValueState concreteParameterState =
         parameterState.asConcrete().asReferenceParameter();
     AbstractValue abstractValue = concreteParameterState.getAbstractValue(appView);
     DynamicType dynamicType = concreteParameterState.getDynamicType();
@@ -50,12 +50,12 @@
     }
     return abstractValue.isUnknown() && widenedDynamicType.isUnknown()
         ? unknown()
-        : new ConcreteClassTypeParameterState(
+        : new ConcreteClassTypeValueState(
             abstractValue, widenedDynamicType, concreteParameterState.copyInFlow());
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteFieldState fieldState,
       DexType parameterType,
@@ -63,7 +63,7 @@
     ConcreteReferenceTypeFieldState referenceFieldState = fieldState.asReference();
     AbstractValue abstractValue = referenceFieldState.getAbstractValue();
     DynamicType dynamicType = referenceFieldState.getDynamicType();
-    return new ConcreteClassTypeParameterState(
+    return new ConcreteClassTypeValueState(
         abstractValue, dynamicType, referenceFieldState.copyInFlow());
   }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomPrimitiveTypeParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomPrimitiveTypeValueState.java
similarity index 73%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomPrimitiveTypeParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomPrimitiveTypeValueState.java
index 308163a..e1da2ea 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomPrimitiveTypeParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomPrimitiveTypeValueState.java
@@ -10,21 +10,20 @@
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 
-public class BottomPrimitiveTypeParameterState extends BottomParameterState {
+public class BottomPrimitiveTypeValueState extends BottomValueState {
 
-  private static final BottomPrimitiveTypeParameterState INSTANCE =
-      new BottomPrimitiveTypeParameterState();
+  private static final BottomPrimitiveTypeValueState INSTANCE = new BottomPrimitiveTypeValueState();
 
-  private BottomPrimitiveTypeParameterState() {}
+  private BottomPrimitiveTypeValueState() {}
 
-  public static BottomPrimitiveTypeParameterState get() {
+  public static BottomPrimitiveTypeValueState get() {
     return INSTANCE;
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ParameterState parameterState,
+      ValueState parameterState,
       DexType parameterType,
       StateCloner cloner,
       Action onChangedAction) {
@@ -41,12 +40,12 @@
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteFieldState fieldState,
       DexType parameterType,
       Action onChangedAction) {
-    return new ConcretePrimitiveTypeParameterState(
+    return new ConcretePrimitiveTypeValueState(
         fieldState.getAbstractValue(), fieldState.copyInFlow());
   }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomReceiverParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomReceiverValueState.java
similarity index 76%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomReceiverParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomReceiverValueState.java
index 7ba970d..de17523 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomReceiverParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomReceiverValueState.java
@@ -13,20 +13,20 @@
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 
-public class BottomReceiverParameterState extends BottomParameterState {
+public class BottomReceiverValueState extends BottomValueState {
 
-  private static final BottomReceiverParameterState INSTANCE = new BottomReceiverParameterState();
+  private static final BottomReceiverValueState INSTANCE = new BottomReceiverValueState();
 
-  private BottomReceiverParameterState() {}
+  private BottomReceiverValueState() {}
 
-  public static BottomReceiverParameterState get() {
+  public static BottomReceiverValueState get() {
     return INSTANCE;
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ParameterState parameterState,
+      ValueState parameterState,
       DexType parameterType,
       StateCloner cloner,
       Action onChangedAction) {
@@ -38,7 +38,7 @@
     }
     assert parameterState.isConcrete();
     assert parameterState.asConcrete().isReferenceParameter();
-    ConcreteReferenceTypeParameterState concreteParameterState =
+    ConcreteReferenceTypeValueState concreteParameterState =
         parameterState.asConcrete().asReferenceParameter();
     if (concreteParameterState.isReceiverParameter()) {
       return cloner.mutableCopy(concreteParameterState);
@@ -47,11 +47,11 @@
     if (dynamicType.isUnknown()) {
       return unknown();
     }
-    return new ConcreteReceiverParameterState(dynamicType, concreteParameterState.copyInFlow());
+    return new ConcreteReceiverValueState(dynamicType, concreteParameterState.copyInFlow());
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteFieldState fieldState,
       DexType parameterType,
@@ -64,7 +64,7 @@
         return unknown();
       }
       DynamicType nonNullDynamicType = dynamicType.withNullability(Nullability.definitelyNotNull());
-      return new ConcreteReceiverParameterState(nonNullDynamicType, classFieldState.copyInFlow());
+      return new ConcreteReceiverValueState(nonNullDynamicType, classFieldState.copyInFlow());
     }
     return unknown();
   }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomValueState.java
similarity index 82%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomValueState.java
index a1a3908..bcd03fc 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/BottomValueState.java
@@ -8,9 +8,9 @@
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 
-public abstract class BottomParameterState extends ParameterState {
+public abstract class BottomValueState extends ValueState {
 
-  BottomParameterState() {}
+  BottomValueState() {}
 
   @Override
   public final AbstractValue getAbstractValue(AppView<AppInfoWithLiveness> appView) {
@@ -23,7 +23,7 @@
   }
 
   @Override
-  public final ParameterState mutableCopy() {
+  public final ValueState mutableCopy() {
     return this;
   }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteArrayTypeParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteArrayTypeValueState.java
similarity index 83%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteArrayTypeParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteArrayTypeValueState.java
index b2a1d0d..6775bf4 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteArrayTypeParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteArrayTypeValueState.java
@@ -16,19 +16,19 @@
 import java.util.Collections;
 import java.util.Set;
 
-public class ConcreteArrayTypeParameterState extends ConcreteReferenceTypeParameterState {
+public class ConcreteArrayTypeValueState extends ConcreteReferenceTypeValueState {
 
   private Nullability nullability;
 
-  public ConcreteArrayTypeParameterState(InFlow inFlow) {
+  public ConcreteArrayTypeValueState(InFlow inFlow) {
     this(Nullability.bottom(), SetUtils.newHashSet(inFlow));
   }
 
-  public ConcreteArrayTypeParameterState(Nullability nullability) {
+  public ConcreteArrayTypeValueState(Nullability nullability) {
     this(nullability, Collections.emptySet());
   }
 
-  public ConcreteArrayTypeParameterState(Nullability nullability, Set<InFlow> inFlow) {
+  public ConcreteArrayTypeValueState(Nullability nullability, Set<InFlow> inFlow) {
     super(inFlow);
     this.nullability = nullability;
     assert !isEffectivelyBottom() : "Must use BottomArrayTypeParameterState instead";
@@ -36,7 +36,7 @@
   }
 
   @Override
-  public ParameterState clearInFlow() {
+  public ValueState clearInFlow() {
     if (hasInFlow()) {
       if (nullability.isBottom()) {
         return bottomArrayTypeParameter();
@@ -76,7 +76,7 @@
   }
 
   @Override
-  public ConcreteArrayTypeParameterState asArrayParameter() {
+  public ConcreteArrayTypeValueState asArrayParameter() {
     return this;
   }
 
@@ -91,14 +91,14 @@
   }
 
   @Override
-  public ParameterState mutableCopy() {
-    return new ConcreteArrayTypeParameterState(nullability, copyInFlow());
+  public ValueState mutableCopy() {
+    return new ConcreteArrayTypeValueState(nullability, copyInFlow());
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ConcreteReferenceTypeParameterState parameterState,
+      ConcreteReferenceTypeValueState parameterState,
       DexType parameterType,
       Action onChangedAction) {
     assert parameterType.isArrayType();
@@ -118,7 +118,7 @@
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteReferenceTypeFieldState fieldState,
       DexType parameterType,
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeValueState.java
similarity index 88%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeValueState.java
index 61794d5..4366388 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeValueState.java
@@ -17,20 +17,20 @@
 import java.util.Collections;
 import java.util.Set;
 
-public class ConcreteClassTypeParameterState extends ConcreteReferenceTypeParameterState {
+public class ConcreteClassTypeValueState extends ConcreteReferenceTypeValueState {
 
   private AbstractValue abstractValue;
   private DynamicType dynamicType;
 
-  public ConcreteClassTypeParameterState(InFlow inFlow) {
+  public ConcreteClassTypeValueState(InFlow inFlow) {
     this(AbstractValue.bottom(), DynamicType.bottom(), SetUtils.newHashSet(inFlow));
   }
 
-  public ConcreteClassTypeParameterState(AbstractValue abstractValue, DynamicType dynamicType) {
+  public ConcreteClassTypeValueState(AbstractValue abstractValue, DynamicType dynamicType) {
     this(abstractValue, dynamicType, Collections.emptySet());
   }
 
-  public ConcreteClassTypeParameterState(
+  public ConcreteClassTypeValueState(
       AbstractValue abstractValue, DynamicType dynamicType, Set<InFlow> inFlow) {
     super(inFlow);
     this.abstractValue = abstractValue;
@@ -40,7 +40,7 @@
   }
 
   @Override
-  public ParameterState clearInFlow() {
+  public ValueState clearInFlow() {
     if (hasInFlow()) {
       if (abstractValue.isBottom()) {
         assert dynamicType.isBottom();
@@ -82,7 +82,7 @@
   }
 
   @Override
-  public ConcreteClassTypeParameterState asClassParameter() {
+  public ConcreteClassTypeValueState asClassParameter() {
     return this;
   }
 
@@ -97,14 +97,14 @@
   }
 
   @Override
-  public ParameterState mutableCopy() {
-    return new ConcreteClassTypeParameterState(abstractValue, dynamicType, copyInFlow());
+  public ValueState mutableCopy() {
+    return new ConcreteClassTypeValueState(abstractValue, dynamicType, copyInFlow());
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ConcreteReferenceTypeParameterState parameterState,
+      ConcreteReferenceTypeValueState parameterState,
       DexType parameterType,
       Action onChangedAction) {
     assert parameterType.isClassType();
@@ -126,7 +126,7 @@
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteReferenceTypeFieldState fieldState,
       DexType parameterType,
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteMonomorphicMethodState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteMonomorphicMethodState.java
index e730d74..7f0b954 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteMonomorphicMethodState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteMonomorphicMethodState.java
@@ -17,10 +17,10 @@
     implements ConcreteMonomorphicMethodStateOrBottom, ConcreteMonomorphicMethodStateOrUnknown {
 
   boolean isReturnValueUsed;
-  List<ParameterState> parameterStates;
+  List<ValueState> parameterStates;
 
   public ConcreteMonomorphicMethodState(
-      boolean isReturnValueUsed, List<ParameterState> parameterStates) {
+      boolean isReturnValueUsed, List<ValueState> parameterStates) {
     assert Streams.stream(Iterables.skip(parameterStates, 1))
         .noneMatch(x -> x.isConcrete() && x.asConcrete().isReceiverParameter());
     this.isReturnValueUsed = isReturnValueUsed;
@@ -29,17 +29,17 @@
   }
 
   public static ConcreteMonomorphicMethodStateOrUnknown create(
-      boolean isReturnValueUsed, List<ParameterState> parameterStates) {
+      boolean isReturnValueUsed, List<ValueState> parameterStates) {
     return isEffectivelyUnknown(isReturnValueUsed, parameterStates)
         ? unknown()
         : new ConcreteMonomorphicMethodState(isReturnValueUsed, parameterStates);
   }
 
-  public ParameterState getParameterState(int index) {
+  public ValueState getParameterState(int index) {
     return parameterStates.get(index);
   }
 
-  public List<ParameterState> getParameterStates() {
+  public List<ValueState> getParameterStates() {
     return parameterStates;
   }
 
@@ -48,7 +48,7 @@
   }
 
   public boolean isEffectivelyBottom() {
-    return Iterables.any(parameterStates, ParameterState::isBottom);
+    return Iterables.any(parameterStates, ValueState::isBottom);
   }
 
   public boolean isEffectivelyUnknown() {
@@ -56,14 +56,14 @@
   }
 
   private static boolean isEffectivelyUnknown(
-      boolean isReturnValueUsed, List<ParameterState> parameterStates) {
-    return isReturnValueUsed && Iterables.all(parameterStates, ParameterState::isUnknown);
+      boolean isReturnValueUsed, List<ValueState> parameterStates) {
+    return isReturnValueUsed && Iterables.all(parameterStates, ValueState::isUnknown);
   }
 
   @Override
   public ConcreteMonomorphicMethodState mutableCopy() {
-    List<ParameterState> copiedParametersStates = new ArrayList<>(size());
-    for (ParameterState parameterState : getParameterStates()) {
+    List<ValueState> copiedParametersStates = new ArrayList<>(size());
+    for (ValueState parameterState : getParameterStates()) {
       copiedParametersStates.add(parameterState.mutableCopy());
     }
     return new ConcreteMonomorphicMethodState(isReturnValueUsed, copiedParametersStates);
@@ -86,8 +86,8 @@
     int argumentIndex = 0;
     if (size() > methodSignature.getArity()) {
       assert size() == methodSignature.getArity() + 1;
-      ParameterState parameterState = parameterStates.get(0);
-      ParameterState otherParameterState = methodState.parameterStates.get(0);
+      ValueState parameterState = parameterStates.get(0);
+      ValueState otherParameterState = methodState.parameterStates.get(0);
       DexType parameterType = null;
       parameterStates.set(
           0, parameterState.mutableJoin(appView, otherParameterState, parameterType, cloner));
@@ -95,8 +95,8 @@
     }
 
     for (int parameterIndex = 0; argumentIndex < size(); argumentIndex++, parameterIndex++) {
-      ParameterState parameterState = parameterStates.get(argumentIndex);
-      ParameterState otherParameterState = methodState.parameterStates.get(argumentIndex);
+      ValueState parameterState = parameterStates.get(argumentIndex);
+      ValueState otherParameterState = methodState.parameterStates.get(argumentIndex);
       DexType parameterType = methodSignature.getParameter(parameterIndex);
       parameterStates.set(
           argumentIndex,
@@ -123,7 +123,7 @@
     return this;
   }
 
-  public void setParameterState(int index, ParameterState parameterState) {
+  public void setParameterState(int index, ValueState parameterState) {
     assert index == 0
         || !parameterState.isConcrete()
         || !parameterState.asConcrete().isReceiverParameter();
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeValueState.java
similarity index 83%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeValueState.java
index 9e9ea03..37686ed 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeValueState.java
@@ -14,27 +14,27 @@
 import java.util.Collections;
 import java.util.Set;
 
-public class ConcretePrimitiveTypeParameterState extends ConcreteParameterState {
+public class ConcretePrimitiveTypeValueState extends ConcreteValueState {
 
   private AbstractValue abstractValue;
 
-  public ConcretePrimitiveTypeParameterState(AbstractValue abstractValue) {
+  public ConcretePrimitiveTypeValueState(AbstractValue abstractValue) {
     this(abstractValue, Collections.emptySet());
   }
 
-  public ConcretePrimitiveTypeParameterState(AbstractValue abstractValue, Set<InFlow> inFlow) {
+  public ConcretePrimitiveTypeValueState(AbstractValue abstractValue, Set<InFlow> inFlow) {
     super(inFlow);
     this.abstractValue = abstractValue;
     assert !isEffectivelyBottom() : "Must use BottomPrimitiveTypeParameterState instead";
     assert !isEffectivelyUnknown() : "Must use UnknownParameterState instead";
   }
 
-  public ConcretePrimitiveTypeParameterState(InFlow inFlow) {
+  public ConcretePrimitiveTypeValueState(InFlow inFlow) {
     this(AbstractValue.bottom(), SetUtils.newHashSet(inFlow));
   }
 
   @Override
-  public ParameterState clearInFlow() {
+  public ValueState clearInFlow() {
     if (hasInFlow()) {
       if (abstractValue.isBottom()) {
         return bottomPrimitiveTypeParameter();
@@ -46,13 +46,13 @@
   }
 
   @Override
-  public ParameterState mutableCopy() {
-    return new ConcretePrimitiveTypeParameterState(abstractValue, copyInFlow());
+  public ValueState mutableCopy() {
+    return new ConcretePrimitiveTypeValueState(abstractValue, copyInFlow());
   }
 
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ConcretePrimitiveTypeParameterState parameterState,
+      ConcretePrimitiveTypeValueState parameterState,
       DexType parameterType,
       Action onChangedAction) {
     assert parameterType.isPrimitiveType();
@@ -71,7 +71,7 @@
     return this;
   }
 
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcretePrimitiveTypeFieldState fieldState,
       DexType parameterType,
@@ -134,7 +134,7 @@
   }
 
   @Override
-  public ConcretePrimitiveTypeParameterState asPrimitiveParameter() {
+  public ConcretePrimitiveTypeValueState asPrimitiveParameter() {
     return this;
   }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverValueState.java
similarity index 87%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverValueState.java
index 4d23589..d5721d9 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverValueState.java
@@ -16,15 +16,15 @@
 import java.util.Collections;
 import java.util.Set;
 
-public class ConcreteReceiverParameterState extends ConcreteReferenceTypeParameterState {
+public class ConcreteReceiverValueState extends ConcreteReferenceTypeValueState {
 
   private DynamicType dynamicType;
 
-  public ConcreteReceiverParameterState(DynamicType dynamicType) {
+  public ConcreteReceiverValueState(DynamicType dynamicType) {
     this(dynamicType, Collections.emptySet());
   }
 
-  public ConcreteReceiverParameterState(DynamicType dynamicType, Set<InFlow> inFlow) {
+  public ConcreteReceiverValueState(DynamicType dynamicType, Set<InFlow> inFlow) {
     super(inFlow);
     this.dynamicType = dynamicType;
     assert !isEffectivelyBottom() : "Must use BottomReceiverParameterState instead";
@@ -32,7 +32,7 @@
   }
 
   @Override
-  public ParameterState clearInFlow() {
+  public ValueState clearInFlow() {
     if (hasInFlow()) {
       if (dynamicType.isBottom()) {
         return bottomReceiverParameter();
@@ -79,19 +79,19 @@
   }
 
   @Override
-  public ConcreteReceiverParameterState asReceiverParameter() {
+  public ConcreteReceiverValueState asReceiverParameter() {
     return this;
   }
 
   @Override
-  public ParameterState mutableCopy() {
-    return new ConcreteReceiverParameterState(dynamicType, copyInFlow());
+  public ValueState mutableCopy() {
+    return new ConcreteReceiverValueState(dynamicType, copyInFlow());
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ConcreteReferenceTypeParameterState parameterState,
+      ConcreteReferenceTypeValueState parameterState,
       DexType parameterType,
       Action onChangedAction) {
     // TODO(b/190154391): Always take in the static type as an argument, and unset the dynamic type
@@ -113,7 +113,7 @@
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteReferenceTypeFieldState fieldState,
       DexType parameterType,
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeValueState.java
similarity index 76%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeValueState.java
index 4b17ea7..dd23935 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReferenceTypeValueState.java
@@ -13,9 +13,9 @@
 import com.android.tools.r8.utils.Action;
 import java.util.Set;
 
-public abstract class ConcreteReferenceTypeParameterState extends ConcreteParameterState {
+public abstract class ConcreteReferenceTypeValueState extends ConcreteValueState {
 
-  ConcreteReferenceTypeParameterState(Set<InFlow> inFlow) {
+  ConcreteReferenceTypeValueState(Set<InFlow> inFlow) {
     super(inFlow);
   }
 
@@ -29,17 +29,17 @@
   }
 
   @Override
-  public ConcreteReferenceTypeParameterState asReferenceParameter() {
+  public ConcreteReferenceTypeValueState asReferenceParameter() {
     return this;
   }
 
-  public abstract ParameterState mutableJoin(
+  public abstract ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ConcreteReferenceTypeParameterState parameterState,
+      ConcreteReferenceTypeValueState parameterState,
       DexType parameterType,
       Action onChangedAction);
 
-  public abstract ParameterState mutableJoin(
+  public abstract ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteReferenceTypeFieldState fieldState,
       DexType parameterType,
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteValueState.java
similarity index 82%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteValueState.java
index a342453..2c7e129 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteValueState.java
@@ -13,7 +13,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
-public abstract class ConcreteParameterState extends NonEmptyParameterState {
+public abstract class ConcreteValueState extends NonEmptyValueState {
 
   public enum ConcreteParameterStateKind {
     ARRAY,
@@ -24,11 +24,11 @@
 
   private Set<InFlow> inFlow;
 
-  ConcreteParameterState(Set<InFlow> inFlow) {
+  ConcreteValueState(Set<InFlow> inFlow) {
     this.inFlow = inFlow;
   }
 
-  public abstract ParameterState clearInFlow();
+  public abstract ValueState clearInFlow();
 
   void internalClearInFlow() {
     inFlow = Collections.emptySet();
@@ -57,7 +57,7 @@
     return false;
   }
 
-  public ConcreteArrayTypeParameterState asArrayParameter() {
+  public ConcreteArrayTypeValueState asArrayParameter() {
     return null;
   }
 
@@ -65,7 +65,7 @@
     return false;
   }
 
-  public ConcreteClassTypeParameterState asClassParameter() {
+  public ConcreteClassTypeValueState asClassParameter() {
     return null;
   }
 
@@ -77,7 +77,7 @@
     return false;
   }
 
-  public ConcretePrimitiveTypeParameterState asPrimitiveParameter() {
+  public ConcretePrimitiveTypeValueState asPrimitiveParameter() {
     return null;
   }
 
@@ -85,7 +85,7 @@
     return false;
   }
 
-  public ConcreteReceiverParameterState asReceiverParameter() {
+  public ConcreteReceiverValueState asReceiverParameter() {
     return null;
   }
 
@@ -93,7 +93,7 @@
     return false;
   }
 
-  public ConcreteReferenceTypeParameterState asReferenceParameter() {
+  public ConcreteReferenceTypeValueState asReferenceParameter() {
     return null;
   }
 
@@ -103,14 +103,14 @@
   }
 
   @Override
-  public ConcreteParameterState asConcrete() {
+  public ConcreteValueState asConcrete() {
     return this;
   }
 
   @Override
-  public final ParameterState mutableJoin(
+  public final ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ParameterState parameterState,
+      ValueState parameterState,
       DexType parameterType,
       StateCloner cloner,
       Action onChangedAction) {
@@ -120,7 +120,7 @@
     if (parameterState.isUnknown()) {
       return parameterState;
     }
-    ConcreteParameterState concreteParameterState = parameterState.asConcrete();
+    ConcreteValueState concreteParameterState = parameterState.asConcrete();
     if (isReferenceParameter()) {
       assert concreteParameterState.isReferenceParameter();
       return asReferenceParameter()
@@ -136,7 +136,7 @@
   }
 
   @Override
-  public final ParameterState mutableJoin(
+  public final ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteFieldState fieldState,
       DexType parameterType,
@@ -150,7 +150,7 @@
         .mutableJoin(appView, fieldState.asPrimitive(), parameterType, onChangedAction);
   }
 
-  boolean mutableJoinInFlow(ConcreteParameterState parameterState) {
+  boolean mutableJoinInFlow(ConcreteValueState parameterState) {
     return mutableJoinInFlow(parameterState.getInFlow());
   }
 
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/NonEmptyParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/NonEmptyValueState.java
similarity index 73%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/NonEmptyParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/NonEmptyValueState.java
index 68e0842..4d03f35 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/NonEmptyParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/NonEmptyValueState.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.optimize.argumentpropagation.codescanner;
 
-public abstract class NonEmptyParameterState extends ParameterState {
+public abstract class NonEmptyValueState extends ValueState {
 
   @Override
-  public NonEmptyParameterState asNonEmpty() {
+  public NonEmptyValueState asNonEmpty() {
     return this;
   }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/StateCloner.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/StateCloner.java
index 6a2e941..6843b58 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/StateCloner.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/StateCloner.java
@@ -28,7 +28,7 @@
         }
 
         @Override
-        public ParameterState mutableCopy(ParameterState parameterState) {
+        public ValueState mutableCopy(ValueState parameterState) {
           return parameterState.mutableCopy();
         }
       };
@@ -41,7 +41,7 @@
         }
 
         @Override
-        public ParameterState mutableCopy(ParameterState parameterState) {
+        public ValueState mutableCopy(ValueState parameterState) {
           return parameterState;
         }
       };
@@ -56,5 +56,5 @@
 
   public abstract MethodState mutableCopy(MethodState methodState);
 
-  public abstract ParameterState mutableCopy(ParameterState parameterState);
+  public abstract ValueState mutableCopy(ValueState parameterState);
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/UnknownParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/UnknownValueState.java
similarity index 75%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/UnknownParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/UnknownValueState.java
index 794db40..eb59e78 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/UnknownParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/UnknownValueState.java
@@ -11,13 +11,13 @@
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 
-public class UnknownParameterState extends NonEmptyParameterState {
+public class UnknownValueState extends NonEmptyValueState {
 
-  private static final UnknownParameterState INSTANCE = new UnknownParameterState();
+  private static final UnknownValueState INSTANCE = new UnknownValueState();
 
-  private UnknownParameterState() {}
+  private UnknownValueState() {}
 
-  public static UnknownParameterState get() {
+  public static UnknownValueState get() {
     return INSTANCE;
   }
 
@@ -32,14 +32,14 @@
   }
 
   @Override
-  public ParameterState mutableCopy() {
+  public ValueState mutableCopy() {
     return this;
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ParameterState parameterState,
+      ValueState parameterState,
       DexType parameterType,
       StateCloner cloner,
       Action onChangedAction) {
@@ -47,7 +47,7 @@
   }
 
   @Override
-  public ParameterState mutableJoin(
+  public ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteFieldState fieldState,
       DexType parameterType,
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ValueState.java
similarity index 60%
rename from src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ParameterState.java
rename to src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ValueState.java
index 8f452f3..1a6e570 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ValueState.java
@@ -11,26 +11,26 @@
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
 
-public abstract class ParameterState {
+public abstract class ValueState {
 
-  public static BottomParameterState bottomArrayTypeParameter() {
-    return BottomArrayTypeParameterState.get();
+  public static BottomValueState bottomArrayTypeParameter() {
+    return BottomArrayTypeValueState.get();
   }
 
-  public static BottomParameterState bottomClassTypeParameter() {
-    return BottomClassTypeParameterState.get();
+  public static BottomValueState bottomClassTypeParameter() {
+    return BottomClassTypeValueState.get();
   }
 
-  public static BottomParameterState bottomPrimitiveTypeParameter() {
-    return BottomPrimitiveTypeParameterState.get();
+  public static BottomValueState bottomPrimitiveTypeParameter() {
+    return BottomPrimitiveTypeValueState.get();
   }
 
-  public static BottomParameterState bottomReceiverParameter() {
-    return BottomReceiverParameterState.get();
+  public static BottomValueState bottomReceiverParameter() {
+    return BottomReceiverValueState.get();
   }
 
-  public static UnknownParameterState unknown() {
-    return UnknownParameterState.get();
+  public static UnknownValueState unknown() {
+    return UnknownValueState.get();
   }
 
   public abstract AbstractValue getAbstractValue(AppView<AppInfoWithLiveness> appView);
@@ -43,11 +43,11 @@
     return false;
   }
 
-  public ConcreteParameterState asConcrete() {
+  public ConcreteValueState asConcrete() {
     return null;
   }
 
-  public NonEmptyParameterState asNonEmpty() {
+  public NonEmptyValueState asNonEmpty() {
     return null;
   }
 
@@ -55,24 +55,24 @@
     return false;
   }
 
-  public abstract ParameterState mutableCopy();
+  public abstract ValueState mutableCopy();
 
-  public final ParameterState mutableJoin(
+  public final ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ParameterState parameterState,
+      ValueState parameterState,
       DexType parameterType,
       StateCloner cloner) {
     return mutableJoin(appView, parameterState, parameterType, cloner, Action.empty());
   }
 
-  public abstract ParameterState mutableJoin(
+  public abstract ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
-      ParameterState parameterState,
+      ValueState parameterState,
       DexType parameterType,
       StateCloner cloner,
       Action onChangedAction);
 
-  public abstract ParameterState mutableJoin(
+  public abstract ValueState mutableJoin(
       AppView<AppInfoWithLiveness> appView,
       ConcreteFieldState fieldState,
       DexType parameterType,
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/InParameterFlowPropagator.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/InParameterFlowPropagator.java
index deae78e..c76d830 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/InParameterFlowPropagator.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/InParameterFlowPropagator.java
@@ -16,14 +16,14 @@
 import com.android.tools.r8.ir.conversion.IRConverter;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteMethodState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteMonomorphicMethodState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.InFlow;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodParameter;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodStateCollectionByReference;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyParameterState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.NonEmptyValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.StateCloner;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ValueState;
 import com.android.tools.r8.optimize.argumentpropagation.utils.BidirectedGraph;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.Action;
@@ -105,13 +105,13 @@
 
   private void propagate(
       ParameterNode parameterNode, Consumer<ParameterNode> affectedNodeConsumer) {
-    ParameterState parameterState = parameterNode.getState();
+    ValueState parameterState = parameterNode.getState();
     if (parameterState.isBottom()) {
       return;
     }
     List<ParameterNode> newlyUnknownParameterNodes = new ArrayList<>();
     for (ParameterNode successorNode : parameterNode.getSuccessors()) {
-      ParameterState newParameterState =
+      ValueState newParameterState =
           successorNode.addState(
               appView,
               parameterState.asNonEmpty(),
@@ -184,9 +184,9 @@
 
       // Add nodes for the parameters for which we have non-trivial information.
       ConcreteMonomorphicMethodState monomorphicMethodState = methodState.asMonomorphic();
-      List<ParameterState> parameterStates = monomorphicMethodState.getParameterStates();
+      List<ValueState> parameterStates = monomorphicMethodState.getParameterStates();
       for (int parameterIndex = 0; parameterIndex < parameterStates.size(); parameterIndex++) {
-        ParameterState parameterState = parameterStates.get(parameterIndex);
+        ValueState parameterState = parameterStates.get(parameterIndex);
         add(method, parameterIndex, monomorphicMethodState, parameterState);
       }
     }
@@ -195,14 +195,14 @@
         ProgramMethod method,
         int parameterIndex,
         ConcreteMonomorphicMethodState methodState,
-        ParameterState parameterState) {
+        ValueState parameterState) {
       // No need to create nodes for parameters with no in-parameters and parameters we don't know
       // anything about.
       if (parameterState.isBottom() || parameterState.isUnknown()) {
         return;
       }
 
-      ConcreteParameterState concreteParameterState = parameterState.asConcrete();
+      ConcreteValueState concreteParameterState = parameterState.asConcrete();
 
       // No need to create a node for a parameter that doesn't depend on any other parameters
       // (unless some other parameter depends on this parameter).
@@ -247,7 +247,7 @@
       if (enclosingMethodState.isUnknown()) {
         // The parameter depends on another parameter for which we don't know anything.
         node.clearPredecessors();
-        node.setState(ParameterState.unknown());
+        node.setState(ValueState.unknown());
         return TraversalContinuation.doBreak();
       }
 
@@ -326,7 +326,7 @@
       return predecessors;
     }
 
-    ParameterState getState() {
+    ValueState getState() {
       return methodState.getParameterState(parameterIndex);
     }
 
@@ -342,12 +342,12 @@
       return pending;
     }
 
-    ParameterState addState(
+    ValueState addState(
         AppView<AppInfoWithLiveness> appView,
-        NonEmptyParameterState parameterStateToAdd,
+        NonEmptyValueState parameterStateToAdd,
         Action onChangedAction) {
-      ParameterState oldParameterState = getState();
-      ParameterState newParameterState =
+      ValueState oldParameterState = getState();
+      ValueState newParameterState =
           oldParameterState.mutableJoin(
               appView,
               parameterStateToAdd,
@@ -366,7 +366,7 @@
       pending = true;
     }
 
-    void setState(ParameterState parameterState) {
+    void setState(ValueState parameterState) {
       methodState.setParameterState(parameterIndex, parameterState);
     }
 
diff --git a/src/main/java/com/android/tools/r8/optimize/compose/ArgumentPropagatorComposeModeling.java b/src/main/java/com/android/tools/r8/optimize/compose/ArgumentPropagatorComposeModeling.java
index 6ffeb6d..2a54b56 100644
--- a/src/main/java/com/android/tools/r8/optimize/compose/ArgumentPropagatorComposeModeling.java
+++ b/src/main/java/com/android/tools/r8/optimize/compose/ArgumentPropagatorComposeModeling.java
@@ -16,8 +16,8 @@
 import com.android.tools.r8.ir.code.InvokeStatic;
 import com.android.tools.r8.ir.code.Or;
 import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcretePrimitiveTypeParameterState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcretePrimitiveTypeValueState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ValueState;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.BitUtils;
 import com.android.tools.r8.utils.BooleanUtils;
@@ -84,7 +84,7 @@
    *   }
    * </pre>
    */
-  public ParameterState modelParameterStateForChangedOrDefaultArgumentToComposableFunction(
+  public ValueState modelParameterStateForChangedOrDefaultArgumentToComposableFunction(
       InvokeMethod invoke,
       ProgramMethod singleTarget,
       int argumentIndex,
@@ -148,7 +148,7 @@
     assert argument.getType().isInt();
 
     DexString expectedFieldName;
-    ParameterState state = ParameterState.bottomPrimitiveTypeParameter();
+    ValueState state = ValueState.bottomPrimitiveTypeParameter();
     if (!hasDefaultParameter || argumentIndex == invokedMethod.getArity() - 2) {
       // We are looking at an argument to the $$changed parameter of the @Composable function.
       // We generally expect this argument to be defined by a call to updateChangedFlags().
@@ -176,7 +176,7 @@
         // Update the model from bottom to a special value that effectively throws away any known
         // information about the lowermost bit of $$changed.
         state =
-            new ConcretePrimitiveTypeParameterState(
+            new ConcretePrimitiveTypeValueState(
                 appView
                     .abstractValueFactory()
                     .createDefiniteBitsNumberValue(
diff --git a/src/main/java/com/android/tools/r8/optimize/compose/ComposeMethodProcessor.java b/src/main/java/com/android/tools/r8/optimize/compose/ComposeMethodProcessor.java
index 319d053..9a57173 100644
--- a/src/main/java/com/android/tools/r8/optimize/compose/ComposeMethodProcessor.java
+++ b/src/main/java/com/android/tools/r8/optimize/compose/ComposeMethodProcessor.java
@@ -21,9 +21,9 @@
 import com.android.tools.r8.optimize.argumentpropagation.ArgumentPropagatorCodeScanner;
 import com.android.tools.r8.optimize.argumentpropagation.ArgumentPropagatorOptimizationInfoPopulator;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteMonomorphicMethodState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ConcreteValueState;
 import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodState;
-import com.android.tools.r8.optimize.argumentpropagation.codescanner.ParameterState;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.ValueState;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.LazyBox;
 import com.android.tools.r8.utils.Timing;
@@ -105,10 +105,10 @@
       ConcreteMonomorphicMethodState monomorphicMethodState = methodState.asMonomorphic();
       for (int i = 0; i < monomorphicMethodState.size(); i++) {
         if (monomorphicMethodState.getParameterState(i).isConcrete()) {
-          ConcreteParameterState concreteParameterState =
+          ConcreteValueState concreteParameterState =
               monomorphicMethodState.getParameterState(i).asConcrete();
           if (concreteParameterState.hasInFlow()) {
-            monomorphicMethodState.setParameterState(i, ParameterState.unknown());
+            monomorphicMethodState.setParameterState(i, ValueState.unknown());
           }
         }
       }
