diff --git a/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java b/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java
index 6290e20..27a7ed6 100644
--- a/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java
+++ b/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java
@@ -7,17 +7,37 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.code.IfNez;
-import com.android.tools.r8.graph.DexCode;
-import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.jasmin.JasminBuilder.ClassFileVersion;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.codeinspector.CfInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import com.google.common.collect.ImmutableList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
+@RunWith(Parameterized.class)
 public class Regress65432240 extends JasminTestBase {
 
+  private Backend backend;
+
+  @Parameterized.Parameters(name = "Backend: {0}")
+  public static Collection<Backend> data() {
+    return Arrays.asList(Backend.values());
+  }
+
+  public Regress65432240(Backend backend) {
+    this.backend = backend;
+  }
+
   @Test
   public void testConstantNotIntoEntryBlock() throws Exception {
     JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
@@ -58,13 +78,37 @@
     String expected = runOnJava(builder, clazz.name);
 
     AndroidApp originalApplication = builder.build();
-    AndroidApp processedApplication = ToolHelper.runR8(originalApplication);
+    AndroidApp processedApplication =
+        ToolHelper.runR8(
+            ToolHelper.prepareR8CommandBuilder(originalApplication, emptyConsumer(backend))
+                .addLibraryFiles(runtimeJar(backend))
+                .build());
 
-    DexEncodedMethod method = getMethod(processedApplication, clazz.name, signature);
-    DexCode code = method.getCode().asDexCode();
-    assertTrue(code.instructions[0] instanceof IfNez);
+    CodeInspector inspector =
+        new CodeInspector(processedApplication, o -> o.enableCfFrontend = true);
+    ClassSubject inspectedClass = inspector.clazz(clazz.name);
+    MethodSubject method = inspectedClass.method(signature);
+    assertTrue(method.isPresent());
+    Iterator<InstructionSubject> iterator = method.iterateInstructions();
+    InstructionSubject instruction = null;
+    boolean found = false;
+    while (iterator.hasNext()) {
+      instruction = iterator.next();
+      if (!(instruction instanceof CfInstructionSubject)
+          || !((CfInstructionSubject) instruction).isLoad()) {
+        found = true;
+        break;
+      }
+    }
+    assertTrue(found && instruction.isIfNez());
 
-    String artResult = runOnArtR8(builder, clazz.name);
-    assertEquals(expected, artResult);
+    String result;
+    if (backend == Backend.DEX) {
+      result = runOnArt(processedApplication, clazz.name);
+    } else {
+      assert backend == Backend.CF;
+      result = runOnJava(processedApplication, clazz.name, Collections.emptyList());
+    }
+    assertEquals(expected, result);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
index 6aa54df..f639e87 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.cf.code.CfInvoke;
 import com.android.tools.r8.cf.code.CfInvokeDynamic;
 import com.android.tools.r8.cf.code.CfLabel;
+import com.android.tools.r8.cf.code.CfLoad;
 import com.android.tools.r8.cf.code.CfNew;
 import com.android.tools.r8.cf.code.CfNop;
 import com.android.tools.r8.cf.code.CfPosition;
@@ -155,4 +156,8 @@
   public boolean isIfNull() {
     return instruction instanceof CfIf && ((CfIf) instruction).getOpcode() == Opcodes.IFNULL;
   }
+
+  public boolean isLoad() {
+    return instruction instanceof CfLoad;
+  }
 }
