diff --git a/src/main/java/com/android/tools/r8/dex/Marker.java b/src/main/java/com/android/tools/r8/dex/Marker.java
index b4852a3..c915fe7 100644
--- a/src/main/java/com/android/tools/r8/dex/Marker.java
+++ b/src/main/java/com/android/tools/r8/dex/Marker.java
@@ -27,6 +27,7 @@
   public static final String SHA1 = "sha-1";
   public static final String COMPILATION_MODE = "compilation-mode";
   public static final String HAS_CHECKSUMS = "has-checksums";
+  public static final String BACKEND = "backend";
   public static final String PG_MAP_ID = "pg-map-id";
   public static final String R8_MODE = "r8-mode";
   private static final String NO_LIBRARY_DESUGARING = "<no-library-desugaring>";
@@ -42,6 +43,11 @@
     }
   }
 
+  public enum Backend {
+    CF,
+    DEX
+  }
+
   private static final char PREFIX_CHAR = '~';
   private static final String PREFIX = "~~";
   private static final String D8_PREFIX = PREFIX + Tool.D8 + "{";
@@ -198,6 +204,24 @@
     return this;
   }
 
+  public boolean hasBackend() {
+    return jsonObject.has(BACKEND);
+  }
+
+  public String getBackend() {
+    if (!hasBackend()) {
+      // Before adding backend we would always compile to dex if min-api was specified.
+      return hasMinApi() ? "dex" : "cf";
+    }
+    return jsonObject.get(BACKEND).getAsString();
+  }
+
+  public Marker setBackend(Backend backend) {
+    assert !hasBackend();
+    jsonObject.addProperty(BACKEND, backend.name().toLowerCase());
+    return this;
+  }
+
   public boolean getHasChecksums() {
     return jsonObject.get(HAS_CHECKSUMS).getAsBoolean();
   }
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 52ed8b2..90d5bda 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.Version;
 import com.android.tools.r8.dex.Marker;
+import com.android.tools.r8.dex.Marker.Backend;
 import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.errors.IncompleteNestNestDesugarDiagnosic;
@@ -348,6 +349,7 @@
         new Marker(tool)
             .setVersion(Version.LABEL)
             .setCompilationMode(debug ? CompilationMode.DEBUG : CompilationMode.RELEASE)
+            .setBackend(isGeneratingClassFiles() ? Backend.CF : Backend.DEX)
             .setHasChecksums(encodeChecksums);
     // Compiling with D8 and L8 is always with a min API level and desugaring to that level. If
     // desugaring is explicitly turned off for D8 the input is expected to already have been
diff --git a/src/test/java/com/android/tools/r8/ExtractMarkerTest.java b/src/test/java/com/android/tools/r8/ExtractMarkerTest.java
index 008ff1f..7cbcf63 100644
--- a/src/test/java/com/android/tools/r8/ExtractMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/ExtractMarkerTest.java
@@ -9,6 +9,8 @@
 
 import com.android.tools.r8.dex.Marker;
 import com.android.tools.r8.dex.Marker.Tool;
+import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.utils.BooleanUtils;
 import java.nio.file.Paths;
 import java.util.Collection;
@@ -120,4 +122,24 @@
             .build());
     assertTrue(testExecuted[0]);
   }
+
+  @Test
+  public void backendValueCompatibilityTestForMinApi() {
+    DexItemFactory factory = new DexItemFactory();
+    DexString markerString =
+        factory.createString(
+            "~~D8{\"compilation-mode\":\"debug\",\"has-checksums\":false,"
+                + "\"min-api\":21,\"sha-1\":\"engineering\",\"version\":\"master\" }");
+    assertEquals("dex", Marker.parse(markerString).getBackend());
+  }
+
+  @Test
+  public void backendValueCompatibilityTestForR8Cf() {
+    DexItemFactory factory = new DexItemFactory();
+    DexString markerString =
+        factory.createString(
+            "~~R8{\"compilation-mode\":\"release\",\"has-checksums\":true,"
+                + "\"sha-1\":\"engineering\",\"version\":\"master\" }");
+    assertEquals("cf", Marker.parse(markerString).getBackend());
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/MarkerMatcher.java b/src/test/java/com/android/tools/r8/MarkerMatcher.java
index ea6ea4a..d766770 100644
--- a/src/test/java/com/android/tools/r8/MarkerMatcher.java
+++ b/src/test/java/com/android/tools/r8/MarkerMatcher.java
@@ -7,6 +7,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
+import com.android.tools.r8.TestBase.Backend;
 import com.android.tools.r8.dex.Marker;
 import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.utils.AndroidApiLevel;
@@ -108,6 +109,20 @@
     };
   }
 
+  public static Matcher<Marker> markerBackend(Backend backend) {
+    return new MarkerMatcher() {
+      @Override
+      protected boolean eval(Marker marker) {
+        return marker.getBackend().equals(backend.name().toLowerCase());
+      }
+
+      @Override
+      protected void explain(Description description) {
+        description.appendText(Marker.BACKEND + " ").appendText(backend.name().toLowerCase());
+      }
+    };
+  }
+
   public static Matcher<Marker> markerIsDesugared() {
     return new MarkerMatcher() {
       @Override
diff --git a/src/test/java/com/android/tools/r8/MarkersTest.java b/src/test/java/com/android/tools/r8/MarkersTest.java
index 650cf39..1fdc6ae 100644
--- a/src/test/java/com/android/tools/r8/MarkersTest.java
+++ b/src/test/java/com/android/tools/r8/MarkersTest.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8;
 
 import static com.android.tools.r8.MarkerMatcher.assertMarkersMatch;
+import static com.android.tools.r8.MarkerMatcher.markerBackend;
 import static com.android.tools.r8.MarkerMatcher.markerCompilationMode;
 import static com.android.tools.r8.MarkerMatcher.markerDesugaredLibraryIdentifier;
 import static com.android.tools.r8.MarkerMatcher.markerHasChecksums;
@@ -118,6 +119,7 @@
         allOf(
             markerTool(Tool.D8),
             markerCompilationMode(compilationMode),
+            markerBackend(Backend.DEX),
             markerIsDesugared(),
             markerMinApi(apiLevel),
             not(markerHasDesugaredLibraryIdentifier()));
@@ -144,6 +146,7 @@
         allOf(
             markerTool(Tool.D8),
             markerCompilationMode(compilationMode),
+            markerBackend(Backend.CF),
             markerIsDesugared(),
             markerMinApi(apiLevel),
             not(markerHasDesugaredLibraryIdentifier()));
@@ -171,6 +174,7 @@
         allOf(
             markerTool(Tool.R8),
             markerCompilationMode(compilationMode),
+            markerBackend(Backend.DEX),
             markerIsDesugared(),
             markerMinApi(apiLevel),
             not(markerHasDesugaredLibraryIdentifier()));
@@ -196,6 +200,7 @@
         allOf(
             markerTool(Tool.R8),
             markerCompilationMode(compilationMode),
+            markerBackend(Backend.CF),
             not(markerIsDesugared()),
             not(markerHasMinApi()),
             not(markerHasDesugaredLibraryIdentifier()));
@@ -242,6 +247,7 @@
         allOf(
             markerTool(Tool.R8),
             markerCompilationMode(compilationMode),
+            markerBackend(Backend.CF),
             not(markerIsDesugared()),
             not(markerHasMinApi()),
             not(markerHasDesugaredLibraryIdentifier())));
