Skip to content

Commit fe32023

Browse files
aparshin-intelsys_zuul
authored andcommitted
VC backend should not use reserved BTI indexes for debuggable kernels.
Change-Id: I4e854220fc665a8c663a23b26be76823b855836a
1 parent 1c96bcd commit fe32023

File tree

9 files changed

+48
-22
lines changed

9 files changed

+48
-22
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ struct CompileOptions {
152152

153153
// Api accessible options.
154154
bool NoVecDecomp = false;
155+
bool EmitDebugInfo = false;
156+
155157
OptimizerLevel OptLevel = OptimizerLevel::Full;
156158
llvm::Optional<unsigned> StackMemSize;
157159

IGC/VectorCompiler/include/vc/GenXOpts/Utils/KernelInfo.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ namespace genx {
3939

4040
enum { VISA_MAJOR_VERSION = 3, VISA_MINOR_VERSION = 6 };
4141

42+
namespace DebugMD {
43+
static constexpr const char DebuggableKernels[] = "VC.Debug.Enable";
44+
}
45+
4246
// Utility function to tell whether a Function is a vISA kernel.
4347
inline bool isKernel(const Function *F) {
4448
// We use DLLExport to represent a kernel in LLVM IR.
@@ -205,6 +209,13 @@ class KernelMetadata {
205209
void computeBTIs() {
206210
unsigned SurfaceID = 0;
207211
unsigned SamplerID = 0;
212+
213+
IGC_ASSERT_MESSAGE(F, "BTI assignment requires a function to process");
214+
const Module* M = F->getParent();
215+
// If module does have Debuggable Kernels, then BTI=0 is reserved
216+
if (M->getNamedMetadata(DebugMD::DebuggableKernels))
217+
SurfaceID = SamplerID = 1;
218+
208219
auto Desc = ArgTypeDescs.begin();
209220
// Assign SRV and samplers.
210221
for (auto Kind = ArgKinds.begin(); Kind != ArgKinds.end(); ++Kind) {

IGC/VectorCompiler/lib/GenXCodeGen/GenXBackendConfig.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ using namespace llvm;
3939
// All options that can control backend behavior should be here.
4040
//
4141
//===----------------------------------------------------------------------===//
42+
43+
static cl::opt<bool> GenerateDebugInfoOpt(
44+
"emit-debug-info", cl::init(false), cl::Hidden,
45+
cl::desc("Generate DWARF debug info for each compiled kernel"));
46+
4247
static cl::opt<bool> DumpRegAllocOpt(
4348
"genx-dump-regalloc", cl::init(false), cl::Hidden,
4449
cl::desc(
@@ -68,8 +73,8 @@ static cl::opt<std::string> DebugInfoDumpNameOverride(
6873
char GenXBackendConfig::ID = 0;
6974

7075
GenXBackendOptions::GenXBackendOptions()
71-
: DumpRegAlloc(DumpRegAllocOpt), StackSurfaceMaxSize(StackMemSizeOpt),
72-
EnableAsmDumps(EnableAsmDumpsOpt),
76+
: EnableKernelDebug(GenerateDebugInfoOpt), DumpRegAlloc(DumpRegAllocOpt),
77+
StackSurfaceMaxSize(StackMemSizeOpt), EnableAsmDumps(EnableAsmDumpsOpt),
7378
EnableDebugInfoDumps(EnableDebugInfoDumpOpt),
7479
DebugInfoDumpsNameOverride(DebugInfoDumpNameOverride) {}
7580

IGC/VectorCompiler/lib/GenXCodeGen/GenXBackendConfig.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,10 @@ void initializeGenXBackendConfigPass(PassRegistry &PR);
5858
// Plain structure to be filled by users who want to create backend
5959
// configuration. Some values are default-initialized from cl options.
6060
struct GenXBackendOptions {
61+
// Enables debugging facilities for the compiled kernels
62+
bool EnableKernelDebug;
6163
// Enable/disable regalloc dump.
6264
bool DumpRegAlloc;
63-
6465
// Maximum available memory for stack (in bytes).
6566
unsigned StackSurfaceMaxSize;
6667

@@ -110,6 +111,7 @@ class GenXBackendConfig : public ImmutablePass {
110111
return Data.OCLGenericBiFModule;
111112
}
112113

114+
bool kernelDebugEnabled() const { return Options.EnableKernelDebug; }
113115
// Return whether shader dumper is installed.
114116
bool hasShaderDumper() const { return Options.Dumper; }
115117

IGC/VectorCompiler/lib/GenXCodeGen/GenXCisaBuilder.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5767,7 +5767,7 @@ ModulePass *llvm::createGenXFinalizerPass(raw_pwrite_stream &o) {
57675767

57685768
static SmallVector<const char *, 8>
57695769
collectFinalizerArgs(StringSaver &Saver, const GenXSubtarget &ST,
5770-
const bool AsmDumpsEnabled) {
5770+
const bool EnableKernelDebug, const bool AsmDumpsEnabled) {
57715771
SmallVector<const char *, 8> Argv;
57725772
auto addArgument = [&Argv, &Saver](StringRef Arg) {
57735773
// String saver guarantees that string is null-terminated.
@@ -5778,6 +5778,11 @@ collectFinalizerArgs(StringSaver &Saver, const GenXSubtarget &ST,
57785778
for (const auto &Fos : FinalizerOpts)
57795779
cl::TokenizeGNUCommandLine(Fos, Saver, Argv);
57805780

5781+
if (EnableKernelDebug) {
5782+
addArgument("-generateDebugInfo");
5783+
addArgument("-addKernelID");
5784+
addArgument("-setstartbp");
5785+
}
57815786
if (AsmDumpsEnabled) {
57825787
addArgument("-dumpcommonisa");
57835788
addArgument("-output");
@@ -5802,6 +5807,7 @@ LLVMContext &GenXModule::getContext() {
58025807
}
58035808

58045809
static VISABuilder *createVISABuilder(const GenXSubtarget &ST,
5810+
const bool EnableKernelDebug,
58055811
const bool AsmDumpsEnabled,
58065812
vISABuilderMode Mode, WA_TABLE *WaTable,
58075813
LLVMContext &Ctx,
@@ -5814,7 +5820,7 @@ static VISABuilder *createVISABuilder(const GenXSubtarget &ST,
58145820
// Prepare array of arguments for Builder API.
58155821
StringSaver Saver{Alloc};
58165822
SmallVector<const char *, 8> Argv =
5817-
collectFinalizerArgs(Saver, ST, AsmDumpsEnabled);
5823+
collectFinalizerArgs(Saver, ST, EnableKernelDebug, AsmDumpsEnabled);
58185824

58195825
if (PrintFinalizerOptions)
58205826
dumpFinalizerArgs(Argv, ST.getCPU());
@@ -5831,8 +5837,8 @@ static VISABuilder *createVISABuilder(const GenXSubtarget &ST,
58315837
void GenXModule::InitCISABuilder() {
58325838
IGC_ASSERT(ST);
58335839
const vISABuilderMode Mode = HasInlineAsm() ? vISA_ASM_WRITER : vISA_MEDIA;
5834-
CisaBuilder = createVISABuilder(*ST, AsmDumpsEnabled, Mode, WaTable,
5835-
getContext(), ArgStorage);
5840+
CisaBuilder = createVISABuilder(*ST, EnableKernelDebug, AsmDumpsEnabled, Mode,
5841+
WaTable, getContext(), ArgStorage);
58365842
}
58375843

58385844
VISABuilder *GenXModule::GetCisaBuilder() {
@@ -5850,8 +5856,9 @@ void GenXModule::DestroyCISABuilder() {
58505856

58515857
void GenXModule::InitVISAAsmReader() {
58525858
IGC_ASSERT(ST);
5853-
VISAAsmTextReader = createVISABuilder(*ST, AsmDumpsEnabled, vISA_ASM_READER,
5854-
WaTable, getContext(), ArgStorage);
5859+
VISAAsmTextReader =
5860+
createVISABuilder(*ST, EnableKernelDebug, AsmDumpsEnabled,
5861+
vISA_ASM_READER, WaTable, getContext(), ArgStorage);
58555862
}
58565863

58575864
VISABuilder *GenXModule::GetVISAAsmReader() {

IGC/VectorCompiler/lib/GenXCodeGen/GenXDebugInfo.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
4949

5050
using namespace llvm;
5151

52-
static cl::opt<bool> GenerateDebugInfo(
53-
"emit-debug-info", cl::init(false), cl::Hidden,
54-
cl::desc("Generate DWARF debug info for each compiled kernel"));
55-
5652
namespace {
5753

5854
static void debugDump(const Twine &Name, const char *Content, size_t Size) {
@@ -282,7 +278,8 @@ void GenXDebugInfo::getAnalysisUsage(AnalysisUsage &AU) const {
282278
}
283279
bool GenXDebugInfo::runOnModule(Module &M) {
284280

285-
if (!GenerateDebugInfo)
281+
const auto &BC = getAnalysis<GenXBackendConfig>();
282+
if (!BC.kernelDebugEnabled())
286283
return false;
287284

288285
const FunctionGroupAnalysis &FGA = getAnalysis<FunctionGroupAnalysis>();

IGC/VectorCompiler/lib/GenXCodeGen/GenXModule.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ bool GenXModule::runOnModule(Module &M) {
110110
// after runOnModule looks dangerous.
111111
const auto &BC = getAnalysis<GenXBackendConfig>();
112112
AsmDumpsEnabled = BC.asmDumpsEnabled();
113+
EnableKernelDebug = BC.kernelDebugEnabled();
113114

114115
InlineAsm = CheckForInlineAsm(M);
115116

IGC/VectorCompiler/lib/GenXCodeGen/GenXModule.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ namespace llvm {
9090
// pointers without copying. Store all strings here.
9191
BumpPtrAllocator ArgStorage;
9292
bool AsmDumpsEnabled = false;
93+
bool EnableKernelDebug = false;
9394

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

IGC/VectorCompiler/lib/GenXCodeGen/GenXWrapper.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ static GenXBackendOptions createBackendOptions(const vc::CompileOptions &Opts) {
426426
GenXBackendOptions BackendOpts;
427427
if (Opts.StackMemSize)
428428
BackendOpts.StackSurfaceMaxSize = Opts.StackMemSize.getValue();
429+
BackendOpts.EnableKernelDebug = Opts.EmitDebugInfo;
429430
BackendOpts.EnableAsmDumps = Opts.DumpAsm;
430431
BackendOpts.EnableDebugInfoDumps = Opts.DumpDebugInfo;
431432
BackendOpts.Dumper = Opts.Dumper.get();
@@ -598,6 +599,10 @@ Expected<vc::CompileOutput> vc::Compile(ArrayRef<char> Input,
598599
PerModulePasses.add(createGenXRestoreIntrAttrPass());
599600
PerModulePasses.run(M);
600601

602+
// Temporary measure till KernelArgOffset is moved to the backend
603+
if (Opts.EmitDebugInfo)
604+
M.getOrInsertNamedMetadata(llvm::genx::DebugMD::DebuggableKernels);
605+
601606
Triple TheTriple = overrideTripleWithVC(M.getTargetTriple());
602607
M.setTargetTriple(TheTriple.getTriple());
603608

@@ -703,6 +708,9 @@ static Error fillApiOptions(const opt::ArgList &ApiOptions,
703708
if (ApiOptions.hasArg(vc::options::OPT_no_vector_decomposition))
704709
Opts.NoVecDecomp = true;
705710

711+
if (ApiOptions.hasArg(vc::options::OPT_vc_emit_debug))
712+
Opts.EmitDebugInfo = true;
713+
706714
if (opt::Arg *A = ApiOptions.getLastArg(vc::options::OPT_optimize)) {
707715
StringRef Val = A->getValue();
708716
auto MaybeLevel = StringSwitch<Optional<vc::OptimizerLevel>>(Val)
@@ -832,14 +840,6 @@ composeLLVMArgs(const opt::InputArgList &ApiArgs,
832840
UpdatedArgs.AddSeparateArg(ApiArgs.getLastArg(OptID), LLVMOpt, WrappedOpts);
833841
}
834842

835-
836-
if (opt::Arg *DbgArg = ApiArgs.getLastArg(vc::options::OPT_vc_emit_debug)) {
837-
838-
UpdatedArgs.AddSeparateArg(DbgArg, LLVMOpt,
839-
"-finalizer-opts='-generateDebugInfo -addKernelID -setstartbp'");
840-
UpdatedArgs.AddSeparateArg(DbgArg, LLVMOpt, "-emit-debug-info");
841-
}
842-
843843
if (opt::Arg *GTPinReRa = ApiArgs.getLastArg(vc::options::OPT_gtpin_rera)) {
844844
UpdatedArgs.AddSeparateArg(GTPinReRa, LLVMOpt,
845845
"-finalizer-opts='-GTPinReRA'");

0 commit comments

Comments
 (0)