xref: /llvm-project/llvm/unittests/tools/llvm-mca/MCATestBase.h (revision e03f427196ec67a8a5cfbdd658f9eabe9bce83ce)
197579dccSMin-Yih Hsu //===---- MCATestBase.h -----------------------------------------*- C++ -*-===//
297579dccSMin-Yih Hsu //
397579dccSMin-Yih Hsu // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
497579dccSMin-Yih Hsu // See https://llvm.org/LICENSE.txt for license information.
597579dccSMin-Yih Hsu // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
697579dccSMin-Yih Hsu //
797579dccSMin-Yih Hsu //===----------------------------------------------------------------------===//
897579dccSMin-Yih Hsu // Test fixture common to all MCA tests.
997579dccSMin-Yih Hsu //===----------------------------------------------------------------------===//
1097579dccSMin-Yih Hsu 
1197579dccSMin-Yih Hsu #ifndef LLVM_UNITTESTS_TOOLS_LLVMMCA_MCATESTBASE_H
1297579dccSMin-Yih Hsu #define LLVM_UNITTESTS_TOOLS_LLVMMCA_MCATESTBASE_H
1397579dccSMin-Yih Hsu 
1497579dccSMin-Yih Hsu #include "llvm/ADT/StringRef.h"
1597579dccSMin-Yih Hsu #include "llvm/MC/MCAsmInfo.h"
1697579dccSMin-Yih Hsu #include "llvm/MC/MCContext.h"
1797579dccSMin-Yih Hsu #include "llvm/MC/MCInst.h"
1897579dccSMin-Yih Hsu #include "llvm/MC/MCInstPrinter.h"
1997579dccSMin-Yih Hsu #include "llvm/MC/MCInstrAnalysis.h"
2097579dccSMin-Yih Hsu #include "llvm/MC/MCInstrInfo.h"
2197579dccSMin-Yih Hsu #include "llvm/MC/MCObjectFileInfo.h"
2297579dccSMin-Yih Hsu #include "llvm/MC/MCRegisterInfo.h"
2397579dccSMin-Yih Hsu #include "llvm/MC/MCSubtargetInfo.h"
2497579dccSMin-Yih Hsu #include "llvm/MC/MCTargetOptions.h"
2597579dccSMin-Yih Hsu #include "llvm/MC/TargetRegistry.h"
2697579dccSMin-Yih Hsu #include "llvm/MCA/Context.h"
278de9f2b5SJob Noorman #include "llvm/TargetParser/SubtargetFeature.h"
2862c7f035SArchibald Elliott #include "llvm/TargetParser/Triple.h"
2997579dccSMin-Yih Hsu 
3097579dccSMin-Yih Hsu #include "gtest/gtest.h"
3197579dccSMin-Yih Hsu 
3297579dccSMin-Yih Hsu namespace llvm {
3397579dccSMin-Yih Hsu namespace json {
3497579dccSMin-Yih Hsu class Object;
3597579dccSMin-Yih Hsu } // end namespace json
3697579dccSMin-Yih Hsu 
3797579dccSMin-Yih Hsu namespace mca {
3897579dccSMin-Yih Hsu class View;
3997579dccSMin-Yih Hsu 
4097579dccSMin-Yih Hsu class MCATestBase : public ::testing::Test {
4197579dccSMin-Yih Hsu protected:
4297579dccSMin-Yih Hsu   // Note: Subclass ctors are expected to perform target-specific
4397579dccSMin-Yih Hsu   // initializations.
4497579dccSMin-Yih Hsu   MCATestBase(StringRef TripleStr, StringRef CPUName, StringRef MAttr = "")
4597579dccSMin-Yih Hsu       : TheTriple(TripleStr), CPUName(CPUName), MAttr(MAttr) {}
4697579dccSMin-Yih Hsu 
4797579dccSMin-Yih Hsu   /// Factory function to create a Target.
4897579dccSMin-Yih Hsu   virtual const Target *getLLVMTarget() const;
4997579dccSMin-Yih Hsu 
5097579dccSMin-Yih Hsu   /// Factory function to create a MCTargetOptions instance. Returns an
5197579dccSMin-Yih Hsu   /// empty one by default.
5297579dccSMin-Yih Hsu   virtual MCTargetOptions getMCTargetOptions() { return MCTargetOptions(); }
5397579dccSMin-Yih Hsu 
5497579dccSMin-Yih Hsu   const Target *TheTarget;
5597579dccSMin-Yih Hsu   const Triple TheTriple;
5697579dccSMin-Yih Hsu   StringRef CPUName;
5797579dccSMin-Yih Hsu   StringRef MAttr;
5897579dccSMin-Yih Hsu 
5997579dccSMin-Yih Hsu   // MC components.
6097579dccSMin-Yih Hsu   std::unique_ptr<MCSubtargetInfo> STI;
6197579dccSMin-Yih Hsu   std::unique_ptr<MCRegisterInfo> MRI;
6297579dccSMin-Yih Hsu   std::unique_ptr<MCAsmInfo> MAI;
6397579dccSMin-Yih Hsu   std::unique_ptr<MCObjectFileInfo> MOFI;
6497579dccSMin-Yih Hsu   std::unique_ptr<MCContext> Ctx;
6597579dccSMin-Yih Hsu   std::unique_ptr<MCInstrInfo> MCII;
6697579dccSMin-Yih Hsu   std::unique_ptr<MCInstrAnalysis> MCIA;
6797579dccSMin-Yih Hsu   std::unique_ptr<MCInstPrinter> IP;
6897579dccSMin-Yih Hsu 
6997579dccSMin-Yih Hsu   static mca::PipelineOptions getDefaultPipelineOptions();
7097579dccSMin-Yih Hsu 
7197579dccSMin-Yih Hsu   void SetUp() override;
7297579dccSMin-Yih Hsu 
7397579dccSMin-Yih Hsu   /// Utility function to run MCA with (nearly) the same configuration as the
7497579dccSMin-Yih Hsu   /// `llvm-mca` tool to verify result correctness.
7597579dccSMin-Yih Hsu   /// This function only displays on SummaryView by default.
7697579dccSMin-Yih Hsu   virtual Error runBaselineMCA(json::Object &Result, ArrayRef<MCInst> Insts,
77*e03f4271SJay Foad                                ArrayRef<mca::View *> Views = {},
7897579dccSMin-Yih Hsu                                const mca::PipelineOptions *PO = nullptr);
7997579dccSMin-Yih Hsu };
8097579dccSMin-Yih Hsu 
8197579dccSMin-Yih Hsu } // end namespace mca
8297579dccSMin-Yih Hsu } // end namespace llvm
8397579dccSMin-Yih Hsu #endif
84