DxilGenerationPass.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // //
  3. // DxilGenerationPass.h //
  4. // Copyright (C) Microsoft Corporation. All rights reserved. //
  5. // This file is distributed under the University of Illinois Open Source //
  6. // License. See LICENSE.TXT for details. //
  7. // //
  8. // This file provides a DXIL Generation pass. //
  9. // //
  10. ///////////////////////////////////////////////////////////////////////////////
  11. #pragma once
  12. namespace llvm {
  13. class Module;
  14. class ModulePass;
  15. class Function;
  16. class FunctionPass;
  17. class Instruction;
  18. class PassRegistry;
  19. class StringRef;
  20. }
  21. namespace hlsl {
  22. class DxilResourceBase;
  23. class WaveSensitivityAnalysis {
  24. public:
  25. static WaveSensitivityAnalysis* create();
  26. virtual ~WaveSensitivityAnalysis() { }
  27. virtual void Analyze(llvm::Function *F) = 0;
  28. virtual bool IsWaveSensitive(llvm::Instruction *op) = 0;
  29. };
  30. class HLSLExtensionsCodegenHelper;
  31. // Pause/resume support.
  32. bool ClearPauseResumePasses(llvm::Module &M); // true if modified; false if missing
  33. void GetPauseResumePasses(llvm::Module &M, llvm::StringRef &pause, llvm::StringRef &resume);
  34. void SetPauseResumePasses(llvm::Module &M, llvm::StringRef pause, llvm::StringRef resume);
  35. }
  36. namespace llvm {
  37. /// \brief Create and return a pass that tranform the module into a DXIL module
  38. /// Note that this pass is designed for use with the legacy pass manager.
  39. ModulePass *createDxilCondenseResourcesPass();
  40. ModulePass *createDxilEliminateOutputDynamicIndexingPass();
  41. ModulePass *createDxilGenerationPass(bool NotOptimized, hlsl::HLSLExtensionsCodegenHelper *extensionsHelper);
  42. ModulePass *createHLEmitMetadataPass();
  43. ModulePass *createHLEnsureMetadataPass();
  44. ModulePass *createDxilFinalizeModulePass();
  45. ModulePass *createDxilEmitMetadataPass();
  46. FunctionPass *createDxilExpandTrigIntrinsicsPass();
  47. ModulePass *createDxilLoadMetadataPass();
  48. ModulePass *createDxilDeadFunctionEliminationPass();
  49. ModulePass *createHLDeadFunctionEliminationPass();
  50. ModulePass *createHLPreprocessPass();
  51. ModulePass *createDxilPrecisePropagatePass();
  52. FunctionPass *createDxilPreserveAllOutputsPass();
  53. FunctionPass *createDxilLegalizeResourceUsePass();
  54. ModulePass *createDxilLegalizeStaticResourceUsePass();
  55. ModulePass *createDxilLegalizeEvalOperationsPass();
  56. FunctionPass *createDxilLegalizeSampleOffsetPass();
  57. FunctionPass *createSimplifyInstPass();
  58. ModulePass *createDxilAddPixelHitInstrumentationPass();
  59. ModulePass *createDxilOutputColorBecomesConstantPass();
  60. ModulePass *createDxilRemoveDiscardsPass();
  61. ModulePass *createDxilReduceMSAAToSingleSamplePass();
  62. ModulePass *createDxilForceEarlyZPass();
  63. ModulePass *createDxilDebugInstrumentationPass();
  64. ModulePass *createDxilShaderAccessTrackingPass();
  65. ModulePass *createDxilTranslateRawBuffer();
  66. ModulePass *createNoPausePassesPass();
  67. ModulePass *createPausePassesPass();
  68. ModulePass *createResumePassesPass();
  69. void initializeDxilCondenseResourcesPass(llvm::PassRegistry&);
  70. void initializeDxilEliminateOutputDynamicIndexingPass(llvm::PassRegistry&);
  71. void initializeDxilGenerationPassPass(llvm::PassRegistry&);
  72. void initializeHLEnsureMetadataPass(llvm::PassRegistry&);
  73. void initializeHLEmitMetadataPass(llvm::PassRegistry&);
  74. void initializeDxilFinalizeModulePass(llvm::PassRegistry&);
  75. void initializeDxilEmitMetadataPass(llvm::PassRegistry&);
  76. void initializeDxilExpandTrigIntrinsicsPass(llvm::PassRegistry&);
  77. void initializeDxilLoadMetadataPass(llvm::PassRegistry&);
  78. void initializeDxilDeadFunctionEliminationPass(llvm::PassRegistry&);
  79. void initializeHLDeadFunctionEliminationPass(llvm::PassRegistry&);
  80. void initializeHLPreprocessPass(llvm::PassRegistry&);
  81. void initializeDxilPrecisePropagatePassPass(llvm::PassRegistry&);
  82. void initializeDxilPreserveAllOutputsPass(llvm::PassRegistry&);
  83. void initializeDxilLegalizeResourceUsePassPass(llvm::PassRegistry&);
  84. void initializeDxilLegalizeStaticResourceUsePassPass(llvm::PassRegistry&);
  85. void initializeDxilLegalizeEvalOperationsPass(llvm::PassRegistry&);
  86. void initializeDxilLegalizeSampleOffsetPassPass(llvm::PassRegistry&);
  87. void initializeSimplifyInstPass(llvm::PassRegistry&);
  88. void initializeDxilAddPixelHitInstrumentationPass(llvm::PassRegistry&);
  89. void initializeDxilOutputColorBecomesConstantPass(llvm::PassRegistry&);
  90. void initializeDxilRemoveDiscardsPass(llvm::PassRegistry&);
  91. void initializeDxilTranslateRawBufferPass(llvm::PassRegistry&);
  92. void initializeDxilReduceMSAAToSingleSamplePass(llvm::PassRegistry&);
  93. void initializeDxilForceEarlyZPass(llvm::PassRegistry&);
  94. void initializeDxilDebugInstrumentationPass(llvm::PassRegistry&);
  95. void initializeDxilShaderAccessTrackingPass(llvm::PassRegistry&);
  96. void initializeNoPausePassesPass(llvm::PassRegistry&);
  97. void initializePausePassesPass(llvm::PassRegistry&);
  98. void initializeResumePassesPass(llvm::PassRegistry&);
  99. bool AreDxilResourcesDense(llvm::Module *M, hlsl::DxilResourceBase **ppNonDense);
  100. }