mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
44ebb7579c
This is based on the assumption that most simulated instructions don't define more than one or two registers. This is true for example on x86, where most instruction definitions don't declare more than one register write. The default code region size has been increased from 8 to 16. This is based on the assumption that, for small microbenchmarks, the typical code snippet size is often less than 16 instructions. mca::Instruction now uses bitfields to pack flags. No functional change intended.
37 lines
1.1 KiB
C++
37 lines
1.1 KiB
C++
//===--------------------- 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
|