소스 검색

[spirv] Refresh SPIRV-Tools and update legalization pass recipe (#946)

Lei Zhang 7 년 전
부모
커밋
dfa66b6b9a
2개의 변경된 파일12개의 추가작업 그리고 3개의 파일을 삭제
  1. 1 1
      external/SPIRV-Tools
  2. 11 2
      tools/clang/lib/SPIRV/SPIRVEmitter.cpp

+ 1 - 1
external/SPIRV-Tools

@@ -1 +1 @@
-Subproject commit 059fe0822a8075511aee8622f9daeb9a9abedb1b
+Subproject commit c9a881ecc6f304b586bf13f54a7cff7119b04070

+ 11 - 2
tools/clang/lib/SPIRV/SPIRVEmitter.cpp

@@ -227,9 +227,16 @@ bool spirvToolsLegalize(std::vector<uint32_t> *module, std::string *messages) {
                  const spv_position_t & /*position*/,
                  const char *message) { *messages += message; });
 
-  optimizer.RegisterLegalizationPasses();
-
+  optimizer.RegisterPass(spvtools::CreateInlineExhaustivePass());
   optimizer.RegisterPass(spvtools::CreateEliminateDeadFunctionsPass());
+  optimizer.RegisterPass(spvtools::CreatePrivateToLocalPass());
+  optimizer.RegisterPass(spvtools::CreateScalarReplacementPass());
+  optimizer.RegisterPass(spvtools::CreateLocalMultiStoreElimPass());
+  optimizer.RegisterPass(spvtools::CreateInsertExtractElimPass());
+  optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass());
+  optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
+  optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
+  optimizer.RegisterPass(spvtools::CreateDeadVariableEliminationPass());
   optimizer.RegisterPass(spvtools::CreateCompactIdsPass());
 
   return optimizer.Run(module->data(), module->size(), module);
@@ -245,6 +252,8 @@ bool spirvToolsOptimize(std::vector<uint32_t> *module, std::string *messages) {
 
   optimizer.RegisterPerformancePasses();
 
+  optimizer.RegisterPass(spvtools::CreateCompactIdsPass());
+
   return optimizer.Run(module->data(), module->size(), module);
 }