blob: c36d9354f3ba6f234fab670da883f96ec374a37d [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();
Kristof Beylse66bc1f2018-12-18 08:50:02 +000042FunctionPass *createAArch64SpeculationHardeningPass();
Tim Northover3b0846e2014-05-24 12:50:23 +000043FunctionPass *createAArch64LoadStoreOptimizationPass();
Abderrazek Zaafrani2c80e4c2017-12-08 00:58:49 +000044FunctionPass *createAArch64SIMDInstrOptPass();
Tim Northover3b0846e2014-05-24 12:50:23 +000045ModulePass *createAArch64PromoteConstantPass();
Jiangning Liu1a486da2014-09-05 02:55:24 +000046FunctionPass *createAArch64ConditionOptimizerPass();
James Molloy3feea9c2014-08-08 12:33:21 +000047FunctionPass *createAArch64A57FPLoadBalancing();
Bradley Smithf2a801d2014-10-13 10:12:35 +000048FunctionPass *createAArch64A53Fix835769();
Geoff Berry9962fae2017-07-18 16:14:22 +000049FunctionPass *createFalkorHWPFFixPass();
Geoff Berryb1e87142017-07-14 21:44:12 +000050FunctionPass *createFalkorMarkStridedAccessesPass();
Oliver Stannard250e5a52018-10-08 14:04:24 +000051FunctionPass *createAArch64BranchTargetsPass();
Tim Northover3b0846e2014-05-24 12:50:23 +000052
53FunctionPass *createAArch64CleanupLocalDynamicTLSPass();
54
55FunctionPass *createAArch64CollectLOHPass();
Daniel Sanders0b5293f2017-04-06 09:49:34 +000056InstructionSelector *
57createAArch64InstructionSelector(const AArch64TargetMachine &,
58 AArch64Subtarget &, AArch64RegisterBankInfo &);
Daniel Sandersc973ad12018-10-03 02:12:17 +000059FunctionPass *createAArch64PreLegalizeCombiner();
Tim Northover5dad9df2016-04-01 23:14:52 +000060
Diana Picus850043b2016-08-01 05:56:57 +000061void initializeAArch64A53Fix835769Pass(PassRegistry&);
62void initializeAArch64A57FPLoadBalancingPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000063void initializeAArch64AdvSIMDScalarPass(PassRegistry&);
Oliver Stannard250e5a52018-10-08 14:04:24 +000064void initializeAArch64BranchTargetsPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000065void initializeAArch64CollectLOHPass(PassRegistry&);
Chad Rosier6db9ff62017-06-23 19:20:12 +000066void initializeAArch64CondBrTuningPass(PassRegistry &);
Tim Northover1c353412018-10-24 20:19:09 +000067void initializeAArch64CompressJumpTablesPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000068void initializeAArch64ConditionalComparesPass(PassRegistry&);
69void initializeAArch64ConditionOptimizerPass(PassRegistry&);
70void initializeAArch64DeadRegisterDefinitionsPass(PassRegistry&);
Tim Northover5dad9df2016-04-01 23:14:52 +000071void initializeAArch64ExpandPseudoPass(PassRegistry&);
Kristof Beylse66bc1f2018-12-18 08:50:02 +000072void initializeAArch64SpeculationHardeningPass(PassRegistry&);
Geoff Berry24c81e82016-07-20 21:45:58 +000073void initializeAArch64LoadStoreOptPass(PassRegistry&);
Abderrazek Zaafrani2c80e4c2017-12-08 00:58:49 +000074void initializeAArch64SIMDInstrOptPass(PassRegistry&);
Daniel Sandersc973ad12018-10-03 02:12:17 +000075void initializeAArch64PreLegalizerCombinerPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000076void initializeAArch64PromoteConstantPass(PassRegistry&);
77void initializeAArch64RedundantCopyEliminationPass(PassRegistry&);
78void initializeAArch64StorePairSuppressPass(PassRegistry&);
Geoff Berry9962fae2017-07-18 16:14:22 +000079void initializeFalkorHWPFFixPass(PassRegistry&);
Geoff Berryb1e87142017-07-14 21:44:12 +000080void initializeFalkorMarkStridedAccessesLegacyPass(PassRegistry&);
Diana Picus850043b2016-08-01 05:56:57 +000081void initializeLDTLSCleanupPass(PassRegistry&);
Tim Northover3b0846e2014-05-24 12:50:23 +000082} // end namespace llvm
83
84#endif