1bee0f7ddSJonas Devlieghere //===- llvm/unittest/MC/MCInstPrinter.cpp ---------------------------------===// 2bee0f7ddSJonas Devlieghere // 3bee0f7ddSJonas Devlieghere // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4bee0f7ddSJonas Devlieghere // See https://llvm.org/LICENSE.txt for license information. 5bee0f7ddSJonas Devlieghere // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6bee0f7ddSJonas Devlieghere // 7bee0f7ddSJonas Devlieghere //===----------------------------------------------------------------------===// 8bee0f7ddSJonas Devlieghere 9bee0f7ddSJonas Devlieghere #include "llvm/MC/MCInstPrinter.h" 10bee0f7ddSJonas Devlieghere #include "llvm/MC/MCAsmInfo.h" 11bee0f7ddSJonas Devlieghere #include "llvm/MC/MCInstrInfo.h" 12ef736a1cSserge-sans-paille #include "llvm/MC/MCRegisterInfo.h" 134b63ca13SMirko Brkusanin #include "llvm/MC/MCTargetOptions.h" 1489b57061SReid Kleckner #include "llvm/MC/TargetRegistry.h" 15bee0f7ddSJonas Devlieghere #include "llvm/Support/TargetSelect.h" 16bee0f7ddSJonas Devlieghere #include "llvm/Target/TargetMachine.h" 17bee0f7ddSJonas Devlieghere #include "llvm/Target/TargetOptions.h" 18bee0f7ddSJonas Devlieghere #include "gtest/gtest.h" 19bee0f7ddSJonas Devlieghere 20bee0f7ddSJonas Devlieghere using namespace llvm; 21bee0f7ddSJonas Devlieghere 22bee0f7ddSJonas Devlieghere namespace { 23bee0f7ddSJonas Devlieghere class MCInstPrinterTest : public ::testing::Test { 24bee0f7ddSJonas Devlieghere public: 25bee0f7ddSJonas Devlieghere std::unique_ptr<MCRegisterInfo> MRI; 26bee0f7ddSJonas Devlieghere std::unique_ptr<MCAsmInfo> MAI; 27bee0f7ddSJonas Devlieghere std::unique_ptr<const MCInstrInfo> MII; 28bee0f7ddSJonas Devlieghere std::unique_ptr<MCInstPrinter> Printer; 29bee0f7ddSJonas Devlieghere 30bee0f7ddSJonas Devlieghere MCInstPrinterTest() { 31bee0f7ddSJonas Devlieghere llvm::InitializeAllTargetInfos(); 32bee0f7ddSJonas Devlieghere llvm::InitializeAllTargetMCs(); 33bee0f7ddSJonas Devlieghere 34bee0f7ddSJonas Devlieghere std::string TripleName = "x86_64-pc-linux"; 35bee0f7ddSJonas Devlieghere std::string ErrorStr; 36bee0f7ddSJonas Devlieghere 37bee0f7ddSJonas Devlieghere const Target *TheTarget = 38bee0f7ddSJonas Devlieghere TargetRegistry::lookupTarget(TripleName, ErrorStr); 39bee0f7ddSJonas Devlieghere 40bee0f7ddSJonas Devlieghere // If we didn't build x86, do not run the test. 41bee0f7ddSJonas Devlieghere if (!TheTarget) 42bee0f7ddSJonas Devlieghere return; 43bee0f7ddSJonas Devlieghere 44bee0f7ddSJonas Devlieghere MRI.reset(TheTarget->createMCRegInfo(TripleName)); 454b63ca13SMirko Brkusanin MCTargetOptions MCOptions; 464b63ca13SMirko Brkusanin MAI.reset(TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); 47bee0f7ddSJonas Devlieghere MII.reset(TheTarget->createMCInstrInfo()); 48bee0f7ddSJonas Devlieghere Printer.reset(TheTarget->createMCInstPrinter( 49bee0f7ddSJonas Devlieghere Triple(TripleName), MAI->getAssemblerDialect(), *MAI, *MII, *MRI)); 50bee0f7ddSJonas Devlieghere } 51bee0f7ddSJonas Devlieghere 52bee0f7ddSJonas Devlieghere template <typename T> std::string formatHex(T i) { 53bee0f7ddSJonas Devlieghere std::string Buffer; 54bee0f7ddSJonas Devlieghere raw_string_ostream OS(Buffer); 55bee0f7ddSJonas Devlieghere OS << Printer->formatHex(i); 56bee0f7ddSJonas Devlieghere return Buffer; 57bee0f7ddSJonas Devlieghere } 58bee0f7ddSJonas Devlieghere }; 59bee0f7ddSJonas Devlieghere } // namespace 60bee0f7ddSJonas Devlieghere 61bee0f7ddSJonas Devlieghere TEST_F(MCInstPrinterTest, formatHex) { 62bee0f7ddSJonas Devlieghere if (!Printer) 63*7fc87159SPaul Robinson GTEST_SKIP(); 64bee0f7ddSJonas Devlieghere 65bee0f7ddSJonas Devlieghere EXPECT_EQ("0x1", formatHex<int64_t>(1)); 66bee0f7ddSJonas Devlieghere EXPECT_EQ("0x7fffffffffffffff", 67bee0f7ddSJonas Devlieghere formatHex(std::numeric_limits<int64_t>::max())); 68bee0f7ddSJonas Devlieghere EXPECT_EQ("-0x8000000000000000", 69bee0f7ddSJonas Devlieghere formatHex(std::numeric_limits<int64_t>::min())); 70bee0f7ddSJonas Devlieghere } 71