xref: /llvm-project/llvm/tools/llvm-exegesis/lib/DisassemblerHelper.cpp (revision 39fc67b8af707f6bdcbcfbec1e17f14ffbaeecb8)
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 
13 namespace llvm {
14 namespace exegesis {
15 
DisassemblerHelper(const LLVMState & State)16 DisassemblerHelper::DisassemblerHelper(const LLVMState &State) : State_(State) {
17   MCTargetOptions MCOptions;
18   const auto &TM = State.getTargetMachine();
19   const auto &Triple = TM.getTargetTriple();
20   AsmInfo_.reset(TM.getTarget().createMCAsmInfo(State_.getRegInfo(),
21                                                 Triple.str(), MCOptions));
22   InstPrinter_.reset(TM.getTarget().createMCInstPrinter(
23       Triple, 0 /*default variant*/, *AsmInfo_, State_.getInstrInfo(),
24       State_.getRegInfo()));
25 
26   Context_ = std::make_unique<MCContext>(
27       Triple, AsmInfo_.get(), &State_.getRegInfo(), &State_.getSubtargetInfo());
28   Disasm_.reset(TM.getTarget().createMCDisassembler(State_.getSubtargetInfo(),
29                                                     *Context_));
30   assert(Disasm_ && "cannot create MCDisassembler. missing call to "
31                     "InitializeXXXTargetDisassembler ?");
32 }
33 
34 } // namespace exegesis
35 } // namespace llvm
36