Merge "Revert "Run CF backend on Art tests""
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java
index d8e78e5..4d18b92 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.ir.code;
 
-import com.android.tools.r8.cf.LoadStoreHelper;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.conversion.DexBuilder;
@@ -63,9 +62,4 @@
     // They should also have a non-empty set of debug values (see RegAlloc::computeDebugInfo)
     return false;
   }
-
-  @Override
-  public void insertLoadAndStores(InstructionListIterator it, LoadStoreHelper helper) {
-    // Non-materializing so no stack values are needed.
-  }
 }
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 813166b..32c0175 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -13,7 +13,6 @@
 import com.android.tools.r8.ToolHelper.DexVm.Kind;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.errors.CompilationError;
-import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.shaking.ProguardRuleParserException;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.ArtErrorParser;
@@ -78,8 +77,7 @@
   public enum CompilerUnderTest {
     D8,
     R8,
-    R8_AFTER_D8, // refers to the R8 (default: debug) step but implies a previous D8 step as well
-    D8_AFTER_R8CF
+    R8_AFTER_D8 // refers to the R8 (default: debug) step but implies a previous D8 step as well
   }
 
   private static final String ART_TESTS_DIR = "tests/2017-10-04/art";
@@ -764,7 +762,13 @@
               TestCondition.match(
                   TestCondition.runtimes(DexVm.Version.V4_0_4, DexVm.Version.V4_4_4,
                       DexVm.Version.V5_1_1, DexVm.Version.V6_0_1, DexVm.Version.V7_0_0)))
-          .put("454-get-vreg", TestCondition.match(TestCondition.R8DEX_COMPILER))
+          .put(
+              "454-get-vreg",
+              TestCondition.match(
+                  TestCondition.tools(DexTool.NONE),
+                  TestCondition.D8_COMPILER,
+                  TestCondition.runtimes(DexVm.Version.DEFAULT)))
+          .put("454-get-vreg", TestCondition.match(TestCondition.R8_COMPILER))
           // Fails: regs_jni.cc:42] Check failed: GetVReg(m, 0, kIntVReg, &value)
           // The R8/D8 code does not put values in the same registers as the tests expects.
           .put(
@@ -772,14 +776,20 @@
               TestCondition.match(
                   TestCondition.runtimes(DexVm.Version.V4_0_4, DexVm.Version.V4_4_4,
                       DexVm.Version.V5_1_1, DexVm.Version.V6_0_1, DexVm.Version.V7_0_0)))
-          .put("457-regs", TestCondition.match(TestCondition.R8DEX_COMPILER))
+          .put(
+              "457-regs",
+              TestCondition.match(
+                  TestCondition.tools(DexTool.NONE),
+                  TestCondition.D8_COMPILER,
+                  TestCondition.runtimes(DexVm.Version.DEFAULT)))
+          .put("457-regs", TestCondition.match(TestCondition.R8_COMPILER))
           // Class not found.
           .put("529-checker-unresolved", TestCondition.any())
           // Fails: env_long_ref.cc:44] Check failed: GetVReg(m, 1, kReferenceVReg, &value)
           // The R8/D8 code does not produce values in the same registers as the tests expects in
           // the stack frame for TestCase.testCase checked by the native Main.lookForMyRegisters
           // (v1 vs v0).
-          .put("543-env-long-ref", TestCondition.match(TestCondition.R8DEX_COMPILER))
+          .put("543-env-long-ref", TestCondition.match(TestCondition.R8_COMPILER))
           // Array index out of bounds exception.
           .put("555-UnsafeGetLong-regression", TestCondition.any())
           // Array index out of bounds exception.
@@ -800,9 +810,9 @@
           // Main.testThisWithInstanceCall checked by the native Main.doNativeCallRef (v0 vs. v1 and
           // only 1 register instead fof 2).
           .put("461-get-reference-vreg", TestCondition.match(TestCondition.R8_COMPILER))
-          // This test uses register r1 in method that is declared to only use 1 register (r0).
-          // This is in dex code which D8 does not convert and which R8/CF does not process.
-          // Therefore the error is a verification error at runtime and that is expected.
+          // This test uses register r1 in method that is declared to only use 1 register (r0). This
+          // is in dex code which D8 does not convert. Therefore the error is a verification error
+          // at runtime and that is expected.
           .put("142-classloader2", TestCondition.match(TestCondition.D8_COMPILER))
           // Invoke-custom is supported by D8 and R8, but it can only run on our newest version
           // of art.
@@ -845,9 +855,9 @@
       new ImmutableListMultimap.Builder<String, TestCondition>()
           // Contains two methods with the same name and signature but different code.
           .put("097-duplicate-method", TestCondition.any())
