1//===-- DisassemblerHelper.cpp ----------------------------------*- C++ -*-===//
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 "DisassemblerHelper.h"
10
11#include "llvm/MC/TargetRegistry.h"
12
13namespace llvm {
14namespace exegesis {
15
16DisassemblerHelper::DisassemblerHelper(const LLVMState &State) : State_(State) {
17 MCTargetOptions MCOptions;
18 const auto &TM = State.getTargetMachine();
19 const auto &Triple = TM.getTargetTriple();
20 AsmInfo_.reset(p: TM.getTarget().createMCAsmInfo(MRI: State_.getRegInfo(),
21 TheTriple: Triple.str(), Options: MCOptions));
22 InstPrinter_.reset(p: TM.getTarget().createMCInstPrinter(
23 T: Triple, SyntaxVariant: 0 /*default variant*/, MAI: *AsmInfo_, MII: State_.getInstrInfo(),
24 MRI: State_.getRegInfo()));
25
26 Context_ = std::make_unique<MCContext>(
27 args: Triple, args: AsmInfo_.get(), args: &State_.getRegInfo(), args: &State_.getSubtargetInfo());
28 Disasm_.reset(p: TM.getTarget().createMCDisassembler(STI: State_.getSubtargetInfo(),
29 Ctx&: *Context_));
30 assert(Disasm_ && "cannot create MCDisassembler. missing call to "
31 "InitializeXXXTargetDisassembler ?");
32}
33
34} // namespace exegesis
35} // namespace llvm
36