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