Line data Source code
1 : //===- AArch64InstructionSelector --------------------------------*- C++ -*-==//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 : /// \file
10 : /// This file declares the targeting of the InstructionSelector class for
11 : /// AArch64.
12 : //===----------------------------------------------------------------------===//
13 :
14 : #ifdef LLVM_BUILD_GLOBAL_ISEL
15 :
16 : #ifndef LLVM_LIB_TARGET_AARCH64_AARCH64INSTRUCTIONSELECTOR_H
17 : #define LLVM_LIB_TARGET_AARCH64_AARCH64INSTRUCTIONSELECTOR_H
18 :
19 : #include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
20 : #include "llvm/CodeGen/MachineOperand.h"
21 :
22 : namespace llvm {
23 :
24 : class AArch64InstrInfo;
25 : class AArch64RegisterBankInfo;
26 : class AArch64RegisterInfo;
27 : class AArch64Subtarget;
28 : class AArch64TargetMachine;
29 : class MachineOperand;
30 :
31 : class MachineFunction;
32 : class MachineRegisterInfo;
33 :
34 1063 : class AArch64InstructionSelector : public InstructionSelector {
35 : public:
36 : AArch64InstructionSelector(const AArch64TargetMachine &TM,
37 : const AArch64Subtarget &STI,
38 : const AArch64RegisterBankInfo &RBI);
39 :
40 : bool select(MachineInstr &I) const override;
41 :
42 : private:
43 : /// tblgen-erated 'select' implementation, used as the initial selector for
44 : /// the patterns that don't require complex C++.
45 : bool selectImpl(MachineInstr &I) const;
46 :
47 : bool selectVaStartAAPCS(MachineInstr &I, MachineFunction &MF,
48 : MachineRegisterInfo &MRI) const;
49 : bool selectVaStartDarwin(MachineInstr &I, MachineFunction &MF,
50 : MachineRegisterInfo &MRI) const;
51 :
52 : bool selectCompareBranch(MachineInstr &I, MachineFunction &MF,
53 : MachineRegisterInfo &MRI) const;
54 :
55 : bool selectArithImmed(MachineOperand &Root, MachineOperand &Result1,
56 : MachineOperand &Result2) const;
57 :
58 : const AArch64TargetMachine &TM;
59 : const AArch64Subtarget &STI;
60 : const AArch64InstrInfo &TII;
61 : const AArch64RegisterInfo &TRI;
62 : const AArch64RegisterBankInfo &RBI;
63 :
64 : // We declare the temporaries used by selectImpl() in the class to minimize the
65 : // cost of constructing placeholder values.
66 : #define GET_GLOBALISEL_TEMPORARIES_DECL
67 : #include "AArch64GenGlobalISel.inc"
68 : #undef GET_GLOBALISEL_TEMPORARIES_DECL
69 : };
70 :
71 : } // end namespace llvm
72 :
73 : #endif // LLVM_LIB_TARGET_AARCH64_AARCH64INSTRUCTIONSELECTOR_H
74 : #endif // LLVM_BUILD_GLOBAL_ISEL
|