//===- PPCInstructionSelector.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 // //===----------------------------------------------------------------------===// /// \file /// This file implements the targeting of the InstructionSelector class for /// PowerPC. //===----------------------------------------------------------------------===// #include "PPCInstrInfo.h" #include "PPCRegisterBankInfo.h" #include "PPCSubtarget.h" #include "PPCTargetMachine.h" #include "llvm/CodeGen/GlobalISel/InstructionSelector.h" #include "llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/IR/IntrinsicsPowerPC.h" #include "llvm/Support/Debug.h" #define DEBUG_TYPE "ppc-gisel" using namespace llvm; namespace { #define GET_GLOBALISEL_PREDICATE_BITSET #include "PPCGenGlobalISel.inc" #undef GET_GLOBALISEL_PREDICATE_BITSET class PPCInstructionSelector : public InstructionSelector { public: PPCInstructionSelector(const PPCTargetMachine &TM, const PPCSubtarget &STI, const PPCRegisterBankInfo &RBI); bool select(MachineInstr &I) override; static const char *getName() { return DEBUG_TYPE; } private: /// tblgen generated 'select' implementation that is used as the initial /// selector for the patterns that do not require complex C++. bool selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const; const PPCInstrInfo &TII; const PPCRegisterInfo &TRI; const PPCRegisterBankInfo &RBI; #define GET_GLOBALISEL_PREDICATES_DECL #include "PPCGenGlobalISel.inc" #undef GET_GLOBALISEL_PREDICATES_DECL #define GET_GLOBALISEL_TEMPORARIES_DECL #include "PPCGenGlobalISel.inc" #undef GET_GLOBALISEL_TEMPORARIES_DECL }; } // end anonymous namespace #define GET_GLOBALISEL_IMPL #include "PPCGenGlobalISel.inc" #undef GET_GLOBALISEL_IMPL PPCInstructionSelector::PPCInstructionSelector(const PPCTargetMachine &TM, const PPCSubtarget &STI, const PPCRegisterBankInfo &RBI) : TII(*STI.getInstrInfo()), TRI(*STI.getRegisterInfo()), RBI(RBI), #define GET_GLOBALISEL_PREDICATES_INIT #include "PPCGenGlobalISel.inc" #undef GET_GLOBALISEL_PREDICATES_INIT #define GET_GLOBALISEL_TEMPORARIES_INIT #include "PPCGenGlobalISel.inc" #undef GET_GLOBALISEL_TEMPORARIES_INIT { } bool PPCInstructionSelector::select(MachineInstr &I) { if (selectImpl(I, *CoverageInfo)) return true; return false; } namespace llvm { InstructionSelector * createPPCInstructionSelector(const PPCTargetMachine &TM, const PPCSubtarget &Subtarget, const PPCRegisterBankInfo &RBI) { return new PPCInstructionSelector(TM, Subtarget, RBI); } } // end namespace llvm