| //===--------------------- CodeEmitter.cpp ----------------------*- C++ -*-===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file implements the CodeEmitter API. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/MCA/CodeEmitter.h" | |
| namespace llvm { | |
| namespace mca { | |
| CodeEmitter::EncodingInfo CodeEmitter::getOrCreateEncodingInfo(unsigned MCID) { | |
| EncodingInfo &EI = Encodings[MCID]; | |
| if (EI.second) | |
| return EI; | |
| SmallVector<llvm::MCFixup, 2> Fixups; | |
| const MCInst &Inst = Sequence[MCID]; | |
| MCInst Relaxed(Sequence[MCID]); | |
| if (MAB.mayNeedRelaxation(Inst, STI)) | |
| MAB.relaxInstruction(Relaxed, STI); | |
| EI.first = Code.size(); | |
| MCE.encodeInstruction(Relaxed, VecOS, Fixups, STI); | |
| EI.second = Code.size() - EI.first; | |
| return EI; | |
| } | |
| } // namespace mca | |
| } // namespace llvm |