AArch64LegalizerInfo.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 legalizeShuffleVector(MachineInstr &MI, LegalizerHelper &Helper) const;
  42. bool legalizeBitfieldExtract(MachineInstr &MI, MachineRegisterInfo &MRI,
  43. LegalizerHelper &Helper) const;
  44. bool legalizeRotate(MachineInstr &MI, MachineRegisterInfo &MRI,
  45. LegalizerHelper &Helper) const;
  46. bool legalizeCTPOP(MachineInstr &MI, MachineRegisterInfo &MRI,
  47. LegalizerHelper &Helper) const;
  48. bool legalizeAtomicCmpxchg128(MachineInstr &MI, MachineRegisterInfo &MRI,
  49. LegalizerHelper &Helper) const;
  50. bool legalizeCTTZ(MachineInstr &MI, LegalizerHelper &Helper) const;
  51. bool legalizeMemOps(MachineInstr &MI, LegalizerHelper &Helper) const;
  52. bool legalizeFCopySign(MachineInstr &MI, LegalizerHelper &Helper) const;
  53. const AArch64Subtarget *ST;
  54. };
  55. } // End llvm namespace.
  56. #endif