From 315b75c1133b4e1f7b6e2e559f7bfdd07cd18973 Mon Sep 17 00:00:00 2001 From: Dmitry Guzhaev Date: Thu, 10 Jun 2021 10:19:13 +0000 Subject: [PATCH] Enabled more passes for igc_opt --- .../CISACodeGen/ComputeShaderLowering.hpp | 1 + .../CISACodeGen/DomainShaderLowering.hpp | 2 +- .../CISACodeGen/FoldKnownWorkGroupSizes.cpp | 18 +++++++++++------- .../CISACodeGen/FoldKnownWorkGroupSizes.h | 1 + .../CISACodeGen/GeometryShaderLowering.cpp | 10 +++++++++- .../CISACodeGen/HullShaderClearTessFactors.cpp | 14 +++++++------- .../CISACodeGen/HullShaderLowering.hpp | 1 + .../CISACodeGen/PixelShaderLowering.cpp | 2 +- .../CISACodeGen/PixelShaderLowering.hpp | 2 ++ .../CISACodeGen/VertexShaderLowering.hpp | 4 ++-- IGC/Compiler/InitializePasses.h | 4 ++++ IGC/Compiler/SampleCmpToDiscard.cpp | 10 +++++++++- 12 files changed, 49 insertions(+), 20 deletions(-) diff --git a/IGC/Compiler/CISACodeGen/ComputeShaderLowering.hpp b/IGC/Compiler/CISACodeGen/ComputeShaderLowering.hpp index 9776f9633..535e9ba77 100644 --- a/IGC/Compiler/CISACodeGen/ComputeShaderLowering.hpp +++ b/IGC/Compiler/CISACodeGen/ComputeShaderLowering.hpp @@ -15,4 +15,5 @@ SPDX-License-Identifier: MIT namespace IGC { llvm::FunctionPass* CreateComputeShaderLowering(); + void initializeComputeShaderLoweringPass(llvm::PassRegistry&); } diff --git a/IGC/Compiler/CISACodeGen/DomainShaderLowering.hpp b/IGC/Compiler/CISACodeGen/DomainShaderLowering.hpp index dbe7c32ca..10c5f65a2 100644 --- a/IGC/Compiler/CISACodeGen/DomainShaderLowering.hpp +++ b/IGC/Compiler/CISACodeGen/DomainShaderLowering.hpp @@ -50,5 +50,5 @@ namespace IGC }; /// Creates a function pass that lowers input/output intrinsics to URB read/write llvm::FunctionPass* createDomainShaderLoweringPass(); - + void initializeDomainShaderLoweringPass(llvm::PassRegistry&); } // namespace IGC diff --git a/IGC/Compiler/CISACodeGen/FoldKnownWorkGroupSizes.cpp b/IGC/Compiler/CISACodeGen/FoldKnownWorkGroupSizes.cpp index 02adbe26f..6b4ff6847 100644 --- a/IGC/Compiler/CISACodeGen/FoldKnownWorkGroupSizes.cpp +++ b/IGC/Compiler/CISACodeGen/FoldKnownWorkGroupSizes.cpp @@ -18,16 +18,19 @@ SPDX-License-Identifier: MIT #include "LLVMWarningsPop.hpp" #include "common/igc_regkeys.hpp" +using namespace llvm; +using namespace IGC; +using namespace IGCMD; namespace IGC { class FoldKnownWorkGroupSizes : public llvm::FunctionPass, public llvm::InstVisitor { private: - static char ID; CodeGenContext* ctx = nullptr; bool RequirePayloadHeader = true; public: + static char ID; FoldKnownWorkGroupSizes() : FunctionPass(ID) {} bool runOnFunction(llvm::Function& F); void visitCallInst(llvm::CallInst& I); @@ -40,14 +43,15 @@ namespace IGC }; bool m_changed = false; char FoldKnownWorkGroupSizes::ID = 0; + +#define PASS_FLAG "igc-fold-workgroup-sizes" +#define PASS_DESCRIPTION "Fold global offset and enqueued local sizes" +#define PASS_CFG_ONLY false +#define PASS_ANALYSIS false + IGC_INITIALIZE_PASS_BEGIN(FoldKnownWorkGroupSizes, PASS_FLAG, PASS_DESCRIPTION, PASS_CFG_ONLY, PASS_ANALYSIS) + IGC_INITIALIZE_PASS_END(FoldKnownWorkGroupSizes, PASS_FLAG, PASS_DESCRIPTION, PASS_CFG_ONLY, PASS_ANALYSIS) } - - -using namespace llvm; -using namespace IGC; -using namespace IGCMD; - bool FoldKnownWorkGroupSizes::runOnFunction(Function& F) { ctx = getAnalysis().getCodeGenContext(); diff --git a/IGC/Compiler/CISACodeGen/FoldKnownWorkGroupSizes.h b/IGC/Compiler/CISACodeGen/FoldKnownWorkGroupSizes.h index f3e6bfb43..fbc4d0fe2 100644 --- a/IGC/Compiler/CISACodeGen/FoldKnownWorkGroupSizes.h +++ b/IGC/Compiler/CISACodeGen/FoldKnownWorkGroupSizes.h @@ -15,4 +15,5 @@ SPDX-License-Identifier: MIT namespace IGC { llvm::FunctionPass* CreateFoldKnownWorkGroupSizes(); + void initializeFoldKnownWorkGroupSizesPass(llvm::PassRegistry&); } diff --git a/IGC/Compiler/CISACodeGen/GeometryShaderLowering.cpp b/IGC/Compiler/CISACodeGen/GeometryShaderLowering.cpp index f779b723a..20638a0fe 100644 --- a/IGC/Compiler/CISACodeGen/GeometryShaderLowering.cpp +++ b/IGC/Compiler/CISACodeGen/GeometryShaderLowering.cpp @@ -38,6 +38,7 @@ namespace { public: GeometryShaderLowering(); + static char ID; virtual bool runOnFunction(llvm::Function& function) override; virtual void getAnalysisUsage(llvm::AnalysisUsage& AU) const override @@ -120,7 +121,6 @@ namespace { /// Returns channel number (0..3) which keeps data with the given SGV usage. Unit GetChannel(SGVUsage usage); - static char ID; /// Pointer to the module the processed function is a part of. IGCLLVM::Module* m_pModule; /// Convenience shorthand for floating point zero value. @@ -137,6 +137,14 @@ namespace { } // end of unnamed namespace +#define PASS_FLAG "igc-geometry-shader-lowering" +#define PASS_DESCRIPTION "Lower inputs outputs for geometry shader" +#define PASS_CFG_ONLY false +#define PASS_ANALYSIS false +IGC_INITIALIZE_PASS_BEGIN(GeometryShaderLowering, PASS_FLAG, PASS_DESCRIPTION, PASS_CFG_ONLY, PASS_ANALYSIS) +IGC_INITIALIZE_PASS_DEPENDENCY(CollectGeometryShaderProperties) +IGC_INITIALIZE_PASS_END(GeometryShaderLowering, PASS_FLAG, PASS_DESCRIPTION, PASS_CFG_ONLY, PASS_ANALYSIS) + /// Constructor GeometryShaderLowering::GeometryShaderLowering() : FunctionPass(ID) diff --git a/IGC/Compiler/CISACodeGen/HullShaderClearTessFactors.cpp b/IGC/Compiler/CISACodeGen/HullShaderClearTessFactors.cpp index 7b3a5f36d..91119a6e2 100644 --- a/IGC/Compiler/CISACodeGen/HullShaderClearTessFactors.cpp +++ b/IGC/Compiler/CISACodeGen/HullShaderClearTessFactors.cpp @@ -51,13 +51,6 @@ namespace char ClearTessFactors::ID = 0; -#define PASS_FLAG "igc-cleartessfactors" -#define PASS_DESC "Clear tessellation factors" -#define PASS_CFG_ONLY false -#define PASS_ANALYSIS false - IGC_INITIALIZE_PASS_BEGIN(ClearTessFactors, PASS_FLAG, PASS_DESC, PASS_CFG_ONLY, PASS_ANALYSIS) - IGC_INITIALIZE_PASS_END(ClearTessFactors, PASS_FLAG, PASS_DESC, PASS_CFG_ONLY, PASS_ANALYSIS) - bool isReturnBlock(BasicBlock* BB) { // Check whether current BB has only 'ret' instruction. @@ -105,6 +98,13 @@ namespace } } // end of unnamed namespace to contain class definition and auxiliary functions +#define PASS_FLAG "igc-cleartessfactors" +#define PASS_DESC "Clear tessellation factors" +#define PASS_CFG_ONLY false +#define PASS_ANALYSIS false +IGC_INITIALIZE_PASS_BEGIN(ClearTessFactors, PASS_FLAG, PASS_DESC, PASS_CFG_ONLY, PASS_ANALYSIS) +IGC_INITIALIZE_PASS_END(ClearTessFactors, PASS_FLAG, PASS_DESC, PASS_CFG_ONLY, PASS_ANALYSIS) + ClearTessFactors::ClearTessFactors() : FunctionPass(ID), m_changed(false) { initializeClearTessFactorsPass(*PassRegistry::getPassRegistry()); diff --git a/IGC/Compiler/CISACodeGen/HullShaderLowering.hpp b/IGC/Compiler/CISACodeGen/HullShaderLowering.hpp index 23ba7cf3a..48d98d8e1 100644 --- a/IGC/Compiler/CISACodeGen/HullShaderLowering.hpp +++ b/IGC/Compiler/CISACodeGen/HullShaderLowering.hpp @@ -56,4 +56,5 @@ namespace IGC }; llvm::FunctionPass* createHullShaderLoweringPass(); + void initializeHullShaderLoweringPass(llvm::PassRegistry&); } // namespace IGC diff --git a/IGC/Compiler/CISACodeGen/PixelShaderLowering.cpp b/IGC/Compiler/CISACodeGen/PixelShaderLowering.cpp index 46969825e..6face8e1e 100644 --- a/IGC/Compiler/CISACodeGen/PixelShaderLowering.cpp +++ b/IGC/Compiler/CISACodeGen/PixelShaderLowering.cpp @@ -115,7 +115,7 @@ bool PixelShaderAddMask::runOnFunction(llvm::Function& F) else if ((drt = dyn_cast(II))) { - IGC_ASSERT(isa(rtw->getPMask())); + IGC_ASSERT(isa(drt->getPMask())); if (!mask) { mask = BinaryOperator::CreateNot(discardCond, "", drt); diff --git a/IGC/Compiler/CISACodeGen/PixelShaderLowering.hpp b/IGC/Compiler/CISACodeGen/PixelShaderLowering.hpp index 20f5de9c6..244c7487a 100644 --- a/IGC/Compiler/CISACodeGen/PixelShaderLowering.hpp +++ b/IGC/Compiler/CISACodeGen/PixelShaderLowering.hpp @@ -45,6 +45,7 @@ protected: IGC::ModuleMetaData* m_modMD; CodeGenContext* m_cgCtx; }; +void initializePixelShaderAddMaskPass(llvm::PassRegistry&); class PixelShaderLowering : public llvm::FunctionPass { @@ -195,6 +196,7 @@ private: bool m_isPerSample; bool uavPixelSync; }; +void initializePixelShaderLoweringPass(llvm::PassRegistry&); class DiscardLowering : public llvm::FunctionPass { diff --git a/IGC/Compiler/CISACodeGen/VertexShaderLowering.hpp b/IGC/Compiler/CISACodeGen/VertexShaderLowering.hpp index f54c022bd..fed172f21 100644 --- a/IGC/Compiler/CISACodeGen/VertexShaderLowering.hpp +++ b/IGC/Compiler/CISACodeGen/VertexShaderLowering.hpp @@ -109,5 +109,5 @@ namespace IGC bool m_inputUsed[MaxNumOfInputs * 4]; // used vertex elements and SGV slots bool m_isHeaderPresent; }; - -}//namespace IGC \ No newline at end of file + void initializeVertexShaderLoweringPass(llvm::PassRegistry&); +}//namespace IGC diff --git a/IGC/Compiler/InitializePasses.h b/IGC/Compiler/InitializePasses.h index 1a3d082f1..2e154381f 100644 --- a/IGC/Compiler/InitializePasses.h +++ b/IGC/Compiler/InitializePasses.h @@ -26,6 +26,7 @@ void initializeBlockCoalescingPass(llvm::PassRegistry&); void initializeBreakConstantExprPass(llvm::PassRegistry&); void initializeBuiltinCallGraphAnalysisPass(llvm::PassRegistry&); void initializeBuiltinsConverterPass(llvm::PassRegistry&); +void initializeClearTessFactorsPass(llvm::PassRegistry&); void initializeCoalescingEnginePass(llvm::PassRegistry&); void initializeCodeGenContextWrapperPass(llvm::PassRegistry&); void initializeCodeGenPatternMatchPass(llvm::PassRegistry&); @@ -46,6 +47,7 @@ void initializeExtensionFuncsResolutionPass(llvm::PassRegistry&); void initializeGenericAddressAnalysisPass(llvm::PassRegistry&); void initializeGenericAddressDynamicResolutionPass(llvm::PassRegistry&); void initializeGenIRLoweringPass(llvm::PassRegistry&); +void initializeGeometryShaderLoweringPass(llvm::PassRegistry&); void initializeGEPLoweringPass(llvm::PassRegistry&); void initializeGenSpecificPatternPass(llvm::PassRegistry&); void initializeGreedyLiveRangeReductionPass(llvm::PassRegistry&); @@ -78,6 +80,7 @@ void initializeMetaDataUtilsWrapperInitializerPass(llvm::PassRegistry&); void initializeMetaDataUtilsWrapperPass(llvm::PassRegistry&); void initializeOpenCLPrintfAnalysisPass(llvm::PassRegistry&); void initializeOpenCLPrintfResolutionPass(llvm::PassRegistry&); +void initializePeepholeTypeLegalizerPass(llvm::PassRegistry&); void initializePositionDepAnalysisPass(llvm::PassRegistry&); void initializePrivateMemoryResolutionPass(llvm::PassRegistry&); void initializePrivateMemoryToSLMPass(llvm::PassRegistry&); @@ -99,6 +102,7 @@ void initializeResolveAggregateArgumentsPass(llvm::PassRegistry&); void initializeResolveOCLAtomicsPass(llvm::PassRegistry&); void initializeResourceAllocatorPass(llvm::PassRegistry&); void initializeRewriteLocalSizePass(llvm::PassRegistry&); +void initializeSampleCmpToDiscardPass(llvm::PassRegistry&); void initializeScalarizeFunctionPass(llvm::PassRegistry&); void initializeSimd32ProfitabilityAnalysisPass(llvm::PassRegistry&); void initializeSetFastMathFlagsPass(llvm::PassRegistry&); diff --git a/IGC/Compiler/SampleCmpToDiscard.cpp b/IGC/Compiler/SampleCmpToDiscard.cpp index 24b141756..dc1bf86ea 100644 --- a/IGC/Compiler/SampleCmpToDiscard.cpp +++ b/IGC/Compiler/SampleCmpToDiscard.cpp @@ -8,6 +8,7 @@ SPDX-License-Identifier: MIT #include "Compiler/SampleCmpToDiscard.h" #include "Compiler/CodeGenPublic.h" +#include "Compiler/IGCPassSupport.h" #include "GenISAIntrinsics/GenIntrinsicInst.h" using namespace llvm; using namespace IGC; @@ -39,6 +40,13 @@ private: char SampleCmpToDiscard::ID = 0; +#define PASS_FLAG "igc-discard-samplecmp" +#define PASS_DESCRIPTION "Checks possibility of SampleCmpToDiscard optimization" +#define PASS_CFG_ONLY false +#define PASS_ANALYSIS false +IGC_INITIALIZE_PASS_BEGIN(SampleCmpToDiscard, PASS_FLAG, PASS_DESCRIPTION, PASS_CFG_ONLY, PASS_ANALYSIS) +IGC_INITIALIZE_PASS_END(SampleCmpToDiscard, PASS_FLAG, PASS_DESCRIPTION, PASS_CFG_ONLY, PASS_ANALYSIS) + FunctionPass* IGC::CreateSampleCmpToDiscardPass() { return new SampleCmpToDiscard(); @@ -261,4 +269,4 @@ bool SampleCmpToDiscard::canFoldValue(Instruction* inst, std::map