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 const auto &TM = State.getTargetMachine();
18 const auto &Triple = TM.getTargetTriple();
19 AsmInfo_.reset(
20 p: TM.getTarget().createMCAsmInfo(MRI: State_.getRegInfo(), TheTriple: Triple, Options: MCOptions_));
21 InstPrinter_.reset(p: TM.getTarget().createMCInstPrinter(
22 T: Triple, SyntaxVariant: 0 /*default variant*/, MAI: *AsmInfo_, MII: State_.getInstrInfo(),
23 MRI: State_.getRegInfo()));
24
25 Context_ = std::make_unique<MCContext>(
26 args: Triple, args: AsmInfo_.get(), args: &State_.getRegInfo(), args: &State_.getSubtargetInfo());
27 Disasm_.reset(p: TM.getTarget().createMCDisassembler(STI: State_.getSubtargetInfo(),
28 Ctx&: *Context_));
29 assert(Disasm_ && "cannot create MCDisassembler. missing call to "
30 "InitializeXXXTargetDisassembler ?");
31}
32
33} // namespace exegesis
34} // namespace llvm
35