-          // Dex code contains a method (B.<init>) which pass too few arguments to invoke, and it
-          // also contains an iput on a static field.
-          .put("600-verifier-fails", TestCondition.match(TestCondition.R8DEX_COMPILER))
+          // Contains a method (B.<init>) which pass too few arguments to invoke. Also, contains an
+          // iput on a static field.
+          .put("600-verifier-fails", TestCondition.match(TestCondition.R8_COMPILER))
           // Contains a method that falls off the end without a return.
           .put("606-erroneous-class", TestCondition.match(
               TestCondition.tools(DexTool.JACK),
@@ -856,15 +866,11 @@
               TestCondition.tools(DexTool.DX),
               TestCondition.R8_NOT_AFTER_D8_COMPILER,
               LEGACY_RUNTIME))
-          // Dex input contains an illegal InvokeSuper in Z.foo() to Y.foo()
-          // that R8 will fail to compile.
-          .put("594-invoke-super", TestCondition.match(TestCondition.R8DEX_COMPILER))
-          .put("974-verify-interface-super", TestCondition.match(TestCondition.R8DEX_COMPILER))
-          // R8 generates too large code in Goto.bigGoto(). b/74327727
-          .put("003-omnibus-opcodes", TestCondition.match(TestCondition.D8_AFTER_R8CF_COMPILER))
-          // Contains a subset of JUnit which collides with library definitions of JUnit.
-          .put("021-string2", TestCondition.match(TestCondition.D8_AFTER_R8CF_COMPILER))
-          .put("082-inline-execute", TestCondition.match(TestCondition.D8_AFTER_R8CF_COMPILER))
+          // Contains an illegal invoke that R8 will fail to compile.
+          .put("594-invoke-super", TestCondition.match(
+              TestCondition.R8_COMPILER))
+          .put("974-verify-interface-super", TestCondition.match(
+              TestCondition.R8_COMPILER))
           .build();
 
   // Tests that are invalid dex files and on which R8/D8 fails and that is OK.
@@ -876,12 +882,12 @@
           // only one A$B class because of a custom build script that merges them.
           .put("121-modifiers", TestCondition.match(TestCondition.tools(DexTool.NONE)))
           // This test uses register r1 in method that is declared to only use 1 register (r0).
-          .put("142-classloader2", TestCondition.match(TestCondition.R8DEX_COMPILER))
+          .put("142-classloader2", TestCondition.match(TestCondition.R8_COMPILER))
           // This test uses an uninitialized register.
-          .put("471-uninitialized-locals", TestCondition.match(TestCondition.R8DEX_COMPILER))
+          .put("471-uninitialized-locals", TestCondition.match(TestCondition.R8_COMPILER))
           // This test is starting from invalid dex code. It splits up a double value and uses
           // the first register of a double with the second register of another double.
-          .put("800-smali", TestCondition.match(TestCondition.R8DEX_COMPILER))
+          .put("800-smali", TestCondition.match(TestCondition.R8_COMPILER))
           // Contains a loop in the class hierarchy.
           .put("804-class-extends-itself", TestCondition.any())
           // These tests have illegal class flag combinations, so we reject them.
@@ -1304,7 +1310,6 @@
         break;
       case D8:
       case R8_AFTER_D8:
-      case D8_AFTER_R8CF:
         compilationMode = CompilationMode.DEBUG;
         break;
       default:
