@@ -259,14 +259,16 @@ PassBuilder::buildO1FunctionSimplificationPipeline(OptimizationLevel Level,
259
259
FPM.addPass (EarlyCSEPass (true /* Enable mem-ssa. */ ));
260
260
261
261
// Hoisting of scalars and load expressions.
262
- FPM.addPass (SimplifyCFGPass ());
262
+ FPM.addPass (
263
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
263
264
FPM.addPass (InstCombinePass ());
264
265
265
266
FPM.addPass (LibCallsShrinkWrapPass ());
266
267
267
268
invokePeepholeEPCallbacks (FPM, Level);
268
269
269
- FPM.addPass (SimplifyCFGPass ());
270
+ FPM.addPass (
271
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
270
272
271
273
// Form canonically associated expression trees, and simplify the trees using
272
274
// basic mathematical properties. For example, this will form (nearly)
@@ -340,7 +342,8 @@ PassBuilder::buildO1FunctionSimplificationPipeline(OptimizationLevel Level,
340
342
FPM.addPass (createFunctionToLoopPassAdaptor (std::move (LPM1),
341
343
/* UseMemorySSA=*/ true ,
342
344
/* UseBlockFrequencyInfo=*/ true ));
343
- FPM.addPass (SimplifyCFGPass ());
345
+ FPM.addPass (
346
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
344
347
FPM.addPass (InstCombinePass ());
345
348
// The loop passes in LPM2 (LoopFullUnrollPass) do not preserve MemorySSA.
346
349
// *All* loop passes must preserve it, in order to be able to use it.
@@ -378,7 +381,8 @@ PassBuilder::buildO1FunctionSimplificationPipeline(OptimizationLevel Level,
378
381
// the simplifications and basic cleanup after all the simplifications.
379
382
// TODO: Investigate if this is too expensive.
380
383
FPM.addPass (ADCEPass ());
381
- FPM.addPass (SimplifyCFGPass ());
384
+ FPM.addPass (
385
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
382
386
FPM.addPass (InstCombinePass ());
383
387
invokePeepholeEPCallbacks (FPM, Level);
384
388
@@ -413,7 +417,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
413
417
// Global value numbering based sinking.
414
418
if (EnableGVNSink) {
415
419
FPM.addPass (GVNSinkPass ());
416
- FPM.addPass (SimplifyCFGPass ());
420
+ FPM.addPass (
421
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
417
422
}
418
423
419
424
if (EnableConstraintElimination)
@@ -426,7 +431,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
426
431
FPM.addPass (JumpThreadingPass ());
427
432
FPM.addPass (CorrelatedValuePropagationPass ());
428
433
429
- FPM.addPass (SimplifyCFGPass ());
434
+ FPM.addPass (
435
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
430
436
FPM.addPass (InstCombinePass ());
431
437
if (Level == OptimizationLevel::O3)
432
438
FPM.addPass (AggressiveInstCombinePass ());
@@ -443,7 +449,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
443
449
FPM.addPass (PGOMemOPSizeOpt ());
444
450
445
451
FPM.addPass (TailCallElimPass ());
446
- FPM.addPass (SimplifyCFGPass ());
452
+ FPM.addPass (
453
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
447
454
448
455
// Form canonically associated expression trees, and simplify the trees using
449
456
// basic mathematical properties. For example, this will form (nearly)
@@ -520,7 +527,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
520
527
FPM.addPass (createFunctionToLoopPassAdaptor (std::move (LPM1),
521
528
/* UseMemorySSA=*/ true ,
522
529
/* UseBlockFrequencyInfo=*/ true ));
523
- FPM.addPass (SimplifyCFGPass ());
530
+ FPM.addPass (
531
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
524
532
FPM.addPass (InstCombinePass ());
525
533
// The loop passes in LPM2 (LoopIdiomRecognizePass, IndVarSimplifyPass,
526
534
// LoopDeletionPass and LoopFullUnrollPass) do not preserve MemorySSA.
@@ -586,8 +594,10 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
586
594
for (auto &C : ScalarOptimizerLateEPCallbacks)
587
595
C (FPM, Level);
588
596
589
- FPM.addPass (SimplifyCFGPass (
590
- SimplifyCFGOptions ().hoistCommonInsts (true ).sinkCommonInsts (true )));
597
+ FPM.addPass (SimplifyCFGPass (SimplifyCFGOptions ()
598
+ .convertSwitchRangeToICmp (true )
599
+ .hoistCommonInsts (true )
600
+ .sinkCommonInsts (true )));
591
601
FPM.addPass (InstCombinePass ());
592
602
invokePeepholeEPCallbacks (FPM, Level);
593
603
@@ -625,7 +635,8 @@ void PassBuilder::addPGOInstrPasses(ModulePassManager &MPM,
625
635
FunctionPassManager FPM;
626
636
FPM.addPass (SROAPass ());
627
637
FPM.addPass (EarlyCSEPass ()); // Catch trivial redundancies.
628
- FPM.addPass (SimplifyCFGPass ()); // Merge & remove basic blocks.
638
+ FPM.addPass (SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (
639
+ true ))); // Merge & remove basic blocks.
629
640
FPM.addPass (InstCombinePass ()); // Combine silly sequences.
630
641
invokePeepholeEPCallbacks (FPM, Level);
631
642
@@ -939,7 +950,8 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
939
950
GlobalCleanupPM.addPass (InstCombinePass ());
940
951
invokePeepholeEPCallbacks (GlobalCleanupPM, Level);
941
952
942
- GlobalCleanupPM.addPass (SimplifyCFGPass ());
953
+ GlobalCleanupPM.addPass (
954
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
943
955
MPM.addPass (createModuleToFunctionPassAdaptor (std::move (GlobalCleanupPM),
944
956
PTO.EagerlyInvalidateAnalyses ));
945
957
@@ -1027,7 +1039,8 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level,
1027
1039
ExtraPasses.addPass (
1028
1040
createFunctionToLoopPassAdaptor (std::move (LPM), /* UseMemorySSA=*/ true ,
1029
1041
/* UseBlockFrequencyInfo=*/ true ));
1030
- ExtraPasses.addPass (SimplifyCFGPass ());
1042
+ ExtraPasses.addPass (
1043
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
1031
1044
ExtraPasses.addPass (InstCombinePass ());
1032
1045
FPM.addPass (std::move (ExtraPasses));
1033
1046
}
@@ -1043,6 +1056,7 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level,
1043
1056
// before SLP vectorization.
1044
1057
FPM.addPass (SimplifyCFGPass (SimplifyCFGOptions ()
1045
1058
.forwardSwitchCondToPhi (true )
1059
+ .convertSwitchRangeToICmp (true )
1046
1060
.convertSwitchToLookupTable (true )
1047
1061
.needCanonicalLoops (false )
1048
1062
.hoistCommonInsts (true )
@@ -1215,7 +1229,8 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
1215
1229
1216
1230
// LoopSink (and other loop passes since the last simplifyCFG) might have
1217
1231
// resulted in single-entry-single-exit or empty blocks. Clean up the CFG.
1218
- OptimizePM.addPass (SimplifyCFGPass ());
1232
+ OptimizePM.addPass (
1233
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
1219
1234
1220
1235
OptimizePM.addPass (CoroCleanupPass ());
1221
1236
@@ -1690,8 +1705,9 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
1690
1705
1691
1706
// Add late LTO optimization passes.
1692
1707
// Delete basic blocks, which optimization passes may have killed.
1693
- MPM.addPass (createModuleToFunctionPassAdaptor (
1694
- SimplifyCFGPass (SimplifyCFGOptions ().hoistCommonInsts (true ))));
1708
+ MPM.addPass (createModuleToFunctionPassAdaptor (SimplifyCFGPass (
1709
+ SimplifyCFGOptions ().convertSwitchRangeToICmp (true ).hoistCommonInsts (
1710
+ true ))));
1695
1711
1696
1712
// Drop bodies of available eternally objects to improve GlobalDCE.
1697
1713
MPM.addPass (EliminateAvailableExternallyPass ());
0 commit comments