xref: /llvm-project/llvm/tools/llvm-exegesis/lib/DisassemblerHelper.cpp (revision 39fc67b8af707f6bdcbcfbec1e17f14ffbaeecb8)
1*39fc67b8SPavel Kosov //===-- DisassemblerHelper.cpp ----------------------------------*- C++ -*-===//
2*39fc67b8SPavel Kosov //
3*39fc67b8SPavel Kosov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*39fc67b8SPavel Kosov // See https://llvm.org/LICENSE.txt for license information.
5*39fc67b8SPavel Kosov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*39fc67b8SPavel Kosov //
7*39fc67b8SPavel Kosov //===----------------------------------------------------------------------===//
8*39fc67b8SPavel Kosov 
9*39fc67b8SPavel Kosov #include "DisassemblerHelper.h"
10*39fc67b8SPavel Kosov 
11*39fc67b8SPavel Kosov #include "llvm/MC/TargetRegistry.h"
12*39fc67b8SPavel Kosov 
13*39fc67b8SPavel Kosov namespace llvm {
14*39fc67b8SPavel Kosov namespace exegesis {
15*39fc67b8SPavel Kosov 
DisassemblerHelper(const LLVMState & State)16*39fc67b8SPavel Kosov DisassemblerHelper::DisassemblerHelper(const LLVMState &State) : State_(State) {
17*39fc67b8SPavel Kosov   MCTargetOptions MCOptions;
18*39fc67b8SPavel Kosov   const auto &TM = State.getTargetMachine();
19*39fc67b8SPavel Kosov   const auto &Triple = TM.getTargetTriple();
20*39fc67b8SPavel Kosov   AsmInfo_.reset(TM.getTarget().createMCAsmInfo(State_.getRegInfo(),
21*39fc67b8SPavel Kosov                                                 Triple.str(), MCOptions));
22*39fc67b8SPavel Kosov   InstPrinter_.reset(TM.getTarget().createMCInstPrinter(
23*39fc67b8SPavel Kosov       Triple, 0 /*default variant*/, *AsmInfo_, State_.getInstrInfo(),
24*39fc67b8SPavel Kosov       State_.getRegInfo()));
25*39fc67b8SPavel Kosov 
26*39fc67b8SPavel Kosov   Context_ = std::make_unique<MCContext>(
27*39fc67b8SPavel Kosov       Triple, AsmInfo_.get(), &State_.getRegInfo(), &State_.getSubtargetInfo());
28*39fc67b8SPavel Kosov   Disasm_.reset(TM.getTarget().createMCDisassembler(State_.getSubtargetInfo(),
29*39fc67b8SPavel Kosov                                                     *Context_));
30*39fc67b8SPavel Kosov   assert(Disasm_ && "cannot create MCDisassembler. missing call to "
31*39fc67b8SPavel Kosov                     "InitializeXXXTargetDisassembler ?");
32*39fc67b8SPavel Kosov }
33*39fc67b8SPavel Kosov 
34*39fc67b8SPavel Kosov } // namespace exegesis
35*39fc67b8SPavel Kosov } // namespace llvm
36