Skip to content

Commit 4986f6d

Browse files
bcheng0127igcbot
authored andcommitted
Insert move to dbg instruction to help debug
Insert move to dbg instruction to help debug
1 parent a2150fd commit 4986f6d

File tree

5 files changed

+52
-1
lines changed

5 files changed

+52
-1
lines changed

IGC/Compiler/CISACodeGen/CISABuilder.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4805,6 +4805,11 @@ namespace IGC
48054805
SaveOption(vISA_EnableGroupScheduleForBC, true);
48064806
}
48074807

4808+
if (IGC_IS_FLAG_ENABLED(CopyA0ToDBG0))
4809+
{
4810+
SaveOption(vISA_CopyA0ToDBG0, true);
4811+
}
4812+
48084813
if (VISAPlatform == Xe_XeHPSDV && IGC_IS_FLAG_ENABLED(DPASTokenReduction))
48094814
{
48104815
SaveOption(vISA_EnableDPASTokenReduction, true);

IGC/common/igc_flags.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ DECLARE_IGC_REGKEY(DWORD, GEPLSRThresholdRatio, 100, "Ratio for register pressur
270270
DECLARE_IGC_REGKEY(bool, EnableGEPLSRToPreheader, true, "Enables reduction to loop's preheader in GEP Loop Strength Reduction pass", false)
271271

272272
DECLARE_IGC_GROUP("Shader debugging")
273+
DECLARE_IGC_REGKEY(bool, CopyA0ToDBG0, false, " Copy a0 used for extended msg descriptor to dbg0 to help debug", false)
273274
DECLARE_IGC_REGKEY(bool, EnableDebugging, false, " Enable shader debugging for release internal", false)
274275
DECLARE_IGC_REGKEY_BITMASK(GenerateOptionsFile, 0, "Create Options.txt(usually for SIMD related bugs to narrow down shaders), in the shader dump folder.", SHADER_TYPE_MASKS, false)
275276
DECLARE_IGC_REGKEY(bool, ForceDisableShaderDebugHashCodeInKernel, false, "Disable hash code addition to the binary after EOT", false)

visa/BuildIRImpl.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1855,6 +1855,12 @@ G4_SrcRegRegion *IR_Builder::createScratchExDesc(uint32_t exdesc) {
18551855
createBinOp(G4_add, g4::SIMD1, dst, T251, createImm(exdesc, Type_UD),
18561856
InstOpt_WriteEnable, true);
18571857
}
1858+
if (getOption(vISA_CopyA0ToDBG0)) {
1859+
G4_SrcRegRegion *srcA0 = createSrcRegRegion(exDescDecl, getRegionScalar());
1860+
G4_DstRegRegion *dstDbg0 =
1861+
createDst(phyregpool.getDbgReg(), 0, 0, 1, Type_UD);
1862+
createMov(g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true);
1863+
}
18581864
return createSrcRegRegion(exDescDecl, getRegionScalar());
18591865
}
18601866

@@ -2192,6 +2198,12 @@ G4_SrcRegRegion *IR_Builder::createBindlessExDesc(uint32_t exdesc) {
21922198
createBinOp(G4_add, g4::SIMD1, dst, T252, createImm(exdesc, Type_UD),
21932199
InstOpt_WriteEnable, true);
21942200
}
2201+
if (getOption(vISA_CopyA0ToDBG0)) {
2202+
G4_SrcRegRegion *srcA0 = createSrcRegRegion(exDescDecl, getRegionScalar());
2203+
G4_DstRegRegion *dstDbg0 =
2204+
createDst(phyregpool.getDbgReg(), 0, 0, 1, Type_UD);
2205+
createMov(g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable | dbgOpt, true);
2206+
}
21952207
return createSrcRegRegion(exDescDecl, getRegionScalar());
21962208
}
21972209

@@ -2271,6 +2283,12 @@ G4_InstSend *IR_Builder::createSendInst(G4_Predicate *pred,
22712283
}
22722284
}
22732285

