Skip to content

Commit 0a3eb73

Browse files
aus-intelsys_zuul
authored and
sys_zuul
committed
Add asm dump options to VC
Add DumpAsm option to wrapper to enable finalizer dumps. Enable these dumps with -dump-asm or -mdump_asm internal options or ShaderDumpEnable igc flag. Change-Id: Iab43fc65da709e855ee41835703a1f14d0aba200
1 parent 152e115 commit 0a3eb73

File tree

9 files changed

+47
-6
lines changed

9 files changed

+47
-6
lines changed

IGC/AdaptorOCL/dllInterfaceCompute.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,6 +1438,7 @@ static void adjustDumpOptions(vc::CompileOptions& Opts)
14381438
{
14391439
Opts.DumpIR = true;
14401440
Opts.DumpIsa = true;
1441+
Opts.DumpAsm = true;
14411442
}
14421443
}
14431444

IGC/VectorCompiler/include/vc/GenXCodeGen/GenXWrapper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ struct CompileOptions {
162162
BinaryKind Binary = BinaryKind::OpenCL;
163163
bool DumpIsa = false;
164164
bool DumpIR = false;
165+
bool DumpAsm = false;
165166
bool TimePasses = false;
166167
};
167168

IGC/VectorCompiler/include/vc/Support/Options.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ def dump_llvm_ir : Flag<["-"], "dump-llvm-ir">,
115115
HelpText<"Dump llvm IR after SPIRV reading, optimizations and codegen">;
116116
def dump_isa_binary : Flag<["-"], "dump-isa-binary">,
117117
HelpText<"Dump isa binary after finalization pass">;
118+
def dump_asm : Flag<["-"], "dump-asm">,
119+
HelpText<"Dump assembly (visaasm, asm, etc.)">;
120+
def mdump_asm : Flag<["-"], "mdump_asm">,
121+
Alias<dump_asm>, HelpText<"Alias for -dump-asm">;
118122

119123
def help : Flag<["-"], "help">,
120124
HelpText<"Display available API options">;

IGC/VectorCompiler/lib/GenXCodeGen/GenXBackendConfig.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ static cl::opt<unsigned> StackMemSizeOpt("stack-mem-size",
4646
cl::desc("Available space for stack"),
4747
cl::init(8 * 1024));
4848

49+
static cl::opt<bool>
50+
EnableAsmDumpsOpt("genx-enable-asm-dumps",
51+
cl::desc("Enable finalizer assembly dumps"),
52+
cl::init(false));
53+
4954
//===----------------------------------------------------------------------===//
5055
//
5156
// Backend config related stuff.
@@ -54,7 +59,8 @@ static cl::opt<unsigned> StackMemSizeOpt("stack-mem-size",
5459
char GenXBackendConfig::ID = 0;
5560

5661
GenXBackendOptions::GenXBackendOptions()
57-
: DumpRegAlloc(DumpRegAllocOpt), StackSurfaceMaxSize(StackMemSizeOpt) {}
62+
: DumpRegAlloc(DumpRegAllocOpt), StackSurfaceMaxSize(StackMemSizeOpt),
63+
EnableAsmDumps(EnableAsmDumpsOpt) {}
5864

5965
GenXBackendConfig::GenXBackendConfig() : ImmutablePass(ID) {
6066
initializeGenXBackendConfigPass(*PassRegistry::getPassRegistry());

IGC/VectorCompiler/lib/GenXCodeGen/GenXBackendConfig.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ struct GenXBackendOptions {
6767
// Non-owning pointer to abstract shader dumper for debug dumps.
6868
vc::ShaderDumper *Dumper = nullptr;
6969

70+
// Whether to enable finalizer dumps.
71+
bool EnableAsmDumps;
72+
7073
GenXBackendOptions();
7174
};
7275

@@ -114,6 +117,8 @@ class GenXBackendConfig : public ImmutablePass {
114117
"Attempt to query not installed dumper");
115118
return *Options.Dumper;
116119
}
120+
121+
bool asmDumpsEnabled() const { return Options.EnableAsmDumps; }
117122
};
118123
} // namespace llvm
119124

