Enabled more passes for igc_opt

This commit is contained in:
Dmitry Guzhaev
2021-06-10 10:19:13 +00:00
committed by igcbot
parent be0f5a75a0
commit 315b75c113
12 changed files with 49 additions and 20 deletions

View File

@ -15,4 +15,5 @@ SPDX-License-Identifier: MIT
namespace IGC
{
llvm::FunctionPass* CreateComputeShaderLowering();
void initializeComputeShaderLoweringPass(llvm::PassRegistry&);
}

View File

@ -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

View File

@ -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<FoldKnownWorkGroupSizes>
{
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<CodeGenContextWrapper>().getCodeGenContext();

View File

@ -15,4 +15,5 @@ SPDX-License-Identifier: MIT
namespace IGC
{
llvm::FunctionPass* CreateFoldKnownWorkGroupSizes();
void initializeFoldKnownWorkGroupSizesPass(llvm::PassRegistry&);
}

View File

@ -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<Element> 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)

View File

@ -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());

View File

@ -56,4 +56,5 @@ namespace IGC
};
llvm::FunctionPass* createHullShaderLoweringPass();
void initializeHullShaderLoweringPass(llvm::PassRegistry&);
} // namespace IGC

View File

@ -115,7 +115,7 @@ bool PixelShaderAddMask::runOnFunction(llvm::Function& F)
else
if ((drt = dyn_cast<RTDualBlendSourceIntrinsic>(II)))
{
IGC_ASSERT(isa<ConstantInt>(rtw->getPMask()));
IGC_ASSERT(isa<ConstantInt>(drt->getPMask()));
if (!mask)
{
mask = BinaryOperator::CreateNot(discardCond, "", drt);

View File

@ -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
{

View File

@ -109,5 +109,5 @@ namespace IGC
bool m_inputUsed[MaxNumOfInputs * 4]; // used vertex elements and SGV slots
bool m_isHeaderPresent;
};
}//namespace IGC
void initializeVertexShaderLoweringPass(llvm::PassRegistry&);
}//namespace IGC

View File

@ -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&);

View File

@ -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<Value*, APFloa
}
return foldInst;
}
}