[llvm] 8cfc872 - Revert "Re-land "[llvm-exegesis] Save target state before running the benchmark."

Clement Courbet via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 3 23:49:38 PST 2020


Author: Clement Courbet
Date: 2020-11-04T08:48:44+01:00
New Revision: 8cfc872129a99782ab07a19171bf8eace85589ae

URL: https://github.com/llvm/llvm-project/commit/8cfc872129a99782ab07a19171bf8eace85589ae
DIFF: https://github.com/llvm/llvm-project/commit/8cfc872129a99782ab07a19171bf8eace85589ae.diff

LOG: Revert "Re-land "[llvm-exegesis] Save target state before running the benchmark."

Still issues on some architectures.

This reverts commit fd13d7ce09af2bcad6976b8f5207874992bdd908.

Added: 
    

Modified: 
    llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
    llvm/tools/llvm-exegesis/lib/Target.cpp
    llvm/tools/llvm-exegesis/lib/Target.h
    llvm/tools/llvm-exegesis/lib/X86/Target.cpp

Removed: 
    llvm/test/tools/llvm-exegesis/X86/uops-FLDENVm.s


################################################################################
diff  --git a/llvm/test/tools/llvm-exegesis/X86/uops-FLDENVm.s b/llvm/test/tools/llvm-exegesis/X86/uops-FLDENVm.s
deleted file mode 100644
index be182d8fcf5b..000000000000
--- a/llvm/test/tools/llvm-exegesis/X86/uops-FLDENVm.s
+++ /dev/null
@@ -1,6 +0,0 @@
-# RUN: llvm-exegesis -mode=uops -opcode-name=FLDENVm,FLDL2E -repetition-mode=duplicate | FileCheck %s
-
-CHECK:      mode:            uops
-CHECK-NEXT: key:
-CHECK-NEXT:   instructions:
-CHECK-NEXT:     FLDENVm

diff  --git a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
index 2304e91b8b32..1bbad207a27e 100644
--- a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
+++ b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
@@ -71,10 +71,10 @@ class FunctionExecutorImpl : public BenchmarkRunner::FunctionExecutor {
     SmallVector<StringRef, 2> CounterNames;
     StringRef(Counters).split(CounterNames, '+');
     char *const ScratchPtr = Scratch->ptr();
-    const ExegesisTarget &ET = State.getExegesisTarget();
     for (auto &CounterName : CounterNames) {
       CounterName = CounterName.trim();
-      auto CounterOrError = ET.createCounter(CounterName, State);
+      auto CounterOrError =
+          State.getExegesisTarget().createCounter(CounterName, State);
 
       if (!CounterOrError)
         return CounterOrError.takeError();
@@ -93,7 +93,6 @@ class FunctionExecutorImpl : public BenchmarkRunner::FunctionExecutor {
                 .concat(std::to_string(Reserved)));
       Scratch->clear();
       {
-        auto PS = ET.withSavedState();
         CrashRecoveryContext CRC;
         CrashRecoveryContext::Enable();
         const bool Crashed = !CRC.RunSafely([this, Counter, ScratchPtr]() {
@@ -102,7 +101,6 @@ class FunctionExecutorImpl : public BenchmarkRunner::FunctionExecutor {
           Counter->stop();
         });
         CrashRecoveryContext::Disable();
-        PS.reset();
         if (Crashed) {
           std::string Msg = "snippet crashed while running";
 #ifdef LLVM_ON_UNIX

diff  --git a/llvm/tools/llvm-exegesis/lib/Target.cpp b/llvm/tools/llvm-exegesis/lib/Target.cpp
index 85180a1d6614..ad26c1678c78 100644
--- a/llvm/tools/llvm-exegesis/lib/Target.cpp
+++ b/llvm/tools/llvm-exegesis/lib/Target.cpp
@@ -147,8 +147,6 @@ const PfmCountersInfo &ExegesisTarget::getPfmCounters(StringRef CpuName) const {
   return *Found->PCI;
 }
 
-ExegesisTarget::SavedState::~SavedState() {} // anchor.
-
 namespace {
 
 // Default implementation.

diff  --git a/llvm/tools/llvm-exegesis/lib/Target.h b/llvm/tools/llvm-exegesis/lib/Target.h
index 28c103aa1948..8a5624b42803 100644
--- a/llvm/tools/llvm-exegesis/lib/Target.h
+++ b/llvm/tools/llvm-exegesis/lib/Target.h
@@ -172,16 +172,6 @@ class ExegesisTarget {
   // counters are defined for this CPU).
   const PfmCountersInfo &getPfmCounters(StringRef CpuName) const;
 
-  // Saves the CPU state that needs to be preserved when running a benchmark,
-  // and returns and RAII object that restores the state on destruction.
-  // By default no state is preserved.
-  struct SavedState {
-    virtual ~SavedState();
-  };
-  virtual std::unique_ptr<SavedState> withSavedState() const {
-    return std::make_unique<SavedState>();
-  }
-
 private:
   virtual bool matchesArch(Triple::ArchType Arch) const = 0;
 

diff  --git a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp
index 8610afdeb9e5..827e2e27a2f8 100644
--- a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp
+++ b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp
@@ -26,9 +26,6 @@
 #include <memory>
 #include <string>
 #include <vector>
-#if defined(_MSC_VER)
-#include <immintrin.h>
-#endif
 
 namespace llvm {
 namespace exegesis {
@@ -597,32 +594,6 @@ void ConstantInliner::initStack(unsigned Bytes) {
 
 namespace {
 
-class X86SavedState : public ExegesisTarget::SavedState {
-public:
-  X86SavedState() {
-#if defined(_MSC_VER)
-    _fxsave64(FPState);
-#elif defined(__GNUC__)
-    __builtin_ia32_fxsave64(FPState);
-#endif
-  }
-
-  ~X86SavedState() {
-    // Restoring the X87 state does not flush pending exceptions, make sure
-    // these exceptions are flushed now.
-#if defined(_MSC_VER)
-    _clearfp();
-    _fxrstor64(FPState);
-#elif defined(__GNUC__)
-    asm volatile("fwait");
-    __builtin_ia32_fxrstor64(FPState);
-#endif
-  }
-
-private:
-  alignas(16) char FPState[512];
-};
-
 class ExegesisX86Target : public ExegesisTarget {
 public:
   ExegesisX86Target() : ExegesisTarget(X86CpuPfmCounters) {}
@@ -720,10 +691,6 @@ class ExegesisX86Target : public ExegesisTarget {
 #endif
   }
 
-  std::unique_ptr<SavedState> withSavedState() const override {
-    return std::make_unique<X86SavedState>();
-  }
-
   static const unsigned kUnavailableRegisters[4];
 };
 


        


More information about the llvm-commits mailing list