@@ -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)
@@ -335,7 +337,8 @@ PassBuilder::buildO1FunctionSimplificationPipeline(OptimizationLevel Level,
335
337
FPM.addPass (createFunctionToLoopPassAdaptor (std::move (LPM1),
336
338
/* UseMemorySSA=*/ true ,
337
339
/* UseBlockFrequencyInfo=*/ true ));
338
- FPM.addPass (SimplifyCFGPass ());
340
+ FPM.addPass (
341
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
339
342
FPM.addPass (InstCombinePass ());
340
343
// The loop passes in LPM2 (LoopFullUnrollPass) do not preserve MemorySSA.
341
344
// *All* loop passes must preserve it, in order to be able to use it.
@@ -373,7 +376,8 @@ PassBuilder::buildO1FunctionSimplificationPipeline(OptimizationLevel Level,
373
376
// the simplifications and basic cleanup after all the simplifications.
374
377
// TODO: Investigate if this is too expensive.
375
378
FPM.addPass (ADCEPass ());
376
- FPM.addPass (SimplifyCFGPass ());
379
+ FPM.addPass (
380
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
377
381
FPM.addPass (InstCombinePass ());
378
382
invokePeepholeEPCallbacks (FPM, Level);
379
383
@@ -408,7 +412,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
408
412
// Global value numbering based sinking.
409
413
if (EnableGVNSink) {
410
414
FPM.addPass (GVNSinkPass ());
411
- FPM.addPass (SimplifyCFGPass ());
415
+ FPM.addPass (
416
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
412
417
}
413
418
414
419
if (EnableConstraintElimination)
@@ -421,7 +426,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
421
426
FPM.addPass (JumpThreadingPass ());
422
427
FPM.addPass (CorrelatedValuePropagationPass ());
423
428
424
- FPM.addPass (SimplifyCFGPass ());
429
+ FPM.addPass (
430
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
425
431
FPM.addPass (InstCombinePass ());
426
432
if (Level == OptimizationLevel::O3)
427
433
FPM.addPass (AggressiveInstCombinePass ());
@@ -438,7 +444,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
438
444
FPM.addPass (PGOMemOPSizeOpt ());
439
445
440
446
FPM.addPass (TailCallElimPass ());
441
- FPM.addPass (SimplifyCFGPass ());
447
+ FPM.addPass (
448
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
442
449
443
450
// Form canonically associated expression trees, and simplify the trees using
444
451
// basic mathematical properties. For example, this will form (nearly)
@@ -510,7 +517,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
510
517
FPM.addPass (createFunctionToLoopPassAdaptor (std::move (LPM1),
511
518
/* UseMemorySSA=*/ true ,
512
519
/* UseBlockFrequencyInfo=*/ true ));
513
- FPM.addPass (SimplifyCFGPass ());
520
+ FPM.addPass (
521
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
514
522
FPM.addPass (InstCombinePass ());
515
523
// The loop passes in LPM2 (LoopIdiomRecognizePass, IndVarSimplifyPass,
516
524
// LoopDeletionPass and LoopFullUnrollPass) do not preserve MemorySSA.
@@ -575,8 +583,10 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
575
583
for (auto &C : ScalarOptimizerLateEPCallbacks)
576
584
C (FPM, Level);
577
585
578
- FPM.addPass (SimplifyCFGPass (
579
- SimplifyCFGOptions ().hoistCommonInsts (true ).sinkCommonInsts (true )));
586
+ FPM.addPass (SimplifyCFGPass (SimplifyCFGOptions ()
587
+ .convertSwitchRangeToICmp (true )
588
+ .hoistCommonInsts (true )
589
+ .sinkCommonInsts (true )));
580
590
FPM.addPass (InstCombinePass ());
581
591
invokePeepholeEPCallbacks (FPM, Level);
582
592
@@ -614,7 +624,8 @@ void PassBuilder::addPGOInstrPasses(ModulePassManager &MPM,
614
624
FunctionPassManager FPM;
615
625
FPM.addPass (SROAPass ());
616
626
FPM.addPass (EarlyCSEPass ()); // Catch trivial redundancies.
617
- FPM.addPass (SimplifyCFGPass ()); // Merge & remove basic blocks.
627
+ FPM.addPass (SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (
628
+ true ))); // Merge & remove basic blocks.
618
629
FPM.addPass (InstCombinePass ()); // Combine silly sequences.
619
630
invokePeepholeEPCallbacks (FPM, Level);
620
631
@@ -928,7 +939,8 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
928
939
GlobalCleanupPM.addPass (InstCombinePass ());
929
940
invokePeepholeEPCallbacks (GlobalCleanupPM, Level);
930
941
931
- GlobalCleanupPM.addPass (SimplifyCFGPass ());
942
+ GlobalCleanupPM.addPass (
943
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
932
944
MPM.addPass (createModuleToFunctionPassAdaptor (std::move (GlobalCleanupPM),
933
945
PTO.EagerlyInvalidateAnalyses ));
934
946
@@ -1015,7 +1027,8 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level,
1015
1027
ExtraPasses.addPass (
1016
1028
createFunctionToLoopPassAdaptor (std::move (LPM), /* UseMemorySSA=*/ true ,
1017
1029
/* UseBlockFrequencyInfo=*/ true ));
1018
- ExtraPasses.addPass (SimplifyCFGPass ());
1030
+ ExtraPasses.addPass (
1031
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
1019
1032
ExtraPasses.addPass (InstCombinePass ());
1020
1033
FPM.addPass (std::move (ExtraPasses));
1021
1034
}
@@ -1031,6 +1044,7 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level,
1031
1044
// before SLP vectorization.
1032
1045
FPM.addPass (SimplifyCFGPass (SimplifyCFGOptions ()
1033
1046
.forwardSwitchCondToPhi (true )
1047
+ .convertSwitchRangeToICmp (true )
1034
1048
.convertSwitchToLookupTable (true )
1035
1049
.needCanonicalLoops (false )
1036
1050
.hoistCommonInsts (true )
@@ -1202,7 +1216,8 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
1202
1216
1203
1217
// LoopSink (and other loop passes since the last simplifyCFG) might have
1204
1218
// resulted in single-entry-single-exit or empty blocks. Clean up the CFG.
1205
- OptimizePM.addPass (SimplifyCFGPass ());
1219
+ OptimizePM.addPass (
1220
+ SimplifyCFGPass (SimplifyCFGOptions ().convertSwitchRangeToICmp (true )));
1206
1221
1207
1222
OptimizePM.addPass (CoroCleanupPass ());
1208
1223
@@ -1676,8 +1691,9 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
1676
1691
1677
1692
// Add late LTO optimization passes.
1678
1693
// Delete basic blocks, which optimization passes may have killed.
1679
- MPM.addPass (createModuleToFunctionPassAdaptor (
1680
- SimplifyCFGPass (SimplifyCFGOptions ().hoistCommonInsts (true ))));
1694
+ MPM.addPass (createModuleToFunctionPassAdaptor (SimplifyCFGPass (
1695
+ SimplifyCFGOptions ().convertSwitchRangeToICmp (true ).hoistCommonInsts (
1696
+ true ))));
1681
1697
1682
1698
// Drop bodies of available eternally objects to improve GlobalDCE.
1683
1699
MPM.addPass (EliminateAvailableExternallyPass ());
0 commit comments