@@ -365,14 +365,13 @@ createTargetMachine(const vc::CompileOptions &Opts,
365
365
static void optimizeIR (const vc::CompileOptions &Opts,
366
366
const vc::ExternalData &ExtData, TargetMachine &TM,
367
367
Module &M) {
368
-
368
+ # if LLVM_VERSION_MAJOR < 16
369
369
unsigned OptLevel;
370
370
if (Opts.IROptLevel == vc::OptimizerLevel::None)
371
371
OptLevel = 0 ;
372
372
else
373
373
OptLevel = 2 ;
374
374
375
- #if LLVM_VERSION_MAJOR < 16
376
375
vc::PassManager PerModulePasses;
377
376
auto *BC = new GenXBackendConfig{
378
377
createBackendOptions (Opts),
@@ -450,9 +449,23 @@ static void optimizeIR(const vc::CompileOptions &Opts,
450
449
PB.registerLoopAnalyses (LAM);
451
450
PB.crossRegisterProxies (LAM, FAM, CGAM, MAM);
452
451
453
- llvm::ModulePassManager MPM = PB.buildPerModuleDefaultPipeline (
454
- OptLevel == 2 ? llvm::OptimizationLevel::O2
455
- : llvm::OptimizationLevel::O0);
452
+ llvm::OptimizationLevel OptLevel;
453
+ if (Opts.IROptLevel == vc::OptimizerLevel::None)
454
+ OptLevel = llvm::OptimizationLevel::O0;
455
+ else
456
+ OptLevel = llvm::OptimizationLevel::O2;
457
+
458
+ #if LLVM_VERSION_MAJOR < 17
459
+ // On llvm-16 a separate method must be used to build default O0 pipeline,
460
+ // otherwise it hits an assertion.
461
+ llvm::ModulePassManager MPM;
462
+ if (OptLevel == llvm::OptimizationLevel::O0)
463
+ MPM = PB.buildO0DefaultPipeline (OptLevel);
464
+ else
465
+ MPM = PB.buildPerModuleDefaultPipeline (OptLevel);
466
+ #else // LLVM_VERSION_MAJOR < 17
467
+ llvm::ModulePassManager MPM = PB.buildPerModuleDefaultPipeline (OptLevel);
468
+ #endif // LLVM_VERSION_MAJOR < 17
456
469
457
470
MPM.run (M, MAM);
458
471
#endif // LLVM_VERSION_MAJOR < 16
0 commit comments