IGC/VectorCompiler/lib/GenXCodeGen/GenXCisaBuilder.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5688,7 +5688,8 @@ ModulePass *llvm::createGenXFinalizerPass(raw_pwrite_stream &o) {
56885688
}
56895689

56905690
static SmallVector<const char *, 8>
5691-
collectFinalizerArgs(StringSaver &Saver, const GenXSubtarget &ST) {
5691+
collectFinalizerArgs(StringSaver &Saver, const GenXSubtarget &ST,
5692+
const bool AsmDumpsEnabled) {
56925693
SmallVector<const char *, 8> Argv;
56935694
auto addArgument = [&Argv, &Saver](StringRef Arg) {
56945695
// String saver guarantees that string is null-terminated.
@@ -5698,6 +5699,12 @@ collectFinalizerArgs(StringSaver &Saver, const GenXSubtarget &ST) {
56985699
addArgument("-dumpvisa");
56995700
for (const auto &Fos : FinalizerOpts)
57005701
cl::TokenizeGNUCommandLine(Fos, Saver, Argv);
5702+
5703+
if (AsmDumpsEnabled) {
5704+
addArgument("-dumpcommonisa");
5705+
addArgument("-output");
5706+
addArgument("-binary");
5707+
}
57015708
return Argv;
57025709
}
57035710

@@ -5717,6 +5724,7 @@ LLVMContext &GenXModule::getContext() {
57175724
}
57185725

57195726
static VISABuilder *createVISABuilder(const GenXSubtarget &ST,
5727+
const bool AsmDumpsEnabled,
57205728
vISABuilderMode Mode, WA_TABLE *WaTable,
57215729
LLVMContext &Ctx,
57225730
BumpPtrAllocator &Alloc) {
@@ -5727,7 +5735,8 @@ static VISABuilder *createVISABuilder(const GenXSubtarget &ST,
57275735

57285736
// Prepare array of arguments for Builder API.
57295737
StringSaver Saver{Alloc};
5730-
SmallVector<const char *, 8> Argv = collectFinalizerArgs(Saver, ST);
5738+
SmallVector<const char *, 8> Argv =
5739+
collectFinalizerArgs(Saver, ST, AsmDumpsEnabled);
57315740

57325741
if (PrintFinalizerOptions)
57335742
dumpFinalizerArgs(Argv, ST.getCPU());
@@ -5744,7 +5753,8 @@ static VISABuilder *createVISABuilder(const GenXSubtarget &ST,
57445753
void GenXModule::InitCISABuilder() {
57455754
IGC_ASSERT(ST);
57465755
const vISABuilderMode Mode = HasInlineAsm() ? vISA_ASM_WRITER : vISA_MEDIA;
5747-
CisaBuilder = createVISABuilder(*ST, Mode, WaTable, getContext(), ArgStorage);
5756+
CisaBuilder = createVISABuilder(*ST, AsmDumpsEnabled, Mode, WaTable,
5757+
getContext(), ArgStorage);
57485758
}
57495759

57505760
VISABuilder *GenXModule::GetCisaBuilder() {
@@ -5762,8 +5772,8 @@ void GenXModule::DestroyCISABuilder() {
57625772

57635773
void GenXModule::InitVISAAsmReader() {
57645774
IGC_ASSERT(ST);
5765-
VISAAsmTextReader = createVISABuilder(*ST, vISA_ASM_READER, WaTable,
5766-
getContext(), ArgStorage);
5775+
VISAAsmTextReader = createVISABuilder(*ST, AsmDumpsEnabled, vISA_ASM_READER,
5776+
WaTable, getContext(), ArgStorage);
57675777
}
57685778

57695779
VISABuilder *GenXModule::GetVISAAsmReader() {

IGC/VectorCompiler/lib/GenXCodeGen/GenXModule.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,14 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3232
#define DEBUG_TYPE "GENX_MODULE"
3333

3434
#include "GenXModule.h"
35+
3536
#include "FunctionGroup.h"
3637
#include "GenX.h"
38+
#include "GenXBackendConfig.h"
3739
#include "GenXSubtarget.h"
3840
#include "GenXTargetMachine.h"
3941
#include "GenXWATable.h"
42+
4043
#include "llvm/CodeGen/TargetPassConfig.h"
4144
#include "llvm/GenXIntrinsics/GenXMetadata.h"
4245
#include "llvm/IR/Function.h"
@@ -53,6 +56,7 @@ char GenXModule::ID = 0;
5356
INITIALIZE_PASS_BEGIN(GenXModule, "GenXModule", "GenXModule", false,
5457
true /*analysis*/)
5558
INITIALIZE_PASS_DEPENDENCY(FunctionGroupAnalysis)
59+
INITIALIZE_PASS_DEPENDENCY(GenXBackendConfig)
5660
INITIALIZE_PASS_DEPENDENCY(GenXWATable)
5761
INITIALIZE_PASS_END(GenXModule, "GenXModule", "GenXModule", false,
5862
true /*analysis*/)
@@ -64,6 +68,7 @@ ModulePass *llvm::createGenXModulePass() {
6468

6569
void GenXModule::getAnalysisUsage(AnalysisUsage &AU) const {
6670
AU.addRequired<FunctionGroupAnalysis>();
71+
AU.addRequired<GenXBackendConfig>();
6772
AU.addRequired<GenXWATable>();
6873
AU.addRequired<TargetPassConfig>();
6974
AU.setPreservesAll();
@@ -99,6 +104,11 @@ bool GenXModule::runOnModule(Module &M) {
99104
WaTable = getAnalysis<GenXWATable>().getWATable();
100105
Ctx = &M.getContext();
101106

107+
// Remember required config variables here. Getting other analysis
108+
// after runOnModule looks dangerous.
109+
const auto &BC = getAnalysis<GenXBackendConfig>();
110+
AsmDumpsEnabled = BC.asmDumpsEnabled();
111+
102112
InlineAsm = CheckForInlineAsm(M);
103113

104114
// Iterate, processing each Function that is not yet assigned to a

IGC/VectorCompiler/lib/GenXCodeGen/GenXModule.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ namespace llvm {
8989
// Visa option parser contains code that just stores c-strings as
9090
// pointers without copying. Store all strings here.
9191
BumpPtrAllocator ArgStorage;
92+
bool AsmDumpsEnabled = false;
9293

9394
VISABuilder *CisaBuilder = nullptr;
9495
void InitCISABuilder();

IGC/VectorCompiler/lib/GenXCodeGen/GenXWrapper.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ static GenXBackendOptions createBackendOptions(const vc::CompileOptions &Opts) {
349349
GenXBackendOptions BackendOpts;
350350
if (Opts.StackMemSize)
351351
BackendOpts.StackSurfaceMaxSize = Opts.StackMemSize.getValue();
352+
BackendOpts.EnableAsmDumps = Opts.DumpAsm;
352353
BackendOpts.Dumper = Opts.Dumper.get();
353354
return BackendOpts;
354355
}
@@ -649,6 +650,8 @@ static Error fillInternalOptions(const opt::ArgList &InternalOptions,
649650
Opts.DumpIsa = true;
650651
if (InternalOptions.hasArg(vc::options::OPT_dump_llvm_ir))
651652
Opts.DumpIR = true;
653+
if (InternalOptions.hasArg(vc::options::OPT_dump_asm))
654+
Opts.DumpAsm = true;
652655
if (InternalOptions.hasArg(vc::options::OPT_ftime_report))
653656
Opts.TimePasses = true;
654657

0 commit comments

Comments
 (0)