12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //===- 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
|