diff --git a/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java b/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java
index 542c1ab..ead08b8 100644
--- a/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java
+++ b/src/main/java/com/android/tools/r8/features/FeatureSplitBoundaryOptimizationUtils.java
@@ -7,7 +7,7 @@
 import com.android.tools.r8.FeatureSplit;
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClassAndMember;
+import com.android.tools.r8.graph.DexEncodedMember;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.ProgramDefinition;
 import com.android.tools.r8.graph.ProgramMethod;
@@ -21,7 +21,7 @@
 
   public static ConstraintWithTarget getInliningConstraintForResolvedMember(
       ProgramMethod method,
-      DexClassAndMember<?, ?> resolvedMember,
+      DexEncodedMember<?, ?> resolvedMember,
       AppView<? extends AppInfoWithClassHierarchy> appView) {
     ClassToFeatureSplitMap classToFeatureSplitMap = appView.appInfo().getClassToFeatureSplitMap();
     // We never inline into the base from a feature (calls should never happen) and we never inline
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index 77398b6..e730dee 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -850,27 +850,40 @@
 
   @SuppressWarnings("ReferenceEquality")
   public ConstraintWithTarget computeInliningConstraint(
+      ProgramMethod method,
       AppView<AppInfoWithLiveness> appView,
       GraphLens graphLens,
       ProgramMethod context) {
     InliningConstraints inliningConstraints = new InliningConstraints(appView, graphLens);
     if (appView.options().isInterfaceMethodDesugaringEnabled()) {
       // TODO(b/120130831): Conservatively need to say "no" at this point if there are invocations
-      //  to static interface methods. This should be fixed by making sure that the desugared
-      //  versions of default and static interface methods are present in the application during
-      //  IR processing.
+      // to static interface methods. This should be fixed by making sure that the desugared
+      // versions of default and static interface methods are present in the application during
+      // IR processing.
       inliningConstraints.disallowStaticInterfaceMethodCalls();
     }
-    ConstraintWithTarget constraint = ConstraintWithTarget.ALWAYS;
-    assert inliningConstraints.forMonitor().isAlways();
+    // Model a synchronized method as having a monitor instruction.
+    ConstraintWithTarget constraint =
+        method.getDefinition().isSynchronized()
+            ? inliningConstraints.forMonitor()
+            : ConstraintWithTarget.ALWAYS;
+
+    if (constraint == ConstraintWithTarget.NEVER) {
+      return constraint;
+    }
     for (CfInstruction insn : instructions) {
       constraint =
           ConstraintWithTarget.meet(
               constraint, insn.inliningConstraint(inliningConstraints, this, context), appView);
-      if (constraint.isNever()) {
+      if (constraint == ConstraintWithTarget.NEVER) {
         return constraint;
       }
     }
+    if (!tryCatchRanges.isEmpty()) {
+      // Model a try-catch as a move-exception instruction.
+      constraint =
+          ConstraintWithTarget.meet(constraint, inliningConstraints.forMoveException(), appView);
+    }
     return constraint;
   }
 
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoIllegalInlining.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoIllegalInlining.java
index 872bf09..361fdeb 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoIllegalInlining.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoIllegalInlining.java
@@ -42,8 +42,8 @@
     if (code.isCfCode()) {
       CfCode cfCode = code.asCfCode();
       ConstraintWithTarget constraint =
-          cfCode.computeInliningConstraint(appView, appView.graphLens(), method);
-      return constraint.isNever();
+          cfCode.computeInliningConstraint(method, appView, appView.graphLens(), method);
+      return constraint == ConstraintWithTarget.NEVER;
     } else if (code.isDefaultInstanceInitializerCode()) {
       return false;
     } else {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
index 603bcc6..3117467 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
@@ -184,11 +184,13 @@
 
     // Don't inline code with references beyond root main dex classes into a root main dex class.
     // If we do this it can increase the size of the main dex dependent classes.
-    if (mainDexInfo.disallowInliningIntoContext(appView, method, singleTarget)) {
+    if (mainDexInfo.disallowInliningIntoContext(
+        appView, method, singleTarget, appView.getSyntheticItems())) {
       whyAreYouNotInliningReporter.reportInlineeRefersToClassesNotInMainDex();
       return false;
     }
-    assert !mainDexInfo.disallowInliningIntoContext(appView, method, singleTarget);
+    assert !mainDexInfo.disallowInliningIntoContext(
+        appView, method, singleTarget, appView.getSyntheticItems());
     return true;
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 9f25637..fd3ec8c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -131,7 +131,7 @@
   private ConstraintWithTarget instructionAllowedForInlining(
       Instruction instruction, InliningConstraints inliningConstraints, ProgramMethod context) {
     ConstraintWithTarget result = instruction.inliningConstraint(inliningConstraints, context);
-    if (result.isNever() && instruction.isDebugInstruction()) {
+    if (result == ConstraintWithTarget.NEVER && instruction.isDebugInstruction()) {
       return ConstraintWithTarget.ALWAYS;
     }
     return result;
@@ -155,7 +155,7 @@
     for (Instruction instruction : code.instructions()) {
       ConstraintWithTarget state =
           instructionAllowedForInlining(instruction, inliningConstraints, context);
-      if (state.isNever()) {
+      if (state == ConstraintWithTarget.NEVER) {
         result = state;
         break;
       }
@@ -232,10 +232,6 @@
       return otherConstraint;
     }
 
-    public boolean isAlways() {
-      return this == ALWAYS;
-    }
-
     public boolean isNever() {
       return this == NEVER;
     }
@@ -283,10 +279,6 @@
       this.targetHolder = targetHolder;
     }
 
-    public boolean isAlways() {
-      return constraint.isAlways();
-    }
-
     public boolean isNever() {
       return constraint.isNever();
     }
@@ -366,7 +358,7 @@
         return meet(other, one, appView);
       }
       // From now on, one.constraint.ordinal() <= other.constraint.ordinal()
-      if (one.isNever()) {
+      if (one == NEVER) {
         return NEVER;
       }
       if (other == ALWAYS) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
index aa03ea2..8d5d425 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
@@ -9,16 +9,15 @@
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexClassAndMember;
 import com.android.tools.r8.graph.DexClassAndMethod;
+import com.android.tools.r8.graph.DexEncodedMember;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.FieldResolutionResult.SingleFieldResolutionResult;
+import com.android.tools.r8.graph.FieldResolutionResult;
 import com.android.tools.r8.graph.MethodResolutionResult;
-import com.android.tools.r8.graph.MethodResolutionResult.SingleResolutionResult;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.lens.GraphLens;
 import com.android.tools.r8.ir.code.InvokeType;
@@ -182,7 +181,8 @@
         singleTargetWhileVerticalClassMerging(
             resolutionResult, context, MethodResolutionResult::lookupInvokeDirectTarget);
     if (target != null) {
-      return forResolvedMember(resolutionResult.getInitialResolutionHolder(), context, target);
+      return forResolvedMember(
+          resolutionResult.getInitialResolutionHolder(), context, target.getDefinition());
     }
     return ConstraintWithTarget.NEVER;
   }
@@ -224,7 +224,8 @@
       }
     }
     if (target != null) {
-      return forResolvedMember(resolutionResult.getInitialResolutionHolder(), context, target);
+      return forResolvedMember(
+          resolutionResult.getInitialResolutionHolder(), context, target.getDefinition());
     }
     return ConstraintWithTarget.NEVER;
   }
@@ -359,15 +360,14 @@
 
   private ConstraintWithTarget forFieldInstruction(DexField field, ProgramMethod context) {
     DexField lookup = graphLens.lookupField(field);
-    SingleFieldResolutionResult<?> fieldResolutionResult =
-        appView.appInfo().resolveField(lookup).asSingleFieldResolutionResult();
-    if (fieldResolutionResult == null) {
+    FieldResolutionResult fieldResolutionResult = appView.appInfo().resolveField(lookup);
+    if (fieldResolutionResult.isMultiFieldResolutionResult()) {
       return ConstraintWithTarget.NEVER;
     }
     return forResolvedMember(
         fieldResolutionResult.getInitialResolutionHolder(),
         context,
-        fieldResolutionResult.getResolutionPair());
+        fieldResolutionResult.getResolvedField());
   }
 
   private ConstraintWithTarget forVirtualInvoke(
@@ -378,22 +378,21 @@
 
     // Perform resolution and derive inlining constraints based on the accessibility of the
     // resolution result.
-    SingleResolutionResult<?> resolutionResult =
-        appView.appInfo().resolveMethodLegacy(method, isInterface).asSingleResolution();
-    if (resolutionResult == null || !resolutionResult.isVirtualTarget()) {
+    MethodResolutionResult resolutionResult =
+        appView.appInfo().resolveMethodLegacy(method, isInterface);
+    if (!resolutionResult.isVirtualTarget()) {
       return ConstraintWithTarget.NEVER;
     }
+
     return forResolvedMember(
-        resolutionResult.getInitialResolutionHolder(),
-        context,
-        resolutionResult.getResolutionPair());
+        resolutionResult.getInitialResolutionHolder(), context, resolutionResult.getSingleTarget());
   }
 
   @SuppressWarnings("ReferenceEquality")
   private ConstraintWithTarget forResolvedMember(
       DexClass initialResolutionHolder,
       ProgramMethod context,
-      DexClassAndMember<?, ?> resolvedMember) {
+      DexEncodedMember<?, ?> resolvedMember) {
     if (resolvedMember == null) {
       // This will fail at runtime.
       return ConstraintWithTarget.NEVER;
@@ -402,11 +401,11 @@
         FeatureSplitBoundaryOptimizationUtils.getInliningConstraintForResolvedMember(
             context, resolvedMember, appView);
     assert featureSplitInliningConstraint == ConstraintWithTarget.ALWAYS
-        || featureSplitInliningConstraint.isNever();
-    if (featureSplitInliningConstraint.isNever()) {
+        || featureSplitInliningConstraint == ConstraintWithTarget.NEVER;
+    if (featureSplitInliningConstraint == ConstraintWithTarget.NEVER) {
       return featureSplitInliningConstraint;
     }
-    DexType resolvedHolder = resolvedMember.getHolderType();
+    DexType resolvedHolder = graphLens.lookupType(resolvedMember.getHolderType());
     assert initialResolutionHolder != null;
     ConstraintWithTarget memberConstraintWithTarget =
         ConstraintWithTarget.deriveConstraint(
@@ -414,10 +413,7 @@
     // We also have to take the constraint of the initial resolution holder into account.
     ConstraintWithTarget classConstraintWithTarget =
         ConstraintWithTarget.deriveConstraint(
-            context,
-            initialResolutionHolder.getType(),
-            initialResolutionHolder.getAccessFlags(),
-            appView);
+            context, initialResolutionHolder.type, initialResolutionHolder.accessFlags, appView);
     return ConstraintWithTarget.meet(
         classConstraintWithTarget, memberConstraintWithTarget, appView);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java
index 7ed32343..360d241 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java
@@ -191,7 +191,7 @@
     // Make sure the target (base) type is visible.
     ConstraintWithTarget constraints =
         ConstraintWithTarget.classIsVisible(context, baseType, appView);
-    if (constraints.isNever()) {
+    if (constraints == ConstraintWithTarget.NEVER) {
       return;
     }
 
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
index b608f37..388638c 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
@@ -462,7 +462,8 @@
             context, holderType, method.getAccessFlags(), appView);
     // We may need bridge for visibility if the target class is not visible while the target method
     // is visible from the calling context.
-    return classVisibility.isNever() && !methodVisibility.isNever();
+    return classVisibility == ConstraintWithTarget.NEVER
+        && methodVisibility != ConstraintWithTarget.NEVER;
   }
 
   private DexMethod insertBridgeForVisibilityIfNeeded(
diff --git a/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java b/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java
index aa6c1f1..4a5ffd6 100644
--- a/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java
@@ -202,11 +202,11 @@
   public boolean disallowInliningIntoContext(
       AppView<? extends AppInfoWithClassHierarchy> appView,
       ProgramDefinition context,
-      ProgramMethod method) {
+      ProgramMethod method,
+      SyntheticItems synthetics) {
     if (context.getContextType() == method.getContextType()) {
       return false;
     }
-    SyntheticItems synthetics = appView.getSyntheticItems();
     MainDexGroup mainDexGroupInternal = getMainDexGroupInternal(context, synthetics);
     if (mainDexGroupInternal == MainDexGroup.NOT_IN_MAIN_DEX
         || mainDexGroupInternal == MainDexGroup.MAIN_DEX_DEPENDENCY) {
diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMerger.java
index a9132b3..0ffde6c 100644
--- a/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMerger.java
@@ -823,13 +823,16 @@
         SingleTypeMapperGraphLens lens =
             new SingleTypeMapperGraphLens(
                 appView, lensBuilder, mergedClasses, method.getHolder(), context);
-        ConstraintWithTarget constraint = cfCode.computeInliningConstraint(appView, lens, method);
+        ConstraintWithTarget constraint =
+            cfCode.computeInliningConstraint(
+                method, appView, lens, context.programInstanceInitializers().iterator().next());
         if (constraint.isNever()) {
           return true;
         }
         // Constructors can have references beyond the root main dex classes. This can increase the
         // size of the main dex dependent classes and we should bail out.
-        if (mainDexInfo.disallowInliningIntoContext(appView, context, method)) {
+        if (mainDexInfo.disallowInliningIntoContext(
+            appView, context, method, appView.getSyntheticItems())) {
           return true;
         }
         return false;
