1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- //===- 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)
- : InstructionSelector(), 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
|