Remove FdoMode.VANILLA.

And a little bit of associated refactoring.

RELNOTES: None.
PiperOrigin-RevId: 210097491
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index 855998b..9962f29 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -146,19 +146,8 @@
     }
 
     // If --fdo_optimize was not specified, we don't have any additional inputs.
-    switch (fdoSupportProvider.getFdoMode()) {
-      case LLVM_FDO:
-      case AUTO_FDO:
-      case XBINARY_FDO:
-        auxiliaryInputs.add(fdoSupportProvider.getProfileArtifact());
-        break;
-
-      case VANILLA:
-      case OFF:
-        break;
-
-      default:
-        throw new IllegalStateException();
+    if (fdoSupportProvider.getFdoMode() != FdoMode.OFF) {
+      auxiliaryInputs.add(fdoSupportProvider.getProfileArtifact());
     }
 
     return auxiliaryInputs.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index 07117a9..3d68b2d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -57,7 +57,6 @@
 import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.util.FileType;
-import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
@@ -232,7 +231,7 @@
 
     Artifact rawProfileArtifact;
 
-    if (fdoProfile.getBaseName().endsWith(".zip")) {
+    if (CppFileTypes.LLVM_PROFILE_ZIP.matches(fdoProfile)) {
       // Get the zipper binary for unzipping the profile.
       Artifact zipperBinaryArtifact = ruleContext.getPrerequisiteArtifact(":zipper", Mode.HOST);
       if (zipperBinaryArtifact == null) {
@@ -371,29 +370,22 @@
       }
     }
 
-    FileTypeSet validExtensions =
-        FileTypeSet.of(
-            CppFileTypes.GCC_AUTO_PROFILE,
-            CppFileTypes.XBINARY_PROFILE,
-            CppFileTypes.LLVM_PROFILE,
-            CppFileTypes.LLVM_PROFILE_RAW,
-            FileType.of(".zip"));
-    if (fdoZip != null && !validExtensions.matches(fdoZip.getPathString())) {
-      ruleContext.ruleError("invalid extension for FDO profile file.");
-      return null;
-    }
-
     FdoMode fdoMode;
     if (fdoZip == null) {
       fdoMode = FdoMode.OFF;
-    } else if (CppFileTypes.GCC_AUTO_PROFILE.matches(fdoZip.getBaseName())) {
+    } else if (CppFileTypes.GCC_AUTO_PROFILE.matches(fdoZip)) {
       fdoMode = FdoMode.AUTO_FDO;
-    } else if (isLLVMOptimizedFdo(toolchainInfo.isLLVMCompiler(), fdoZip)) {
-      fdoMode = FdoMode.LLVM_FDO;
-    } else if (CppFileTypes.XBINARY_PROFILE.matches(fdoZip.getBaseName())) {
+    } else if (CppFileTypes.XBINARY_PROFILE.matches(fdoZip)) {
       fdoMode = FdoMode.XBINARY_FDO;
+    } else if (CppFileTypes.LLVM_PROFILE.matches(fdoZip)) {
+      fdoMode = FdoMode.LLVM_FDO;
+    } else if (CppFileTypes.LLVM_PROFILE_RAW.matches(fdoZip)) {
+      fdoMode = FdoMode.LLVM_FDO;
+    } else if (CppFileTypes.LLVM_PROFILE_ZIP.matches(fdoZip)) {
+      fdoMode = FdoMode.LLVM_FDO;
     } else {
-      fdoMode = FdoMode.VANILLA;
+      ruleContext.ruleError("invalid extension for FDO profile file.");
+      return null;
     }
 
     SkyKey fdoKey = FdoSupportValue.key(fdoZip);
@@ -631,14 +623,6 @@
     return builder.build();
   }
 
-  /** Returns true if LLVM FDO Optimization should be applied for this configuration. */
-  private boolean isLLVMOptimizedFdo(boolean isLLVMCompiler, PathFragment fdoProfilePath) {
-    return fdoProfilePath != null
-        && (CppFileTypes.LLVM_PROFILE.matches(fdoProfilePath)
-            || CppFileTypes.LLVM_PROFILE_RAW.matches(fdoProfilePath)
-            || (isLLVMCompiler && fdoProfilePath.toString().endsWith(".zip")));
-  }
-
   /** Finds an appropriate {@link CppToolchainInfo} for this target. */
   private CppToolchainInfo getCppToolchainInfo(
       RuleContext ruleContext, CppConfiguration cppConfiguration) throws RuleErrorException {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java
index c32b89e..5f9e5cf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java
@@ -184,6 +184,7 @@
   public static final FileType XBINARY_PROFILE = FileType.of(".xfdo");
   public static final FileType LLVM_PROFILE = FileType.of(".profdata");
   public static final FileType LLVM_PROFILE_RAW = FileType.of(".profraw");
+  public static final FileType LLVM_PROFILE_ZIP = FileType.of(".zip");
 
   public static final FileType CPP_MODULE_MAP = FileType.of(".cppmap");
   public static final FileType CPP_MODULE = FileType.of(".pcm");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileRule.java
index 9f46a3d..06a800a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileRule.java
@@ -21,7 +21,6 @@
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.syntax.Type;
-import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.FileTypeSet;
 
 /** {@code fdo_profile} rule class. */
@@ -42,9 +41,9 @@
                     FileTypeSet.of(
                         CppFileTypes.LLVM_PROFILE_RAW,
                         CppFileTypes.LLVM_PROFILE,
+                        CppFileTypes.LLVM_PROFILE_ZIP,
                         CppFileTypes.GCC_AUTO_PROFILE,
-                        CppFileTypes.XBINARY_PROFILE,
-                        FileType.of(".zip")))
+                        CppFileTypes.XBINARY_PROFILE))
                 .singleArtifact())
         /* <!-- #BLAZE_RULE(fdo_profile).ATTRIBUTE(absolute_path_profile) -->
         Absolute path to the FDO profile. The FDO file can have one of the following extensions:
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
index fcb0649..6c89bc2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
@@ -38,9 +38,6 @@
     /** FDO is turned off. */
     OFF,
 
