//===- llvm/unittest/MC/MCInstPrinter.cpp ---------------------------------===// // // 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 // //===----------------------------------------------------------------------===// #include "llvm/MC/MCInstPrinter.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCTargetOptions.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/TargetSelect.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" #include "gtest/gtest.h" using namespace llvm; namespace { class MCInstPrinterTest : public ::testing::Test { public: std::unique_ptr MRI; std::unique_ptr MAI; std::unique_ptr MII; std::unique_ptr Printer; MCInstPrinterTest() { llvm::InitializeAllTargetInfos(); llvm::InitializeAllTargetMCs(); std::string TripleName = "x86_64-pc-linux"; std::string ErrorStr; const Target *TheTarget = TargetRegistry::lookupTarget(TripleName, ErrorStr); // If we didn't build x86, do not run the test. if (!TheTarget) return; MRI.reset(TheTarget->createMCRegInfo(TripleName)); MCTargetOptions MCOptions; MAI.reset(TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); MII.reset(TheTarget->createMCInstrInfo()); Printer.reset(TheTarget->createMCInstPrinter( Triple(TripleName), MAI->getAssemblerDialect(), *MAI, *MII, *MRI)); } template std::string formatHex(T i) { std::string Buffer; raw_string_ostream OS(Buffer); OS << Printer->formatHex(i); OS.flush(); return Buffer; } }; } // namespace TEST_F(MCInstPrinterTest, formatHex) { if (!Printer) return; EXPECT_EQ("0x1", formatHex(1)); EXPECT_EQ("0x7fffffffffffffff", formatHex(std::numeric_limits::max())); EXPECT_EQ("-0x8000000000000000", formatHex(std::numeric_limits::min())); }