71 lines · cpp
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-exception6//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 20using namespace llvm;21 22namespace {23class MCInstPrinterTest : public ::testing::Test {24public: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 StringRef TripleName = "x86_64-pc-linux";35 Triple TT(TripleName);36 std::string ErrorStr;37 38 const Target *TheTarget = TargetRegistry::lookupTarget(TT, 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(TT));45 MCTargetOptions MCOptions;46 MAI.reset(TheTarget->createMCAsmInfo(*MRI, TT, MCOptions));47 MII.reset(TheTarget->createMCInstrInfo());48 Printer.reset(TheTarget->createMCInstPrinter(TT, MAI->getAssemblerDialect(),49 *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} // namespace60 61TEST_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