blob: 2f0d0bf346d6db04127fc2857bf25c2c7d3f72a3 [file] [log] [blame]
Tim Northover3b0846e2014-05-24 12:50:23 +00001//==-- AArch64.h - Top-level interface for AArch64 --------------*- 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//
10// This file contains the entry points for global functions defined in the LLVM
11// AArch64 back-end.
12//
13//===----------------------------------------------------------------------===//
14
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000015#ifndef LLVM_LIB_TARGET_AARCH64_AARCH64_H
16#define LLVM_LIB_TARGET_AARCH64_AARCH64_H
Tim Northover3b0846e2014-05-24 12:50:23 +000017
Tim Northover3b0846e2014-05-24 12:50:23 +000018#include "MCTargetDesc/AArch64MCTargetDesc.h"
Benjamin Kramer1f8930e2014-07-25 11:42:14 +000019#include "Utils/AArch64BaseInfo.h"
Tim Northover3b0846e2014-05-24 12:50:23 +000020#include "llvm/Support/DataTypes.h"
Benjamin Kramer1f8930e2014-07-25 11:42:14 +000021#include "llvm/Target/TargetMachine.h"
Tim Northover3b0846e2014-05-24 12:50:23 +000022
23namespace llvm {
24
Daniel Sanders0b5293f2017-04-06 09:49:34 +000025class AArch64RegisterBankInfo;
26class AArch64Subtarget;
Tim Northover3b0846e2014-05-24 12:50:23 +000027class AArch64TargetMachine;
28class FunctionPass;
Daniel Sanders0b5293f2017-04-06 09:49:34 +000029class InstructionSelector;
Tim Northover3b0846e2014-05-24 12:50:23 +000030class MachineFunctionPass;
31
32FunctionPass *createAArch64DeadRegisterDefinitions();
Jun Bum Limb389d9b2016-02-16 20:02:39 +000033FunctionPass *createAArch64RedundantCopyEliminationPass();
Chad Rosier6db9ff62017-06-23 19:20:12 +000034FunctionPass *createAArch64CondBrTuning();
Tim Northover1c353412018-10-24 20:19:09 +000035FunctionPass *createAArch64CompressJumpTablesPass();
Tim Northover3b0846e2014-05-24 12:50:23 +000036FunctionPass *createAArch64ConditionalCompares();
37FunctionPass *createAArch64AdvSIMDScalar();
Tim Northover3b0846e2014-05-24 12:50:23 +000038FunctionPass *createAArch64ISelDag(AArch64TargetMachine &TM,
39 CodeGenOpt::Level OptLevel);
40FunctionPass *createAArch64StorePairSuppressPass();
41FunctionPass *createAArch64ExpandPseudoPass();
42FunctionPass *createAArch64LoadStoreOptimizationPass();
Abderrazek Zaafrani2c80e4c2017-12-08 00:58:49 +000043FunctionPass *createAArch64SIMDInstrOptPass();
Tim Northover3b0846e2014-05-24 12:50:23 +000044ModulePass *createAArch64PromoteConstantPass();
Jiangning Liu1a486da2014-09-05 02:55:24 +000045FunctionPass *createAArch64ConditionOptimizerPass();
James Molloy3feea9c2014-08-08 12:33:21 +000046FunctionPass *createAArch64A57FPLoadBalancing();
Bradley Smithf2a801d2014-10-13 10:12:35 +000047FunctionPass *createAArch64A53Fix835769();
Geoff Berry9962fae2017-07-18 16:14:22 +000048FunctionPass *createFalkorHWPFFixPass();
Geoff Berryb1e87142017-07-14 21:44:12 +000049FunctionPass *createFalkorMarkStridedAccessesPass();
Oliver Stannard250e5a52018-10-08 14:04:24 +000050FunctionPass *createAArch64BranchTargetsPass();
Tim Northover3b0846e2014-05-24 12:50:23 +000051
52FunctionPass *createAArch64CleanupLocalDynamicTLSPass();
53
54FunctionPass *createAArch64CollectLOHPass();
Daniel Sanders0b5293f2017-04-06 09:49:34 +000055InstructionSelector *
56createAArch64InstructionSelector(const AArch64TargetMachine &,
57 AArch64Subtarget &, AArch64RegisterBankInfo &);
Daniel Sandersc973ad12018-10-03 02:12:17 +000058FunctionPass *createAArch64PreLegalizeCombiner();
Tim Northover5dad9df2016-04-01 23:14:52 +000059
Diana Picus850043b2016-08-01 05:56:57 +000060void initializeAArch64A53Fix835769Pass(PassRegistry&);
61void initializeAArch64A57FPLoadBalancingPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000062void initializeAArch64AdvSIMDScalarPass(PassRegistry&);
Oliver Stannard250e5a52018-10-08 14:04:24 +000063void initializeAArch64BranchTargetsPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000064void initializeAArch64CollectLOHPass(PassRegistry&);
Chad Rosier6db9ff62017-06-23 19:20:12 +000065void initializeAArch64CondBrTuningPass(PassRegistry &);
Tim Northover1c353412018-10-24 20:19:09 +000066void initializeAArch64CompressJumpTablesPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000067void initializeAArch64ConditionalComparesPass(PassRegistry&);
68void initializeAArch64ConditionOptimizerPass(PassRegistry&);
69void initializeAArch64DeadRegisterDefinitionsPass(PassRegistry&);
Tim Northover5dad9df2016-04-01 23:14:52 +000070void initializeAArch64ExpandPseudoPass(PassRegistry&);
Geoff Berry24c81e82016-07-20 21:45:58 +000071void initializeAArch64LoadStoreOptPass(PassRegistry&);
Abderrazek Zaafrani2c80e4c2017-12-08 00:58:49 +000072void initializeAArch64SIMDInstrOptPass(PassRegistry&);
Daniel Sandersc973ad12018-10-03 02:12:17 +000073void initializeAArch64PreLegalizerCombinerPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000074void initializeAArch64PromoteConstantPass(PassRegistry&);
75void initializeAArch64RedundantCopyEliminationPass(PassRegistry&);
76void initializeAArch64StorePairSuppressPass(PassRegistry&);
Geoff Berry9962fae2017-07-18 16:14:22 +000077void initializeFalkorHWPFFixPass(PassRegistry&);
Geoff Berryb1e87142017-07-14 21:44:12 +000078void initializeFalkorMarkStridedAccessesLegacyPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000079void initializeLDTLSCleanupPass(PassRegistry&);
Tim Northover3b0846e2014-05-24 12:50:23 +000080} // end namespace llvm
81
82#endif