brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 3fddf10 Raw
91 lines · cpp
1//===-- M68kInstructionSelector.cpp -----------------------------*- C++ -*-===//2//===----------------------------------------------------------------------===//3/// \file4/// This file implements the targeting of the InstructionSelector class for5/// M68k.6/// \todo This should be generated by TableGen.7//===----------------------------------------------------------------------===//8 9#include "M68kRegisterBankInfo.h"10#include "M68kSubtarget.h"11#include "M68kTargetMachine.h"12#include "llvm/CodeGen/GlobalISel/GIMatchTableExecutorImpl.h"13#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"14#include "llvm/Support/Debug.h"15 16#define DEBUG_TYPE "m68k-isel"17 18using namespace llvm;19 20#define GET_GLOBALISEL_PREDICATE_BITSET21#include "M68kGenGlobalISel.inc"22#undef GET_GLOBALISEL_PREDICATE_BITSET23 24namespace {25 26class M68kInstructionSelector : public InstructionSelector {27public:28  M68kInstructionSelector(const M68kTargetMachine &TM, const M68kSubtarget &STI,29                          const M68kRegisterBankInfo &RBI);30 31  bool select(MachineInstr &I) override;32  static const char *getName() { return DEBUG_TYPE; }33 34private:35  bool selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const;36 37  const M68kTargetMachine &TM;38  const M68kInstrInfo &TII;39  const M68kRegisterInfo &TRI;40  const M68kRegisterBankInfo &RBI;41 42#define GET_GLOBALISEL_PREDICATES_DECL43#include "M68kGenGlobalISel.inc"44#undef GET_GLOBALISEL_PREDICATES_DECL45 46#define GET_GLOBALISEL_TEMPORARIES_DECL47#include "M68kGenGlobalISel.inc"48#undef GET_GLOBALISEL_TEMPORARIES_DECL49};50 51} // end anonymous namespace52 53#define GET_GLOBALISEL_IMPL54#include "M68kGenGlobalISel.inc"55#undef GET_GLOBALISEL_IMPL56 57M68kInstructionSelector::M68kInstructionSelector(58    const M68kTargetMachine &TM, const M68kSubtarget &STI,59    const M68kRegisterBankInfo &RBI)60    : InstructionSelector(), TM(TM), TII(*STI.getInstrInfo()),61      TRI(*STI.getRegisterInfo()), RBI(RBI),62 63#define GET_GLOBALISEL_PREDICATES_INIT64#include "M68kGenGlobalISel.inc"65#undef GET_GLOBALISEL_PREDICATES_INIT66#define GET_GLOBALISEL_TEMPORARIES_INIT67#include "M68kGenGlobalISel.inc"68#undef GET_GLOBALISEL_TEMPORARIES_INIT69{70}71 72bool M68kInstructionSelector::select(MachineInstr &I) {73  // Certain non-generic instructions also need some special handling.74  if (!isPreISelGenericOpcode(I.getOpcode()))75    return true;76 77  if (selectImpl(I, *CoverageInfo))78    return true;79 80  return false;81}82 83namespace llvm {84InstructionSelector *85createM68kInstructionSelector(const M68kTargetMachine &TM,86                              const M68kSubtarget &Subtarget,87                              const M68kRegisterBankInfo &RBI) {88  return new M68kInstructionSelector(TM, Subtarget, RBI);89}90} // end namespace llvm91