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