diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 50821b8d8a2bc2e9b199304bb99d8cec970a491e..d4eaa9021328684bc5cf662553d514f21ad04f0c 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -6752,19 +6752,24 @@ void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsign
                       << std::endl;
         });
 
+        optimizer.RegisterPass(CreateMergeReturnPass());
         optimizer.RegisterPass(CreateInlineExhaustivePass());
         optimizer.RegisterPass(CreateEliminateDeadFunctionsPass());
         optimizer.RegisterPass(CreateScalarReplacementPass());
         optimizer.RegisterPass(CreateLocalAccessChainConvertPass());
         optimizer.RegisterPass(CreateLocalSingleBlockLoadStoreElimPass());
         optimizer.RegisterPass(CreateLocalSingleStoreElimPass());
+        optimizer.RegisterPass(CreateAggressiveDCEPass());
         optimizer.RegisterPass(CreateInsertExtractElimPass());
         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(CreateAggressiveDCEPass());
         optimizer.RegisterPass(CreateInsertExtractElimPass());
         optimizer.RegisterPass(CreateDeadInsertElimPass());
         if (options->optimizeSize) {
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
index 573f2689e876b54536cfcb33b07d26a69bb60eaf..e3568e5a934e5340d7a7021414a0fd4786a65e29 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -2,7 +2,7 @@ hlsl.flattenOpaqueInitMix.vert
 WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80006
-// Id's are bound by 80
+// Id's are bound by 97
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -32,13 +32,13 @@ WARNING: AST will form illegal SPIR-V; need to transform to legalize
               49:    7(float) Constant 1056964608
               56:             TypePointer Output 11(fvec4)
 57(@entryPointOutput):     56(ptr) Variable Output
+              96:   36(fvec2) ConstantComposite 49 49
          4(main):           2 Function None 3
                5:             Label
               63:           6 Load 44(g_tInputTexture_sampler)
               64:           8 Load 47(g_tInputTexture)
               73:          28 SampledImage 64 63
-              78:   36(fvec2) CompositeConstruct 49 49
-              79:   11(fvec4) ImageSampleExplicitLod 73 78 Lod 38
+              79:   11(fvec4) ImageSampleExplicitLod 73 96 Lod 38
                               Store 57(@entryPointOutput) 79
                               Return
                               FunctionEnd
diff --git a/known_good.json b/known_good.json
index 01b370ec2cef11e718e356251f3de9e3ee9e9525..1e3bbde5e0b0e434e985987acd730c24636d7559 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,7 +5,7 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "8d8a71278bf9e83dd0fb30d5474386d30870b74d"
+      "commit" : "2e644e45785bb221294c32bf02a4ac867de49dc4"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",