2286+
if (getOption(vISA_CopyA0ToDBG0)) {
2287+
G4_SrcRegRegion *srcA0 = createSrcRegRegion(builtinA0, getRegionScalar());
2288+
G4_DstRegRegion *dstDbg0 =
2289+
createDst(phyregpool.getDbgReg(), 0, 0, 1, Type_UD);
2290+
createMov(g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true);
2291+
}
22742292
descOpnd = createSrcRegRegion(builtinA0, getRegionScalar());
22752293
} else {
22762294
descOpnd = createImm(desc, Type_UD);
@@ -2394,6 +2412,13 @@ IR_Builder::createSplitSendInst(G4_Predicate *pred, G4_DstRegRegion *dst,
23942412
}
23952413

23962414
if (needsSurfaceMove || needsSamplerMove) {
2415+
if (getOption(vISA_CopyA0ToDBG0)) {
2416+
G4_SrcRegRegion *srcA0 = createSrcRegRegion(builtinA0, getRegionScalar());
2417+
G4_DstRegRegion *dstDbg0 =
2418+
createDst(phyregpool.getDbgReg(), 0, 0, 1, Type_UD);
2419+
createMov(g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true);
2420+
}
2421+
23972422
descOpnd = createSrcRegRegion(builtinA0, getRegionScalar());
23982423
} else {
23992424
descOpnd = createImm(desc, Type_UD);
@@ -2609,6 +2634,12 @@ G4_InstSend *IR_Builder::createLscSendInst(
26092634
}
26102635
}
26112636

2637+
if (getOption(vISA_CopyA0ToDBG0)) {
2638+
G4_SrcRegRegion *srcA0 = createSrcRegRegion(builtinA0Dot2, getRegionScalar());
2639+
G4_DstRegRegion *dstDbg0 =
2640+
createDst(phyregpool.getDbgReg(), 0, 0, 1, Type_UD);
2641+
createMov(g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true);
2642+
}
26122643
exDescOpnd = createSrcRegRegion(builtinA0Dot2, getRegionScalar());
26132644
msgDesc->setSurface(exDescOpnd); // link a0.2 to the send descriptor
26142645
} else if (surface && surface->isImm()) {
@@ -2631,6 +2662,12 @@ G4_InstSend *IR_Builder::createLscSendInst(
26312662
createMov(g4::SIMD1, addrDstOpnd, createImm(imm, Type_UD),
26322663
InstOpt_WriteEnable, true);
26332664

2665+
if (getOption(vISA_CopyA0ToDBG0)) {
2666+
G4_SrcRegRegion *srcA0 = createSrcRegRegion(builtinA0Dot2, getRegionScalar());
2667+
G4_DstRegRegion *dstDbg0 =
2668+
createDst(phyregpool.getDbgReg(), 0, 0, 1, Type_UD);
2669+
createMov(g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true);
2670+
}
26342671
exDescOpnd = createSrcRegRegion(builtinA0Dot2, getRegionScalar());
26352672
msgDesc->setSurface(exDescOpnd); // link a0.2 to the send descriptor
26362673
} else {
@@ -2712,6 +2749,12 @@ G4_InstSend *IR_Builder::createSplitSendToRenderTarget(
27122749
G4_DstRegRegion *addrDstOpnd = createDstRegRegion(builtinA0, 1);
27132750
createBinOp(G4_add, g4::SIMD1, addrDstOpnd, bti, createImm(desc, Type_UD),
27142751
InstOpt_WriteEnable, true);
2752+
if (getOption(vISA_CopyA0ToDBG0)) {
2753+
G4_SrcRegRegion *srcA0 = createSrcRegRegion(builtinA0, getRegionScalar());
2754+
G4_DstRegRegion *dstDbg0 =
2755+
createDst(phyregpool.getDbgReg(), 0, 0, 1, Type_UD);
2756+
createMov(g4::SIMD1, dstDbg0, srcA0, InstOpt_WriteEnable, true);
2757+
}
27152758
descOpnd = createSrcRegRegion(builtinA0, getRegionScalar());
27162759
} else {
27172760
descOpnd = createImm(desc, Type_UD);

visa/G4_IR.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2987,7 +2987,7 @@ bool G4_INST::isOptBarrier() const {
29872987
if (dst) {
29882988
if (dst->isAreg()) {
29892989
if (dst->isNReg() || dst->isSrReg() || dst->isCrReg() || dst->isTmReg() ||
2990-
dst->isTDRReg()) {
2990+
dst->isTDRReg() || dst->isDbgReg()) {
29912991
return true;
29922992
}
29932993
}

visa/include/VISAOptionsDefs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ DEF_VISA_OPTION(vISA_asmToConsole, ET_BOOL, "-asmToConsole",
9494
DEF_VISA_OPTION(vISA_DebugOnly, ET_CSTR, "-debug-only", UNUSED, NULL)
9595
DEF_VISA_OPTION(vISA_DisablePrefetchToL1Cache, ET_BOOL, "-disablePrefetchL1",
9696
"Disables L1 cached for prefetch messages", false)
97+
DEF_VISA_OPTION(vISA_CopyA0ToDBG0, ET_BOOL, "-copyA0ToDBG0",
98+
"copy value of a0 used for extend msg descriptor of send to the dbg0 register", false)
9799

98100
//=== Optimization options ===
99101
DEF_VISA_OPTION(vISA_EnableAlways, ET_BOOL, NULLSTR, UNUSED, true)

0 commit comments

Comments
 (0)