aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/lib/CodeGen/TargetPassConfig.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2023-04-14 21:41:27 +0000
committerDimitry Andric <dim@FreeBSD.org>2023-06-22 18:20:56 +0000
commitbdd1243df58e60e85101c09001d9812a789b6bc4 (patch)
treea1ce621c7301dd47ba2ddc3b8eaa63b441389481 /contrib/llvm-project/llvm/lib/CodeGen/TargetPassConfig.cpp
parent781624ca2d054430052c828ba8d2c2eaf2d733e7 (diff)
parente3b557809604d036af6e00c60f012c2025b59a5e (diff)
Diffstat (limited to 'contrib/llvm-project/llvm/lib/CodeGen/TargetPassConfig.cpp')
-rw-r--r--contrib/llvm-project/llvm/lib/CodeGen/TargetPassConfig.cpp57
1 files changed, 18 insertions, 39 deletions
diff --git a/contrib/llvm-project/llvm/lib/CodeGen/TargetPassConfig.cpp b/contrib/llvm-project/llvm/lib/CodeGen/TargetPassConfig.cpp
index 0bd229f4fc68..3127328c363e 100644
--- a/contrib/llvm-project/llvm/lib/CodeGen/TargetPassConfig.cpp
+++ b/contrib/llvm-project/llvm/lib/CodeGen/TargetPassConfig.cpp
@@ -16,8 +16,6 @@
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/BasicAliasAnalysis.h"
-#include "llvm/Analysis/CFLAndersAliasAnalysis.h"
-#include "llvm/Analysis/CFLSteensAliasAnalysis.h"
#include "llvm/Analysis/CallGraphSCCPass.h"
#include "llvm/Analysis/ScopedNoAliasAA.h"
#include "llvm/Analysis/TargetTransformInfo.h"
@@ -49,6 +47,7 @@
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils.h"
#include <cassert>
+#include <optional>
#include <string>
using namespace llvm;
@@ -208,18 +207,6 @@ static cl::opt<bool> MISchedPostRA(
static cl::opt<bool> EarlyLiveIntervals("early-live-intervals", cl::Hidden,
cl::desc("Run live interval analysis earlier in the pipeline"));
-// Experimental option to use CFL-AA in codegen
-static cl::opt<CFLAAType> UseCFLAA(
- "use-cfl-aa-in-codegen", cl::init(CFLAAType::None), cl::Hidden,
- cl::desc("Enable the new, experimental CFL alias analysis in CodeGen"),
- cl::values(clEnumValN(CFLAAType::None, "none", "Disable CFL-AA"),
- clEnumValN(CFLAAType::Steensgaard, "steens",
- "Enable unification-based CFL-AA"),
- clEnumValN(CFLAAType::Andersen, "anders",
- "Enable inclusion-based CFL-AA"),
- clEnumValN(CFLAAType::Both, "both",
- "Enable both variants of CFL-AA")));
-
/// Option names for limiting the codegen pipeline.
/// Those are used in error reporting and we didn't want
/// to duplicate their names all over the place.
@@ -339,8 +326,8 @@ static IdentifyingPassPtr overridePass(AnalysisID StandardID,
static std::string getFSProfileFile(const TargetMachine *TM) {
if (!FSProfileFile.empty())
return FSProfileFile.getValue();
- const Optional<PGOOptions> &PGOOpt = TM->getPGOOption();
- if (PGOOpt == None || PGOOpt->Action != PGOOptions::SampleUse)
+ const std::optional<PGOOptions> &PGOOpt = TM->getPGOOption();
+ if (PGOOpt == std::nullopt || PGOOpt->Action != PGOOptions::SampleUse)
return std::string();
return PGOOpt->ProfileFile;
}
@@ -350,8 +337,8 @@ static std::string getFSProfileFile(const TargetMachine *TM) {
static std::string getFSRemappingFile(const TargetMachine *TM) {
if (!FSRemappingFile.empty())
return FSRemappingFile.getValue();
- const Optional<PGOOptions> &PGOOpt = TM->getPGOOption();
- if (PGOOpt == None || PGOOpt->Action != PGOOptions::SampleUse)
+ const std::optional<PGOOptions> &PGOOpt = TM->getPGOOption();
+ if (PGOOpt == std::nullopt || PGOOpt->Action != PGOOptions::SampleUse)
return std::string();
return PGOOpt->ProfileRemappingFile;
}
@@ -492,7 +479,6 @@ CGPassBuilderOption llvm::getCGPassBuilderOption() {
SET_BOOLEAN_OPTION(EnableImplicitNullChecks)
SET_BOOLEAN_OPTION(EnableMachineOutliner)
SET_BOOLEAN_OPTION(MISchedPostRA)
- SET_BOOLEAN_OPTION(UseCFLAA)
SET_BOOLEAN_OPTION(DisableMergeICmps)
SET_BOOLEAN_OPTION(DisableLSR)
SET_BOOLEAN_OPTION(DisableConstantHoisting)
@@ -548,7 +534,7 @@ static void registerPartialPipelineCallback(PassInstrumentationCallbacks &PIC,
PIC.registerShouldRunOptionalPassCallback(
[=, EnableCurrent = StartBefore.empty() && StartAfter.empty(),
- EnableNext = Optional<bool>(), StartBeforeCount = 0u,
+ EnableNext = std::optional<bool>(), StartBeforeCount = 0u,
StartAfterCount = 0u, StopBeforeCount = 0u,
StopAfterCount = 0u](StringRef P, Any) mutable {
bool StartBeforePass = !StartBefore.empty() && P.contains(StartBefore);
@@ -857,21 +843,6 @@ void TargetPassConfig::addIRPasses() {
addPass(createVerifierPass());
if (getOptLevel() != CodeGenOpt::None) {
- switch (UseCFLAA) {
- case CFLAAType::Steensgaard:
- addPass(createCFLSteensAAWrapperPass());
- break;
- case CFLAAType::Andersen:
- addPass(createCFLAndersAAWrapperPass());
- break;
- case CFLAAType::Both:
- addPass(createCFLAndersAAWrapperPass());
- addPass(createCFLSteensAAWrapperPass());
- break;
- default:
- break;
- }
-
// Basic AliasAnalysis support.
// Add TypeBasedAliasAnalysis before BasicAliasAnalysis so that
// BasicAliasAnalysis wins if they disagree. This is intended to help
@@ -904,7 +875,7 @@ void TargetPassConfig::addIRPasses() {
addPass(&ShadowStackGCLoweringID);
addPass(createLowerConstantIntrinsicsPass());
- // For MachO, lower @llvm.global_dtors into @llvm_global_ctors with
+ // For MachO, lower @llvm.global_dtors into @llvm.global_ctors with
// __cxa_atexit() calls to avoid emitting the deprecated __mod_term_func.
if (TM->getTargetTriple().isOSBinFormatMachO() &&
TM->Options.LowerGlobalDtorsViaCxaAtExit)
@@ -960,7 +931,7 @@ void TargetPassConfig::addPassesToHandleExceptions() {
// pad is shared by multiple invokes and is also a target of a normal
// edge from elsewhere.
addPass(createSjLjEHPreparePass(TM));
- LLVM_FALLTHROUGH;
+ [[fallthrough]];
case ExceptionHandling::DwarfCFI:
case ExceptionHandling::ARM:
case ExceptionHandling::AIX:
@@ -1058,13 +1029,13 @@ bool TargetPassConfig::addCoreISelPasses() {
// pass manager into two. GlobalISel with the fallback path disabled
// and -run-pass seem to be unaffected. The majority of GlobalISel
// testing uses -run-pass so this probably isn't too bad.
- SaveAndRestore<bool> SavedDebugifyIsSafe(DebugifyIsSafe);
+ SaveAndRestore SavedDebugifyIsSafe(DebugifyIsSafe);
if (Selector != SelectorType::GlobalISel || !isGlobalISelAbortEnabled())
DebugifyIsSafe = false;
// Add instruction selector passes.
if (Selector == SelectorType::GlobalISel) {
- SaveAndRestore<bool> SavedAddingMachinePasses(AddingMachinePasses, true);
+ SaveAndRestore SavedAddingMachinePasses(AddingMachinePasses, true);
if (addIRTranslator())
return true;
@@ -1113,6 +1084,8 @@ bool TargetPassConfig::addISelPasses() {
addPass(createPreISelIntrinsicLoweringPass());
PM->add(createTargetTransformInfoWrapperPass(TM->getTargetIRAnalysis()));
+ addPass(createExpandLargeDivRemPass());
+ addPass(createExpandLargeFpConvertPass());
addIRPasses();
addCodeGenPrepare();
addPassesToHandleExceptions();
@@ -1267,6 +1240,7 @@ void TargetPassConfig::addMachinePasses() {
addPass(&StackMapLivenessID);
addPass(&LiveDebugValuesID);
+ addPass(&MachineSanitizerBinaryMetadataID);
if (TM->Options.EnableMachineOutliner && getOptLevel() != CodeGenOpt::None &&
EnableMachineOutliner != RunOutliner::NeverOutline) {
@@ -1296,6 +1270,8 @@ void TargetPassConfig::addMachinePasses() {
if (!DisableCFIFixup && TM->Options.EnableCFIFixup)
addPass(createCFIFixup());
+ PM->add(createStackFrameLayoutAnalysisPass());
+
// Add passes that directly emit MI after all other MI passes.
addPreEmitPass2();
@@ -1519,6 +1495,9 @@ void TargetPassConfig::addOptimizedRegAlloc() {
/// Add passes that optimize machine instructions after register allocation.
void TargetPassConfig::addMachineLateOptimization() {
+ // Cleanup of redundant immediate/address loads.
+ addPass(&MachineLateInstrsCleanupID);
+
// Branch folding must be run after regalloc and prolog/epilog insertion.
addPass(&BranchFolderPassID);