AArch64LegalizerInfo.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. //===- AArch64LegalizerInfo --------------------------------------*- C++ -*-==//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. /// \file
  9. /// This file declares the targeting of the Machinelegalizer class for
  10. /// AArch64.
  11. /// \todo This should be generated by TableGen.
  12. //===----------------------------------------------------------------------===//
  13. #ifndef LLVM_LIB_TARGET_AARCH64_AARCH64MACHINELEGALIZER_H
  14. #define LLVM_LIB_TARGET_AARCH64_AARCH64MACHINELEGALIZER_H
  15. #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h"
  16. #include "llvm/CodeGen/GlobalISel/LegalizerHelper.h"
  17. #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
  18. #include "llvm/CodeGen/MachineRegisterInfo.h"
  19. namespace llvm {
  20. class AArch64Subtarget;
  21. /// This class provides the information for the target register banks.
  22. class AArch64LegalizerInfo : public LegalizerInfo {
  23. public:
  24. AArch64LegalizerInfo(const AArch64Subtarget &ST);
  25. bool legalizeCustom(LegalizerHelper &Helper, MachineInstr &MI) const override;
  26. bool legalizeIntrinsic(LegalizerHelper &Helper,
  27. MachineInstr &MI) const override;
  28. private:
  29. bool legalizeVaArg(MachineInstr &MI, MachineRegisterInfo &MRI,
  30. MachineIRBuilder &MIRBuilder) const;
  31. bool legalizeLoadStore(MachineInstr &MI, MachineRegisterInfo &MRI,
  32. MachineIRBuilder &MIRBuilder,
  33. GISelChangeObserver &Observer) const;
  34. bool legalizeShlAshrLshr(MachineInstr &MI, MachineRegisterInfo &MRI,
  35. MachineIRBuilder &MIRBuilder,
  36. GISelChangeObserver &Observer) const;
  37. bool legalizeSmallCMGlobalValue(MachineInstr &MI, MachineRegisterInfo &MRI,
  38. MachineIRBuilder &MIRBuilder,
  39. GISelChangeObserver &Observer) const;
  40. bool legalizeVectorTrunc(MachineInstr &MI, LegalizerHelper &Helper) const;
  41. bool legalizeBitfieldExtract(MachineInstr &MI, MachineRegisterInfo &MRI,
  42. LegalizerHelper &Helper) const;
  43. bool legalizeRotate(MachineInstr &MI, MachineRegisterInfo &MRI,
  44. LegalizerHelper &Helper) const;
  45. bool legalizeCTPOP(MachineInstr &MI, MachineRegisterInfo &MRI,
  46. LegalizerHelper &Helper) const;
  47. bool legalizeAtomicCmpxchg128(MachineInstr &MI, MachineRegisterInfo &MRI,
  48. LegalizerHelper &Helper) const;
  49. bool legalizeCTTZ(MachineInstr &MI, LegalizerHelper &Helper) const;
  50. bool legalizeMemOps(MachineInstr &MI, LegalizerHelper &Helper) const;
  51. const AArch64Subtarget *ST;
  52. };
  53. } // End llvm namespace.
  54. #endif