1cbec9af6SAndrea Di Biagio //===--------------------- CodeEmitter.cpp ----------------------*- C++ -*-===// 2cbec9af6SAndrea Di Biagio // 3cbec9af6SAndrea Di Biagio // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4cbec9af6SAndrea Di Biagio // See https://llvm.org/LICENSE.txt for license information. 5cbec9af6SAndrea Di Biagio // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6cbec9af6SAndrea Di Biagio // 7cbec9af6SAndrea Di Biagio //===----------------------------------------------------------------------===// 8cbec9af6SAndrea Di Biagio // 9cbec9af6SAndrea Di Biagio // This file implements the CodeEmitter API. 10cbec9af6SAndrea Di Biagio // 11cbec9af6SAndrea Di Biagio //===----------------------------------------------------------------------===// 12cbec9af6SAndrea Di Biagio 13cbec9af6SAndrea Di Biagio #include "llvm/MCA/CodeEmitter.h" 14cbec9af6SAndrea Di Biagio 15cbec9af6SAndrea Di Biagio namespace llvm { 16cbec9af6SAndrea Di Biagio namespace mca { 17cbec9af6SAndrea Di Biagio getOrCreateEncodingInfo(unsigned MCID)189853d0dbSAndrea Di BiagioCodeEmitter::EncodingInfo CodeEmitter::getOrCreateEncodingInfo(unsigned MCID) { 19cbec9af6SAndrea Di Biagio EncodingInfo &EI = Encodings[MCID]; 20cbec9af6SAndrea Di Biagio if (EI.second) 21cbec9af6SAndrea Di Biagio return EI; 22cbec9af6SAndrea Di Biagio 23cbec9af6SAndrea Di Biagio SmallVector<llvm::MCFixup, 2> Fixups; 24cbec9af6SAndrea Di Biagio const MCInst &Inst = Sequence[MCID]; 25cbec9af6SAndrea Di Biagio MCInst Relaxed(Sequence[MCID]); 26cbec9af6SAndrea Di Biagio if (MAB.mayNeedRelaxation(Inst, STI)) 278bb059abSShengchen Kan MAB.relaxInstruction(Relaxed, STI); 28cbec9af6SAndrea Di Biagio 29cbec9af6SAndrea Di Biagio EI.first = Code.size(); 30*0c049ea6SAlexis Engelke MCE.encodeInstruction(Relaxed, Code, Fixups, STI); 31cbec9af6SAndrea Di Biagio EI.second = Code.size() - EI.first; 32cbec9af6SAndrea Di Biagio return EI; 33cbec9af6SAndrea Di Biagio } 34cbec9af6SAndrea Di Biagio 35cbec9af6SAndrea Di Biagio } // namespace mca 36cbec9af6SAndrea Di Biagio } // namespace llvm 37