Lines Matching +full:big +full:- +full:endian +full:- +full:desc

1 //===-- AArch64TargetMachine.cpp - Define TargetMachine for AArch64 -------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 //===----------------------------------------------------------------------===//
61 static cl::opt<bool> EnableCCMP("aarch64-enable-ccmp",
62 cl::desc("Enable the CCMP formation pass"),
66 EnableCondBrTuning("aarch64-enable-cond-br-tune",
67 cl::desc("Enable the conditional branch tuning pass"),
71 "aarch64-enable-copy-propagation",
72 cl::desc("Enable the copy propagation with AArch64 copy instr"),
75 static cl::opt<bool> EnableMCR("aarch64-enable-mcr",
76 cl::desc("Enable the machine combiner pass"),
79 static cl::opt<bool> EnableStPairSuppress("aarch64-enable-stp-suppress",
80 cl::desc("Suppress STP for AArch64"),
84 "aarch64-enable-simd-scalar",
85 cl::desc("Enable use of AdvSIMD scalar integer instructions"),
89 EnablePromoteConstant("aarch64-enable-promote-const",
90 cl::desc("Enable the promote constant pass"),
94 "aarch64-enable-collect-loh",
95 cl::desc("Enable the pass that emits the linker optimization hints (LOH)"),
99 EnableDeadRegisterElimination("aarch64-enable-dead-defs", cl::Hidden,
100 cl::desc("Enable the pass that removes dead"
107 "aarch64-enable-copyelim",
108 cl::desc("Enable the redundant copy elimination pass"), cl::init(true),
111 static cl::opt<bool> EnableLoadStoreOpt("aarch64-enable-ldst-opt",
112 cl::desc("Enable the load/store pair"
117 "aarch64-enable-atomic-cfg-tidy", cl::Hidden,
118 cl::desc("Run SimplifyCFG after expanding atomic operations"
119 " to make use of cmpxchg flow-based information"),
123 EnableEarlyIfConversion("aarch64-enable-early-ifcvt", cl::Hidden,
124 cl::desc("Run early if-conversion"),
128 EnableCondOpt("aarch64-enable-condopt",
129 cl::desc("Enable the condition optimizer pass"),
133 EnableGEPOpt("aarch64-enable-gep-opt", cl::Hidden,
134 cl::desc("Enable optimizations on complex GEPs"),
138 EnableSelectOpt("aarch64-select-opt", cl::Hidden,
139 cl::desc("Enable select to branch optimizations"),
143 BranchRelaxation("aarch64-enable-branch-relax", cl::Hidden, cl::init(true),
144 cl::desc("Relax out of range conditional branches"));
147 "aarch64-enable-compress-jump-tables", cl::Hidden, cl::init(true),
148 cl::desc("Use smallest entry possible for jump tables"));
152 EnableGlobalMerge("aarch64-enable-global-merge", cl::Hidden,
153 cl::desc("Enable the global merge pass"));
156 EnableLoopDataPrefetch("aarch64-enable-loop-data-prefetch", cl::Hidden,
157 cl::desc("Enable the loop data prefetch pass"),
161 "aarch64-enable-global-isel-at-O", cl::Hidden,
162 cl::desc("Enable GlobalISel at or below an opt level (-1 to disable)"),
166 EnableSVEIntrinsicOpts("aarch64-enable-sve-intrinsic-opts", cl::Hidden,
167 cl::desc("Enable SVE intrinsic opts"),
170 static cl::opt<bool> EnableFalkorHWPFFix("aarch64-enable-falkor-hwpf-fix",
174 EnableBranchTargets("aarch64-enable-branch-targets", cl::Hidden,
175 cl::desc("Enable the AArch64 branch target pass"),
179 "aarch64-sve-vector-bits-max",
180 cl::desc("Assume SVE vector registers are at most this big, "
185 "aarch64-sve-vector-bits-min",
186 cl::desc("Assume SVE vector registers are at least this big, "
191 "force-streaming",
192 cl::desc("Force the use of streaming code for all functions"),
196 "force-streaming-compatible",
197 cl::desc("Force the use of streaming-compatible code for all functions"),
203 "aarch64-enable-gisel-ldst-prelegal",
204 cl::desc("Enable GlobalISel's pre-legalizer load/store optimization pass"),
208 "aarch64-enable-gisel-ldst-postlegal",
209 cl::desc("Enable GlobalISel's post-legalizer load/store optimization pass"),
213 EnableSinkFold("aarch64-enable-sink-fold",
214 cl::desc("Enable sinking and folding of instruction copies"),
218 EnableMachinePipeliner("aarch64-enable-pipeliner",
219 cl::desc("Enable Machine Pipeliner for AArch64"),
269 //===----------------------------------------------------------------------===//
271 //===----------------------------------------------------------------------===//
287 return "e-m:o-p:32:32-i64:64-i128:128-n32:64-S128-Fn32";
288 return "e-m:o-i64:64-i128:128-n32:64-S128-Fn32";
291 return "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128-Fn32";
292 std::string Endian = LittleEndian ? "e" : "E";
293 std::string Ptr32 = TT.getEnvironment() == Triple::GNUILP32 ? "-p:32:32" : "";
294 return Endian + "-m:e" + Ptr32 +
295 "-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32";
300 return "apple-a12";
358 this->Options.TrapUnreachable = true;
359 this->Options.NoTrapAfterNoreturn = true;
362 if (getMCAsmInfo()->usesWindowsCFI()) {
364 // exception-handling region (function, funclet, try block, etc.)
369 this->Options.TrapUnreachable = true;
372 if (this->Options.TLSSize == 0) // default
373 this->Options.TLSSize = 24;
376 this->Options.TLSSize > 32)
378 this->Options.TLSSize = 32;
379 else if (getCodeModel() == CodeModel::Tiny && this->Options.TLSSize > 24)
381 this->Options.TLSSize = 24;
403 if (!getMCAsmInfo()->usesWindowsCFI())
411 Attribute CPUAttr = F.getFnAttribute("target-cpu");
412 Attribute TuneAttr = F.getFnAttribute("tune-cpu");
413 Attribute FSAttr = F.getFnAttribute("target-features");
468 assert((!IsStreaming || I->hasSME()) && "Expected SME to be available");
507 const AArch64Subtarget &ST = C->MF->getSubtarget<AArch64Subtarget>();
509 DAG->addMutation(createLoadClusterDAGMutation(DAG->TII, DAG->TRI));
510 DAG->addMutation(createStoreClusterDAGMutation(DAG->TII, DAG->TRI));
512 DAG->addMutation(createAArch64MacroFusionDAGMutation());
518 const AArch64Subtarget &ST = C->MF->getSubtarget<AArch64Subtarget>();
525 DAG->addMutation(createAArch64MacroFusionDAGMutation());
575 return getStandardCSEConfigForOpt(TM->getOptLevel());
585 TM->getOptLevel() == CodeGenOptLevel::Aggressive)
589 // determine whether it succeeded. We can exploit existing control-flow in
591 if (TM->getOptLevel() != CodeGenOptLevel::None && EnableAtomicTidy)
604 if (TM->getOptLevel() != CodeGenOptLevel::None) {
631 /*IsOptNone=*/TM->getOptLevel() == CodeGenOptLevel::None));
634 if (TM->getOptLevel() >= CodeGenOptLevel::Default)
638 if (TM->getOptLevel() != CodeGenOptLevel::None) {
644 // changes for the calling convention or that require the lazy-saving
649 if (TM->getTargetTriple().isOSWindows()) {
650 if (TM->getTargetTriple().isWindowsArm64EC())
656 if (TM->Options.JMCInstrument)
664 if (TM->getOptLevel() != CodeGenOptLevel::None && EnablePromoteConstant)
669 if ((TM->getOptLevel() != CodeGenOptLevel::None &&
673 (TM->getOptLevel() < CodeGenOptLevel::Aggressive) &&
676 // Merging of extern globals is enabled by default on non-Mach-O as we
677 // expect it to be generally either beneficial or harmless. On Mach-O it
680 bool MergeExternalByDefault = !TM->getTargetTriple().isOSBinFormatMachO();
703 // For ELF, cleanup any local-dynamic TLS accesses (i.e. combine as many
705 if (TM->getTargetTriple().isOSBinFormatELF() &&
760 if (TM->getOptLevel() != CodeGenOptLevel::None)
778 if (TM->getOptLevel() != CodeGenOptLevel::None)
785 if (TM->getOptLevel() != CodeGenOptLevel::None &&
790 if (TM->getOptLevel() != CodeGenOptLevel::None && EnableAdvSIMDScalar) {
796 if (TM->getOptLevel() != CodeGenOptLevel::None && EnableMachinePipeliner)
802 if (TM->getOptLevel() != CodeGenOptLevel::None &&
806 if (TM->getOptLevel() != CodeGenOptLevel::None && usingDefaultRegAlloc())
818 if (TM->getOptLevel() != CodeGenOptLevel::None) {
832 if (TM->getOptLevel() != CodeGenOptLevel::None) {
842 if (TM->getOptLevel() >= CodeGenOptLevel::Aggressive && EnableLoadStoreOpt)
845 if (TM->getOptLevel() >= CodeGenOptLevel::Aggressive &&
851 if (TM->getTargetTriple().isOSWindows()) {
858 if (TM->getOptLevel() != CodeGenOptLevel::None && EnableCollectLOH &&
859 TM->getTargetTriple().isOSBinFormatMachO())
873 if (TM->getOptLevel() != CodeGenOptLevel::None && EnableCompressJumpTables)
911 MF.getInfo<AArch64FunctionInfo>()->initializeBaseYamlFields(YamlMFI);