-    /** Profiling-based FDO using an explicitly recorded profile. */
-    VANILLA,
-
     /** FDO based on automatically collected data. */
     AUTO_FDO,
 
@@ -52,9 +49,7 @@
   }
 
   /**
-   * Path of the profile file passed to {@code --fdo_optimize}, or
-   * {@code null} if FDO optimization is disabled.  The profile file
-   * can be a coverage ZIP or an AutoFDO feedback file.
+   * Path of the profile file passed to {@code --fdo_optimize}
    */
   // TODO(lberki): This should be a PathFragment.
   // Except that CcProtoProfileProvider#getProfile() calls #exists() on it, which is ridiculously
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL b/src/test/java/com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL
index c423ae2..74ba259 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL
@@ -83,6 +83,7 @@
   objcopy_embed_flag: "binary"
   tool_path { name: "objdump" path: "/usr/bin/objdump" }
   tool_path { name: "strip" path: "/usr/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "/usr/bin/llvm-profdata" }
 
   # Anticipated future default.
   unfiltered_cxx_flag: "-no-canonical-prefixes"
@@ -181,6 +182,7 @@
   tool_path { name: "objcopy" path: "/usr/bin/objcopy" }
   tool_path { name: "objdump" path: "/usr/bin/objdump" }
   tool_path { name: "strip" path: "/usr/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "/usr/bin/llvm-profdata" }
 
   needsPic: true
   supports_fission: true
@@ -220,6 +222,7 @@
   tool_path { name: "objcopy" path: "/usr/bin/objcopy" }
   tool_path { name: "objdump" path: "/usr/bin/objdump" }
   tool_path { name: "strip" path: "/usr/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "/usr/bin/llvm-profdata" }
 
   needsPic: true
   supports_fission: true
@@ -259,6 +262,7 @@
   tool_path { name: "objcopy" path: "/usr/bin/objcopy" }
   tool_path { name: "objdump" path: "/usr/bin/objdump" }
   tool_path { name: "strip" path: "/usr/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "/usr/bin/llvm-profdata" }
 
   needsPic: false
 
@@ -297,6 +301,7 @@
   tool_path { name: "objcopy" path: "/usr/bin/objcopy" }
   tool_path { name: "objdump" path: "/usr/bin/objdump" }
   tool_path { name: "strip" path: "/usr/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "/usr/bin/llvm-profdata" }
 
   needsPic: false
 
@@ -336,6 +341,7 @@
   tool_path { name: "objcopy" path: "/usr/bin/objcopy" }
   tool_path { name: "objdump" path: "/usr/bin/objdump" }
   tool_path { name: "strip" path: "/usr/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "/usr/bin/llvm-profdata" }
 
   needsPic: false
 
@@ -376,6 +382,7 @@
   tool_path { name: "objcopy" path: "/usr/bin/objcopy" }
   tool_path { name: "objdump" path: "/usr/bin/objdump" }
   tool_path { name: "strip" path: "/usr/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "/usr/bin/llvm-profdata" }
 
   needsPic: false
 
@@ -416,6 +423,7 @@
   tool_path { name: "objcopy" path: "C:/mingw/bin/objcopy" }
   tool_path { name: "objdump" path: "C:/mingw/bin/objdump" }
   tool_path { name: "strip" path: "C:/mingw/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "C:/mingw/bin/llvm-profdata" }
 
   builtin_sysroot: ""
   cxx_flag: "-std=c++0x"
@@ -450,6 +458,7 @@
   tool_path { name: "objcopy" path: "C:/msys64/mingw64/bin/objcopy" }
   tool_path { name: "objdump" path: "C:/msys64/mingw64/bin/objdump" }
   tool_path { name: "strip" path: "C:/msys64/mingw64/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "C:/msys64/mingw64/bin/llvm-profdata" }
 
   builtin_sysroot: "/usr/grte/v1"
   cxx_flag: "-std=c++0x"
@@ -483,6 +492,7 @@
   tool_path { name: "objcopy" path: "C:/Program Files (x86)/LLVM/bin/objcopy" }
   tool_path { name: "objdump" path: "C:/Program Files (x86)/LLVM/bin/objdump" }
   tool_path { name: "strip" path: "C:/Program Files (x86)/LLVM/bin/strip" }
+  tool_path { name: "llvm-profdata" path: "C:/Program Files (x86)/LLVM/bin/llvm-profdata" }
 
   cxx_flag: "-std=c++0x"
   cxx_builtin_include_directory: "/usr/lib/gcc/"
@@ -533,6 +543,7 @@
   tool_path { name: "objcopy" path: "/bin/false" }
   tool_path { name: "objdump" path: "/bin/false" }
   tool_path { name: "strip" path: "/bin/false" }
+  tool_path { name: "llvm-profdata" path: "/bin/false" }
 
   supports_interface_shared_objects: true
 }
@@ -571,6 +582,7 @@
    objcopy_embed_flag: "binary"
    tool_path { name: "objdump" path: "C:/tools/msys64/usr/bin/objdump" }
    tool_path { name: "strip" path: "C:/tools/msys64/usr/bin/strip" }
+   tool_path { name: "llvm-profdata" path: "C:/tools/msys64/usr/bin/llvm-profdata" }
    linking_mode_flags { mode: DYNAMIC }
 }
 
@@ -608,5 +620,6 @@
    objcopy_embed_flag: "binary"
    tool_path { name: "objdump" path: "C:/tools/msys64/usr/bin/objdump" }
    tool_path { name: "strip" path: "C:/tools/msys64/usr/bin/strip" }
+   tool_path { name: "llvm-profdata" path: "C:/tools/msys64/usr/bin/llvm-profdata" }
    # No linking_mode_flags here
 }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java b/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java
index ad799b9..cb2740b 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/Crosstool.java
@@ -29,7 +29,7 @@
  */
 final class Crosstool {
   private static final ImmutableList<String> CROSSTOOL_BINARIES =
-      ImmutableList.of("ar", "as", "compile", "dwp", "link", "objcopy");
+      ImmutableList.of("ar", "as", "compile", "dwp", "link", "objcopy", "llvm-profdata");
 
   private final MockToolsConfig config;