diff options
Diffstat (limited to 'contrib/llvm/lib/Target/X86/X86EvexToVex.cpp')
-rwxr-xr-x | contrib/llvm/lib/Target/X86/X86EvexToVex.cpp | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/contrib/llvm/lib/Target/X86/X86EvexToVex.cpp b/contrib/llvm/lib/Target/X86/X86EvexToVex.cpp index bdd1ab5..6472bbb 100755 --- a/contrib/llvm/lib/Target/X86/X86EvexToVex.cpp +++ b/contrib/llvm/lib/Target/X86/X86EvexToVex.cpp @@ -20,16 +20,30 @@ //===---------------------------------------------------------------------===// #include "InstPrinter/X86InstComments.h" +#include "MCTargetDesc/X86BaseInfo.h" #include "X86.h" -#include "X86InstrBuilder.h" #include "X86InstrInfo.h" -#include "X86InstrTablesInfo.h" -#include "X86MachineFunctionInfo.h" #include "X86Subtarget.h" -#include "X86TargetMachine.h" +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/CodeGen/MachineFunction.h" +#include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/MachineInstr.h" +#include "llvm/CodeGen/MachineOperand.h" +#include "llvm/MC/MCInstrDesc.h" +#include "llvm/Pass.h" +#include <cassert> +#include <cstdint> using namespace llvm; +// Including the generated EVEX2VEX tables. +struct X86EvexToVexCompressTableEntry { + uint16_t EvexOpcode; + uint16_t VexOpcode; +}; +#include "X86GenEVEX2VEXTables.inc" + #define EVEX2VEX_DESC "Compressing EVEX instrs to VEX encoding when possible" #define EVEX2VEX_NAME "x86-evex-to-vex-compress" @@ -56,8 +70,6 @@ class EvexToVexInstPass : public MachineFunctionPass { public: static char ID; - StringRef getPassName() const override { return EVEX2VEX_DESC; } - EvexToVexInstPass() : MachineFunctionPass(ID) { initializeEvexToVexInstPassPass(*PassRegistry::getPassRegistry()); @@ -72,6 +84,8 @@ public: } } + StringRef getPassName() const override { return EVEX2VEX_DESC; } + /// Loop over all of the basic blocks, replacing EVEX instructions /// by equivalent VEX instructions when possible for reducing code size. bool runOnMachineFunction(MachineFunction &MF) override; @@ -88,13 +102,8 @@ private: }; char EvexToVexInstPass::ID = 0; -} -INITIALIZE_PASS(EvexToVexInstPass, EVEX2VEX_NAME, EVEX2VEX_DESC, false, false) - -FunctionPass *llvm::createX86EvexToVexInsts() { - return new EvexToVexInstPass(); -} +} // end anonymous namespace bool EvexToVexInstPass::runOnMachineFunction(MachineFunction &MF) { TII = MF.getSubtarget<X86Subtarget>().getInstrInfo(); @@ -125,7 +134,6 @@ void EvexToVexInstPass::AddTableEntry(EvexToVexTableType &EvexToVexTable, // For EVEX instructions that can be encoded using VEX encoding // replace them by the VEX encoding in order to reduce size. bool EvexToVexInstPass::CompressEvexToVexImpl(MachineInstr &MI) const { - // VEX format. // # of bytes: 0,2,3 1 1 0,1 0,1,2,4 0,1 // [Prefixes] [VEX] OPCODE ModR/M [SIB] [DISP] [IMM] @@ -211,3 +219,9 @@ bool EvexToVexInstPass::CompressEvexToVexImpl(MachineInstr &MI) const { MI.setAsmPrinterFlag(AC_EVEX_2_VEX); return true; } + +INITIALIZE_PASS(EvexToVexInstPass, EVEX2VEX_NAME, EVEX2VEX_DESC, false, false) + +FunctionPass *llvm::createX86EvexToVexInsts() { + return new EvexToVexInstPass(); +} |