Skip to content

Commit 93463de

Browse files
jgu222sys_zuul
authored andcommitted
sendFusion gets emask either by dmask & ce0 or cmp. As using dmask
isn't always safe (code using vmask, etc) and reading ce0 might have issues. This change will always use cmp to get emask. Instruction count wise, cmp approach needs 2 insts where dmask&ce0 approach needs just 1 instructions, per each basic block. Change-Id: Ic426e0806e955827714b3977118c1cabfde75322
1 parent 994fe47 commit 93463de

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

visa/SendFusion.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,18 @@ namespace vISA
145145
FlagDefPerBB(nullptr),
146146
WAce0Read(false)
147147
{
148-
WAce0Read = VISA_WA_CHECK(Builder->getPWaTable(), Wa_1406950495) ;
149-
initDMaskModInfo();
148+
// Using "dmask (sr0.2) And ce0.0" for emask for each BB is not very safe
149+
// for the following reasons:
150+
// 1) shader may use vmask; or
151+
// 2) reading ce might be unsafe (for example, hardware issue)
152+
// Thus, we set WAce0Read to true to force using "cmp r0, r0" to create emask
153+
// always, and no dmask would be used at all!
154+
//WAce0Read = VISA_WA_CHECK(Builder->getPWaTable(), Wa_1406950495) ;
155+
WAce0Read = true;
156+
if (!WAce0Read)
157+
{
158+
initDMaskModInfo();
159+
}
150160
}
151161

152162
bool run(G4_BB* BB);
@@ -1248,7 +1258,7 @@ void SendFusion::createFlagPerBB(G4_BB* bb, INST_LIST_ITER InsertBeforePos)
12481258
}
12491259
else
12501260
{
1251-
// (W) and (|M0) tmp<1>:ud ce0.0<0;1,0>:ud DMaskUD:ud
1261+
// (W) and (1|M0) tmp<1>:ud ce0.0<0;1,0>:ud DMaskUD:ud
12521262
G4_SrcRegRegion *ce0Src = Builder->createSrcRegRegion(
12531263
Mod_src_undef, Direct, Builder->phyregpool.getMask0Reg(), 0, 0, scalar, Type_UD);
12541264
G4_SrcRegRegion *dmaskSrc = Builder->createSrcRegRegion(

0 commit comments

Comments
 (0)