diff --git a/src/main/java/com/android/tools/r8/R8CommandParser.java b/src/main/java/com/android/tools/r8/R8CommandParser.java
index 6984283..fd4f570 100644
--- a/src/main/java/com/android/tools/r8/R8CommandParser.java
+++ b/src/main/java/com/android/tools/r8/R8CommandParser.java
@@ -54,9 +54,8 @@
               " and options are:",
               "  --release                # Compile without debugging information (default).",
               "  --debug                  # Compile with debugging information.",
-              // TODO(b/65390962): Add help for output-mode flags once the CF backend is complete.
-              // "  --dex                    # Compile program to DEX file format (default).",
-              // "  --classfile              # Compile program to Java classfile format.",
+              "  --dex                    # Compile program to DEX file format (default).",
+              "  --classfile              # Compile program to Java classfile format.",
               "  --output <file>          # Output result in <file>.",
               "                           # <file> must be an existing directory or a zip file.",
               "  --lib <file>             # Add <file> as a library resource.",
diff --git a/src/test/java/com/android/tools/r8/R8EntryPointTests.java b/src/test/java/com/android/tools/r8/R8EntryPointTests.java
index edf7f20..0bbc7bc 100644
--- a/src/test/java/com/android/tools/r8/R8EntryPointTests.java
+++ b/src/test/java/com/android/tools/r8/R8EntryPointTests.java
@@ -4,6 +4,9 @@
 
 package com.android.tools.r8;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.StringContains.containsString;
+
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.utils.FileUtils;
 import com.google.common.collect.ImmutableList;
@@ -131,6 +134,66 @@
     Assert.assertTrue(Files.isRegularFile(testFlags.getParent().resolve(SEEDS)));
   }
 
+  @Test
+  public void testSpecifyClassfile() throws IOException, InterruptedException {
+    Path out = temp.newFile("classfile.zip").toPath();
+    ProcessResult r8 =
+        ToolHelper.forkR8(
+            Paths.get("."),
+            "--lib",
+            ToolHelper.getJava8RuntimeJar().toString(),
+            "--classfile",
+            "--output",
+            out.toString(),
+            "--pg-conf",
+            PROGUARD_FLAGS.toString(),
+            "--pg-conf",
+            testFlags.toString(),
+            INPUT_JAR.toString());
+    Assert.assertEquals(0, r8.exitCode);
+  }
+
+  @Test
+  public void testSpecifyDex() throws IOException, InterruptedException {
+    Path out = temp.newFile("dex.zip").toPath();
+    ProcessResult r8 =
+        ToolHelper.forkR8(
+            Paths.get("."),
+            "--lib",
+            ToolHelper.getDefaultAndroidJar().toString(),
+            "--dex",
+            "--output",
+            out.toString(),
+            "--pg-conf",
+            PROGUARD_FLAGS.toString(),
+            "--pg-conf",
+            testFlags.toString(),
+            INPUT_JAR.toString());
+    Assert.assertEquals(0, r8.exitCode);
+  }
+
+  @Test
+  public void testSpecifyDexAndClassfileNotAllowed() throws IOException, InterruptedException {
+    Path out = temp.newFile("dex.zip").toPath();
+    ProcessResult r8 =
+        ToolHelper.forkR8(
+            Paths.get("."),
+            "--lib",
+            ToolHelper.getDefaultAndroidJar().toString(),
+            "--dex",
+            "--classfile",
+            "--output",
+            out.toString(),
+            "--pg-conf",
+            PROGUARD_FLAGS.toString(),
+            "--pg-conf",
+            testFlags.toString(),
+            INPUT_JAR.toString());
+    Assert.assertEquals(1, r8.exitCode);
+    assertThat(
+        r8.stderr, containsString("Cannot compile in both --dex and --classfile output mode"));
+  }
+
   private R8Command getCommand(Path out) throws IOException, CompilationFailedException {
     return R8Command.builder()
         .addLibraryFiles(ToolHelper.getDefaultAndroidJar())
