diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 9cf39144f01cd3f50b4d40787a8f06a501b7f89f..aa8ed0bbc02e6a18abcc42fa39429b5fbb78d5d2 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -7024,18 +7024,18 @@ void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsign
         optimizer.RegisterPass(CreateLocalAccessChainConvertPass());
         optimizer.RegisterPass(CreateLocalSingleBlockLoadStoreElimPass());
         optimizer.RegisterPass(CreateLocalSingleStoreElimPass());
+        optimizer.RegisterPass(CreateSimplificationPass());
         optimizer.RegisterPass(CreateAggressiveDCEPass());
-        optimizer.RegisterPass(CreateInsertExtractElimPass());
+        optimizer.RegisterPass(CreateVectorDCEPass());
         optimizer.RegisterPass(CreateDeadInsertElimPass());
         optimizer.RegisterPass(CreateAggressiveDCEPass());
-        optimizer.RegisterPass(CreateCCPPass());
-        optimizer.RegisterPass(CreateSimplificationPass());
         optimizer.RegisterPass(CreateDeadBranchElimPass());
-        optimizer.RegisterPass(CreateCFGCleanupPass());
         optimizer.RegisterPass(CreateBlockMergePass());
         optimizer.RegisterPass(CreateLocalMultiStoreElimPass());
+        optimizer.RegisterPass(CreateIfConversionPass());
+        optimizer.RegisterPass(CreateSimplificationPass());
         optimizer.RegisterPass(CreateAggressiveDCEPass());
-        optimizer.RegisterPass(CreateInsertExtractElimPass());
+        optimizer.RegisterPass(CreateVectorDCEPass());
         optimizer.RegisterPass(CreateDeadInsertElimPass());
         if (options->optimizeSize) {
             optimizer.RegisterPass(CreateRedundancyEliminationPass());
@@ -7043,6 +7043,7 @@ void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsign
             // optimizer.RegisterPass(CreateCommonUniformElimPass());
         }
         optimizer.RegisterPass(CreateAggressiveDCEPass());
+        optimizer.RegisterPass(CreateCFGCleanupPass());
 
         if (!optimizer.Run(spirv.data(), spirv.size(), &spirv))
             return;
diff --git a/known_good.json b/known_good.json
index 3b202f6c3d63b7f2f64017f827ac7f9f97cdc34e..7027d4827787605e3ce5f382592f124f348521e2 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,7 +5,7 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "a579e720a8d7805ec9ebf657a4c6fa67ec268f7e"
+      "commit" : "545d6ca26d3beddcb8dc5dc363deb1544a2eeb87"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",