Give error when selecting unsupported passmanager. (#4250)

This commit is contained in:
Johan Engelen 2022-11-11 00:10:01 +01:00 committed by GitHub
parent bfa802d6c8
commit fed90e8993
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 8 deletions

View file

@ -530,6 +530,17 @@ cl::opt<bool> noPLT(
"fno-plt", cl::ZeroOrMore,
cl::desc("Do not use the PLT to make function calls"));
cl::opt<signed char> passmanager("passmanager",
cl::desc("Setting the passmanager (new,legacy):"), cl::ZeroOrMore,
#if LDC_LLVM_VER < 1500
cl::init(0),
#else
cl::init(1),
#endif
cl::values(
clEnumValN(0, "legacy", "Use the legacy passmanager (available for LLVM14 and below) "),
clEnumValN(1, "new", "Use the new passmanager (available for LLVM14 and above)")));
// Math options
bool fFastMath; // Storage for the dynamically created ffast-math option.
llvm::FastMathFlags defaultFMF;

View file

@ -90,6 +90,8 @@ extern cl::opt<bool> noPLT;
extern cl::opt<bool> useDIP25;
extern cl::opt<bool> useDIP1000;
extern cl::opt<signed char> passmanager;
// Math options
extern bool fFastMath;
extern llvm::FastMathFlags defaultFMF;

View file

@ -546,6 +546,20 @@ void parseCommandLine(Strings &sourceFiles) {
global.params.hdrStripPlainFunctions = !opts::hdrKeepAllBodies;
global.params.disableRedZone = opts::disableRedZone();
// Passmanager selection options depend on LLVM version
#if LDC_LLVM_VER < 1400
// LLVM < 14 only supports the legacy passmanager
if (opts::passmanager != 0) {
error(Loc(), "LLVM version 13 or below only supports --passmanager=legacy");
}
#endif
#if LDC_LLVM_VER >= 1500
// LLVM >= 15 only supports the new passmanager
if (opts::passmanager != 1) {
error(Loc(), "LLVM version 15 or above only supports --passmanager=new");
}
#endif
}
void initializePasses() {

View file

@ -123,12 +123,6 @@ static cl::opt<int> fSanitizeMemoryTrackOrigins(
cl::desc(
"Enable origins tracking in MemorySanitizer (0=disabled, default)"));
static cl::opt<signed char> passmanager("passmanager",
cl::desc("Setting the passmanager (new,legacy):"), cl::ZeroOrMore, cl::init(0),
cl::values(
clEnumValN(0, "legacy", "Use the legacy passmanager (available for LLVM14 and below) "),
clEnumValN(1, "new", "Use the new passmanager (available for LLVM14 and above)")));
unsigned optLevel() {
// Use -O2 as a base for the size-optimization levels.
return optimizeLevel >= 0 ? optimizeLevel : 2;
@ -839,8 +833,8 @@ bool ldc_optimize_module(llvm::Module *M) {
#if LDC_LLVM_VER < 1400
return legacy_ldc_optimize_module(M);
#elif LDC_LLVM_VER < 1500
return passmanager==0 ? legacy_ldc_optimize_module(M)
: new_ldc_optimize_module(M);
return opts::passmanager == 0 ? legacy_ldc_optimize_module(M)
: new_ldc_optimize_module(M);
#else
return new_ldc_optimize_module(M);
#endif