mirror of
https://github.com/intel/intel-graphics-compiler.git
synced 2025-10-30 08:18:26 +08:00
Enabled more passes for igc_opt
This commit is contained in:
@ -15,4 +15,5 @@ SPDX-License-Identifier: MIT
|
||||
namespace IGC
|
||||
{
|
||||
llvm::FunctionPass* CreateComputeShaderLowering();
|
||||
void initializeComputeShaderLoweringPass(llvm::PassRegistry&);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -15,4 +15,5 @@ SPDX-License-Identifier: MIT
|
||||
namespace IGC
|
||||
{
|
||||
llvm::FunctionPass* CreateFoldKnownWorkGroupSizes();
|
||||
void initializeFoldKnownWorkGroupSizesPass(llvm::PassRegistry&);
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -56,4 +56,5 @@ namespace IGC
|
||||
};
|
||||
|
||||
llvm::FunctionPass* createHullShaderLoweringPass();
|
||||
void initializeHullShaderLoweringPass(llvm::PassRegistry&);
|
||||
} // namespace IGC
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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&);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user