xref: /llvm-project/llvm/unittests/MC/MCInstPrinter.cpp (revision 459a82e6890ff41e30d486f36c8c7ec22628bb7a)
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