@@ -1378,97 +1383,6 @@
         CompilationFailedException {
     assert mode != null;
     switch (compilerUnderTest) {
-      case D8_AFTER_R8CF:
-        {
-          assert keepRulesFile == null : "Keep-rules file specified for D8.";
-
-          List<ProgramResource> dexInputs = new ArrayList<>();
-          List<ProgramResource> cfInputs = new ArrayList<>();
-          for (String f : fileNames) {
-            Path p = Paths.get(f);
-            if (FileUtils.isDexFile(p)) {
-              dexInputs.add(ProgramResource.fromFile(ProgramResource.Kind.DEX, p));
-            } else if (FileUtils.isClassFile(p)) {
-              cfInputs.add(ProgramResource.fromFile(ProgramResource.Kind.CF, p));
-            } else {
-              assert FileUtils.isArchive(p);
-              ArchiveProgramResourceProvider provider =
-                  ArchiveProgramResourceProvider.fromArchive(p);
-
-              try {
-                for (ProgramResource pr : provider.getProgramResources()) {
-                  if (pr.getKind() == ProgramResource.Kind.DEX) {
-                    dexInputs.add(pr);
-                  } else {
-                    assert pr.getKind() == ProgramResource.Kind.CF;
-                    cfInputs.add(pr);
-                  }
-                }
-              } catch (ResourceException e) {
-                throw new CompilationException(e);
-              }
-            }
-          }
-
-          D8Command.Builder builder =
-              D8Command.builder()
-                  .setMode(mode)
-                  .addProgramResourceProvider(
-                      new ProgramResourceProvider() {
-                        @Override
-                        public Collection<ProgramResource> getProgramResources()
-                            throws ResourceException {
-                          return dexInputs;
-                        }
-                      })
-                  .setOutput(Paths.get(resultPath), OutputMode.DexIndexed);
-
-          Origin cfOrigin =
-              new Origin(Origin.root()) {
-                @Override
-                public String part() {
-                  return "R8/CF";
-                }
-              };
-
-          R8Command.Builder r8builder =
-              R8Command.builder()
-                  .setMode(mode)
-                  .setProgramConsumer(
-                      new ClassFileConsumer() {
-
-                        @Override
-                        public synchronized void accept(
-                            byte[] data, String descriptor, DiagnosticsHandler handler) {
-                          builder.addClassProgramData(data, cfOrigin);
-                        }
-
-                        @Override
-                        public void finished(DiagnosticsHandler handler) {}
-                      })
-                  .addProgramResourceProvider(
-                      new ProgramResourceProvider() {
-                        @Override
-                        public Collection<ProgramResource> getProgramResources()
-                            throws ResourceException {
-                          return cfInputs;
-                        }
-                      });
-
-          AndroidApiLevel minSdkVersion = needMinSdkVersion.get(name);
-          if (minSdkVersion != null) {
-            builder.setMinApiLevel(minSdkVersion.getLevel());
-            r8builder.setMinApiLevel(minSdkVersion.getLevel());
-            builder.addLibraryFiles(ToolHelper.getAndroidJar(minSdkVersion));
-            r8builder.addLibraryFiles(ToolHelper.getAndroidJar(minSdkVersion));
-          } else {
-            builder.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.getDefault()));
-            r8builder.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.getDefault()));
-          }
-          ToolHelper.runR8(r8builder.build(), options -> options.ignoreMissingClasses = true);
-          D8.run(builder.build());
-          break;
-        }
       case D8: {
         assert keepRulesFile == null : "Keep-rules file specified for D8.";
         D8Command.Builder builder =
diff --git a/src/test/java/com/android/tools/r8/TestCondition.java b/src/test/java/com/android/tools/r8/TestCondition.java
index 1475e3a..309f631 100644
--- a/src/test/java/com/android/tools/r8/TestCondition.java
+++ b/src/test/java/com/android/tools/r8/TestCondition.java
@@ -53,22 +53,14 @@
     }
   }
 
-  public static final CompilerSet D8_COMPILER =
-      compilers(CompilerUnderTest.D8, CompilerUnderTest.D8_AFTER_R8CF);
-  public static final CompilerSet D8_NOT_AFTER_R8CF_COMPILER = compilers(CompilerUnderTest.D8);
-  public static final CompilerSet D8_AFTER_R8CF_COMPILER =
-      compilers(CompilerUnderTest.D8_AFTER_R8CF);
+  public static final CompilerSet D8_COMPILER = compilers(CompilerUnderTest.D8);
   // R8_COMPILER refers to R8 both in the standalone setting and after D8
   // R8_NOT_AFTER_D8_COMPILER and R8_AFTER_D8_COMPILER refers to the standalone and the combined
   // settings, respectively
   public static final CompilerSet R8_COMPILER =
-      compilers(
-          CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8, CompilerUnderTest.D8_AFTER_R8CF);
-  public static final CompilerSet R8DEX_COMPILER =
       compilers(CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8);
   public static final CompilerSet R8_AFTER_D8_COMPILER = compilers(CompilerUnderTest.R8_AFTER_D8);
-  public static final CompilerSet R8_NOT_AFTER_D8_COMPILER =
-      compilers(CompilerUnderTest.R8, CompilerUnderTest.D8_AFTER_R8CF);
+  public static final CompilerSet R8_NOT_AFTER_D8_COMPILER = compilers(CompilerUnderTest.R8);
 
   public static final CompilationModeSet DEBUG_MODE =
       new CompilationModeSet(EnumSet.of(CompilationMode.DEBUG));
diff --git a/tools/create_art_tests.py b/tools/create_art_tests.py
index 13757a9..feb36a2 100755
--- a/tools/create_art_tests.py
+++ b/tools/create_art_tests.py
@@ -16,7 +16,7 @@
 JACK_TEST = os.path.join('tests', '2016-12-19', 'art')
 TEST_DIR = os.path.join('tests', '2017-10-04', 'art')
 TOOLCHAINS = ["dx", "jack", "none"]
-TOOLS = ["r8", "d8", "r8cf"]
+TOOLS = ["r8", "d8"]
 TEMPLATE = Template(
 """// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -54,7 +54,6 @@
     rmtree(toolchain_dir)
   makedirs(join(toolchain_dir, "d8"))
   makedirs(join(toolchain_dir, "r8"))
-  makedirs(join(toolchain_dir, "r8cf"))
 
 def write_file(toolchain, tool, class_name, contents):
   file_name = join(OUTPUT_DIR, toolchain, tool, class_name + ".java")
@@ -75,10 +74,6 @@
         tool_enum = 'R8_AFTER_D8'
       else:
         tool_enum = upper(tool)
-      if tool == "r8cf":
-        if toolchain != "none":
-          continue
-        tool_enum = 'D8_AFTER_R8CF'
       contents = TEMPLATE.substitute(
           name=dir,
           compilerUnderTestEnum=tool_enum,