[llvm] 9883ee6 - [Analysis] Remove TFUtils.cpp

Kazu Hirata via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 12 08:39:01 PST 2022


Author: Kazu Hirata
Date: 2022-12-12T08:38:55-08:00
New Revision: 9883ee6816dca80adcdf806e38530c25d9443a29

URL: https://github.com/llvm/llvm-project/commit/9883ee6816dca80adcdf806e38530c25d9443a29
DIFF: https://github.com/llvm/llvm-project/commit/9883ee6816dca80adcdf806e38530c25d9443a29.diff

LOG: [Analysis] Remove TFUtils.cpp

Differential Revision: https://reviews.llvm.org/D139773

Added: 
    

Modified: 
    llvm/lib/Analysis/CMakeLists.txt
    llvm/utils/gn/secondary/llvm/lib/Analysis/BUILD.gn

Removed: 
    llvm/lib/Analysis/TFUtils.cpp


################################################################################
diff  --git a/llvm/lib/Analysis/CMakeLists.txt b/llvm/lib/Analysis/CMakeLists.txt
index 5998510be4b9d..d50b990abd5b0 100644
--- a/llvm/lib/Analysis/CMakeLists.txt
+++ b/llvm/lib/Analysis/CMakeLists.txt
@@ -138,7 +138,6 @@ add_llvm_component_library(LLVMAnalysis
   StackSafetyAnalysis.cpp
   SyncDependenceAnalysis.cpp
   SyntheticCountsUtils.cpp
-  TFUtils.cpp
   TFLiteUtils.cpp
   TargetLibraryInfo.cpp
   TargetTransformInfo.cpp

diff  --git a/llvm/lib/Analysis/TFUtils.cpp b/llvm/lib/Analysis/TFUtils.cpp
deleted file mode 100644
index 980ee5908f98f..0000000000000
--- a/llvm/lib/Analysis/TFUtils.cpp
+++ /dev/null
@@ -1,319 +0,0 @@
-//===- TFUtils.cpp - tensorflow evaluation utilities ----------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements utilities for interfacing with tensorflow C APIs.
-//
-//===----------------------------------------------------------------------===//
-#include "llvm/Config/config.h"
-#if defined(LLVM_HAVE_TF_API) && !defined(LLVM_HAVE_TFLITE)
-
-#include "llvm/ADT/Twine.h"
-#include "llvm/Analysis/Utils/TFUtils.h"
-#include "llvm/Support/Base64.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/JSON.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include "tensorflow/c/c_api.h"
-#include "tensorflow/c/c_api_experimental.h"
-#include <cassert>
-#include <numeric>
-
-using namespace llvm;
-
-namespace {
-
-using TFGraphPtr = std::unique_ptr<TF_Graph, decltype(&TF_DeleteGraph)>;
-using TFSessionOptionsPtr =
-    std::unique_ptr<TF_SessionOptions, decltype(&TF_DeleteSessionOptions)>;
-using TFStatusPtr = std::unique_ptr<TF_Status, decltype(&TF_DeleteStatus)>;
-
-struct TFInitializer {
-  TFInitializer() {
-    int Argc = 1;
-    const char *Name = "";
-    const char **NamePtr = &Name;
-    TF_InitMain(Name, &Argc, const_cast<char ***>(&NamePtr));
-  }
-};
-
-bool ensureInitTF() {
-  static TFInitializer TFLibInitializer;
-  return true;
-}
-
-TFGraphPtr createTFGraph() {
-  return TFGraphPtr(TF_NewGraph(), &TF_DeleteGraph);
-}
-
-TFStatusPtr createTFStatus() {
-  return TFStatusPtr(TF_NewStatus(), &TF_DeleteStatus);
-}
-
-TFSessionOptionsPtr createTFSessionOptions() {
-  return TFSessionOptionsPtr(TF_NewSessionOptions(), &TF_DeleteSessionOptions);
-}
-
-int getTFTypeIndex(TensorType TType) {
-  switch (TType) {
-  case TensorType::Double:
-    return TF_DOUBLE;
-  case TensorType::Float:
-    return TF_FLOAT;
-  case TensorType::Int8:
-    return TF_INT8;
-  case TensorType::UInt8:
-    return TF_UINT8;
-  case TensorType::Int16:
-    return TF_INT16;
-  case TensorType::UInt16:
-    return TF_UINT16;
-  case TensorType::Int32:
-    return TF_INT32;
-  case TensorType::UInt32:
-    return TF_UINT32;
-  case TensorType::Int64:
-    return TF_INT64;
-  case TensorType::UInt64:
-    return TF_UINT64;
-  case TensorType::Invalid:
-    llvm_unreachable("Unknown tensor type");
-  }
-}
-} // namespace
-
-namespace llvm {
-class EvaluationResultImpl {
-public:
-  EvaluationResultImpl(size_t OutputSize)
-      : OutputSize(OutputSize), Output(OutputSize){};
-
-  ~EvaluationResultImpl() {
-    for (auto *P : Output)
-      if (P)
-        TF_DeleteTensor(P);
-  }
-
-  EvaluationResultImpl(const EvaluationResultImpl &) = delete;
-  EvaluationResultImpl(EvaluationResultImpl &&Other) = delete;
-  std::vector<TF_Tensor *> &getOutput() { return Output; }
-
-private:
-  const size_t OutputSize;
-  std::vector<TF_Tensor *> Output;
-};
-
-class TFModelEvaluatorImpl {
-public:
-  TFModelEvaluatorImpl(StringRef SavedModelPath,
-                       const std::vector<TensorSpec> &InputSpecs,
-                       function_ref<TensorSpec(size_t)> GetOutputSpecs,
-                       size_t OutputSpecsSize, const char *Tags);
-
-  bool isValid() const { return IsValid; }
-  size_t OutputSize() const { return OutputFeed.size(); }
-
-  void evaluate(TF_Tensor **Output, TF_Status *Status) {
-    TF_SessionRun(Session, nullptr, InputFeed.data(), Input.data(),
-                  Input.size(), OutputFeed.data(), Output, OutputFeed.size(),
-                  nullptr, 0, nullptr, Status);
-  }
-
-  void initInput(size_t Index, TF_DataType Type,
-                 const std::vector<int64_t> &Dimensions);
-  const std::vector<TF_Tensor *> &getInput() const { return Input; }
-
-  ~TFModelEvaluatorImpl();
-
-private:
-  /// The objects necessary for carrying out an evaluation of the SavedModel.
-  /// They are expensive to set up, and we maintain them accross all the
-  /// evaluations of the model.
-  TF_Session *Session = nullptr;
-  TFGraphPtr Graph;
-  TFSessionOptionsPtr Options;
-
-  /// The specification of the input nodes.
-  std::vector<TF_Output> InputFeed;
-
-  /// The input tensors. They must match by index of the corresponding InputFeed
-  /// value. We set up the tensors once and just mutate theirs scalars before
-  /// each evaluation. The input tensors keep their value after an evaluation.
-  std::vector<TF_Tensor *> Input;
-
-  /// The specification of the output nodes. When evaluating, the tensors in the
-  /// output tensor vector must match by index the corresponding element in the
-  /// OutputFeed.
-  std::vector<TF_Output> OutputFeed;
-
-  void invalidate() { IsValid = false; }
-
-  bool IsValid = true;
-
-  /// Reusable utility for ensuring we can bind the requested Name to a node in
-  /// the SavedModel Graph.
-  bool checkReportAndInvalidate(const TF_Output &Output,
-                                const TensorSpec &OutputSpec);
-};
-
-} // namespace llvm
-
-TFModelEvaluatorImpl::TFModelEvaluatorImpl(
-    StringRef SavedModelPath, const std::vector<TensorSpec> &InputSpecs,
-    function_ref<TensorSpec(size_t)> GetOutputSpecs, size_t OutputSpecsSize,
-    const char *Tags = "serve")
-    : Graph(createTFGraph()), Options(createTFSessionOptions()),
-      InputFeed(InputSpecs.size()), Input(InputSpecs.size()),
-      OutputFeed(OutputSpecsSize) {
-  if (!ensureInitTF()) {
-    errs() << "Tensorflow should have been initialized";
-    return;
-  }
-  auto Status = createTFStatus();
-
-  Session = TF_LoadSessionFromSavedModel(Options.get(), nullptr,
-                                         SavedModelPath.str().c_str(), &Tags, 1,
-                                         Graph.get(), nullptr, Status.get());
-  if (TF_GetCode(Status.get()) != TF_Code::TF_OK) {
-    errs() << TF_Message(Status.get());
-    invalidate();
-  }
-  size_t NrSupported = 0;
-  for (size_t I = 0; I < InputSpecs.size(); ++I) {
-    auto &InputSpec = InputSpecs[I];
-    InputFeed[I] = {
-        TF_GraphOperationByName(Graph.get(), (InputSpec.name()).c_str()),
-        InputSpec.port()};
-    if (!InputFeed[I].oper) {
-      continue;
-    }
-    if (NrSupported++ != I) {
-      errs()
-          << "Unsupported features must be placed at the end of the InputSpecs";
-      invalidate();
-      return;
-    }
-    if (!checkReportAndInvalidate(InputFeed[I], InputSpec))
-      return;
-    initInput(I, static_cast<TF_DataType>(getTFTypeIndex(InputSpec.type())),
-              InputSpec.shape());
-  }
-  InputFeed.resize(NrSupported);
-  Input.resize(NrSupported);
-
-  for (size_t I = 0; I < OutputSpecsSize; ++I) {
-    auto OutputSpec = GetOutputSpecs(I);
-    OutputFeed[I] = {
-        TF_GraphOperationByName(Graph.get(), (OutputSpec.name()).c_str()),
-        OutputSpec.port()};
-    if (!checkReportAndInvalidate(OutputFeed[I], OutputSpec))
-      return;
-  }
-}
-
-TFModelEvaluator::TFModelEvaluator(
-    StringRef SavedModelPath, const std::vector<TensorSpec> &InputSpecs,
-    function_ref<TensorSpec(size_t)> GetOutputSpecs, size_t OutputSpecsSize,
-    const char *Tags)
-    : Impl(new TFModelEvaluatorImpl(SavedModelPath, InputSpecs, GetOutputSpecs,
-                                    OutputSpecsSize, Tags)) {
-  if (!Impl->isValid())
-    Impl.reset();
-}
-
-TFModelEvaluator::TFModelEvaluator(StringRef SavedModelPath,
-                                   const std::vector<TensorSpec> &InputSpecs,
-                                   const std::vector<TensorSpec> &OutputSpecs,
-                                   const char *Tags)
-    : TFModelEvaluator(
-          SavedModelPath, InputSpecs, [&](size_t I) { return OutputSpecs[I]; },
-          OutputSpecs.size(), Tags) {}
-
-TFModelEvaluatorImpl::~TFModelEvaluatorImpl() {
-  for (auto *T : Input) {
-    TF_DeleteTensor(T);
-  }
-  if (Session == nullptr)
-    return;
-  auto Status = createTFStatus();
-  TF_DeleteSession(Session, Status.get());
-  Session = nullptr;
-  if (TF_GetCode(Status.get()) != TF_Code::TF_OK)
-    errs() << "Could not delete TF session";
-}
-
-bool TFModelEvaluatorImpl::checkReportAndInvalidate(
-    const TF_Output &Output, const TensorSpec &OutputSpec) {
-  if (Output.oper)
-    return true;
-  errs() << "Could not find TF_Output named: " + OutputSpec.name();
-  IsValid = false;
-  return IsValid;
-}
-
-Optional<TFModelEvaluator::EvaluationResult> TFModelEvaluator::evaluate() {
-  if (!isValid())
-    return None;
-  std::unique_ptr<EvaluationResultImpl> Ret =
-      std::make_unique<EvaluationResultImpl>(Impl->OutputSize());
-  auto Status = createTFStatus();
-  Impl->evaluate(Ret->getOutput().data(), Status.get());
-  if (TF_GetCode(Status.get()) != TF_Code::TF_OK) {
-    errs() << TF_Message(Status.get());
-    Impl.reset();
-    return None;
-  }
-  return EvaluationResult(std::move(Ret));
-}
-
-void TFModelEvaluatorImpl::initInput(size_t Index, TF_DataType Type,
-                                     const std::vector<int64_t> &Dimensions) {
-  int64_t TotalSize = TF_DataTypeSize(Type);
-  for (auto &D : Dimensions)
-    TotalSize *= D;
-
-  Input[Index] =
-      TF_AllocateTensor(Type, Dimensions.data(), Dimensions.size(), TotalSize);
-  std::memset(TF_TensorData(Input[Index]), 0, TotalSize);
-}
-
-void *TFModelEvaluator::getUntypedInput(size_t Index) {
-  if (Index < Impl->getInput().size())
-    return TF_TensorData(Impl->getInput()[Index]);
-  return nullptr;
-}
-
-TFModelEvaluator::EvaluationResult::EvaluationResult(
-    std::unique_ptr<EvaluationResultImpl> Impl)
-    : Impl(std::move(Impl)) {}
-
-TFModelEvaluator::EvaluationResult::EvaluationResult(EvaluationResult &&Other)
-    : Impl(std::move(Other.Impl)) {}
-
-TFModelEvaluator::EvaluationResult &
-TFModelEvaluator::EvaluationResult::operator=(EvaluationResult &&Other) {
-  Impl = std::move(Other.Impl);
-  return *this;
-}
-
-void *TFModelEvaluator::EvaluationResult::getUntypedTensorValue(size_t Index) {
-  return TF_TensorData(Impl->getOutput()[Index]);
-}
-
-const void *
-TFModelEvaluator::EvaluationResult::getUntypedTensorValue(size_t Index) const {
-  return TF_TensorData(Impl->getOutput()[Index]);
-}
-
-TFModelEvaluator::EvaluationResult::~EvaluationResult() {}
-TFModelEvaluator::~TFModelEvaluator() {}
-
-#endif // defined(LLVM_HAVE_TF_API)

diff  --git a/llvm/utils/gn/secondary/llvm/lib/Analysis/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Analysis/BUILD.gn
index 4adb7ccf63474..73011e3c463bf 100644
--- a/llvm/utils/gn/secondary/llvm/lib/Analysis/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/lib/Analysis/BUILD.gn
@@ -119,7 +119,6 @@ static_library("Analysis") {
     "SyncDependenceAnalysis.cpp",
     "SyntheticCountsUtils.cpp",
     "TFLiteUtils.cpp",
-    "TFUtils.cpp",
     "TargetLibraryInfo.cpp",
     "TargetTransformInfo.cpp",
     "TensorSpec.cpp",


        


More information about the llvm-commits mailing list