diff --git a/source/opt/optimizer.cpp b/source/opt/optimizer.cpp index 8aed7bc1..e697e436 100644 --- a/source/opt/optimizer.cpp +++ b/source/opt/optimizer.cpp @@ -102,12 +102,15 @@ Optimizer& Optimizer::RegisterLegalizationPasses() { .RegisterPass(CreateLocalSingleBlockLoadStoreElimPass()) .RegisterPass(CreateLocalSingleStoreElimPass()) .RegisterPass(CreateLocalMultiStoreElimPass()) + // Propagate constants to get as many constant conditions on branches + // as possible. + .RegisterPass(CreateCCPPass()) + .RegisterPass(CreateDeadBranchElimPass()) // Copy propagate members. Cleans up code sequences generated by - // scalar replacement. + // scalar replacement. Also important for removing OpPhi nodes. .RegisterPass(CreateSimplificationPass()) // May need loop unrolling here see // https://github.com/Microsoft/DirectXShaderCompiler/pull/930 - .RegisterPass(CreateDeadBranchElimPass()) // Get rid of unused code that contain traces of illegal code // or unused references to unbound external objects .RegisterPass(CreateDeadInsertElimPass()) @@ -130,6 +133,7 @@ Optimizer& Optimizer::RegisterPerformancePasses() { .RegisterPass(CreateInsertExtractElimPass()) .RegisterPass(CreateDeadInsertElimPass()) .RegisterPass(CreateDeadBranchElimPass()) + .RegisterPass(CreateSimplificationPass()) .RegisterPass(CreateIfConversionPass()) .RegisterPass(CreateAggressiveDCEPass()) .RegisterPass(CreateBlockMergePass())