Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
Show First 20 Lines • Show All 224 Lines • ▼ Show 20 Lines | extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAArch64Target() { | ||||
initializeFalkorMarkStridedAccessesLegacyPass(*PR); | initializeFalkorMarkStridedAccessesLegacyPass(*PR); | ||||
initializeLDTLSCleanupPass(*PR); | initializeLDTLSCleanupPass(*PR); | ||||
initializeSVEIntrinsicOptsPass(*PR); | initializeSVEIntrinsicOptsPass(*PR); | ||||
initializeAArch64SpeculationHardeningPass(*PR); | initializeAArch64SpeculationHardeningPass(*PR); | ||||
initializeAArch64SLSHardeningPass(*PR); | initializeAArch64SLSHardeningPass(*PR); | ||||
initializeAArch64StackTaggingPass(*PR); | initializeAArch64StackTaggingPass(*PR); | ||||
initializeAArch64StackTaggingPreRAPass(*PR); | initializeAArch64StackTaggingPreRAPass(*PR); | ||||
initializeAArch64LowerHomogeneousPrologEpilogPass(*PR); | initializeAArch64LowerHomogeneousPrologEpilogPass(*PR); | ||||
initializeAArch64StackTaggingPreRAPass(*PR); | |||||
} | } | ||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
// AArch64 Lowering public interface. | // AArch64 Lowering public interface. | ||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
static std::unique_ptr<TargetLoweringObjectFile> createTLOF(const Triple &TT) { | static std::unique_ptr<TargetLoweringObjectFile> createTLOF(const Triple &TT) { | ||||
if (TT.isOSBinFormatMachO()) | if (TT.isOSBinFormatMachO()) | ||||
return std::make_unique<AArch64_MachoTargetObjectFile>(); | return std::make_unique<AArch64_MachoTargetObjectFile>(); | ||||
▲ Show 20 Lines • Show All 343 Lines • ▼ Show 20 Lines | void AArch64PassConfig::addIRPasses() { | ||||
// Match interleaved memory accesses to ldN/stN intrinsics. | // Match interleaved memory accesses to ldN/stN intrinsics. | ||||
if (TM->getOptLevel() != CodeGenOpt::None) { | if (TM->getOptLevel() != CodeGenOpt::None) { | ||||
addPass(createInterleavedLoadCombinePass()); | addPass(createInterleavedLoadCombinePass()); | ||||
addPass(createInterleavedAccessPass()); | addPass(createInterleavedAccessPass()); | ||||
} | } | ||||
// Add Control Flow Guard checks. | // Add Control Flow Guard checks. | ||||
if (TM->getTargetTriple().isOSWindows()) | if (TM->getTargetTriple().isOSWindows()) { | ||||
if (TM->getTargetTriple().isWindowsArm64EC()) | |||||
addPass(createAArch64Arm64ECCallLoweringPass()); | |||||
else | |||||
addPass(createCFGuardCheckPass()); | addPass(createCFGuardCheckPass()); | ||||
} | |||||
if (TM->Options.JMCInstrument) | if (TM->Options.JMCInstrument) | ||||
addPass(createJMCInstrumenterPass()); | addPass(createJMCInstrumenterPass()); | ||||
} | } | ||||
// Pass Pipeline Configuration | // Pass Pipeline Configuration | ||||
bool AArch64PassConfig::addPreISel() { | bool AArch64PassConfig::addPreISel() { | ||||
// Run promote constant before global merge, so that the promoted constants | // Run promote constant before global merge, so that the promoted constants | ||||
▲ Show 20 Lines • Show All 236 Lines • Show Last 20 Lines |