Skip to content

Commit b5a7610

Browse files
jgu222igcbot
authored andcommitted
Make sure to free memory
If a kernel has no spill, noMaskInfo does not get freed, causing memory leak. This change makes sure the memory get freeed.
1 parent 3a50a35 commit b5a7610

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

visa/Optimizer.cpp

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7419,9 +7419,7 @@ bool Optimizer::foldPseudoAndOr(G4_BB* bb, INST_LIST_ITER& ii)
74197419
}
74207420
else
74217421
{
7422-
if (/*kernel.getInt32KernelAttr(Attributes::ATTR_Target) != VISA_CM &&*/
7423-
((builder.getuint32Option(vISA_noMaskWA) & 0x3) > 0 ||
7424-
builder.getOption(vISA_forceNoMaskWA)))
7422+
if (builder.hasFusedEUNoMaskWA())
74257423
{
74267424
doNoMaskWA();
74277425
}
@@ -7709,16 +7707,17 @@ bool Optimizer::foldPseudoAndOr(G4_BB* bb, INST_LIST_ITER& ii)
77097707
{
77107708
if (builder.useNewNoMaskWA())
77117709
{
7712-
if (builder.hasFusedEUNoMaskWA() &&
7713-
(builder.getJitInfo()->spillMemUsed > 0 || builder.getJitInfo()->numFlagSpillStore > 0))
7710+
if (builder.hasFusedEUNoMaskWA())
77147711
{
77157712
newDoNoMaskWA_postRA();
77167713
}
77177714
}
7718-
else if (builder.hasFusedEUWA() &&
7719-
(builder.getJitInfo()->spillMemUsed > 0 || builder.getJitInfo()->numFlagSpillStore > 0))
7715+
else
77207716
{
7721-
doNoMaskWA_postRA();
7717+
if (builder.hasFusedEUNoMaskWA())
7718+
{
7719+
doNoMaskWA_postRA();
7720+
}
77227721
}
77237722

77247723
// Ensure the first instruction of a stack function has switch option.
@@ -14071,6 +14070,13 @@ void Optimizer::doNoMaskWA()
1407114070
//
1407214071
void Optimizer::newDoNoMaskWA_postRA()
1407314072
{
14073+
// If no spill, return after clearing NoMaskInfo
14074+
if (!(builder.getJitInfo()->spillMemUsed > 0 || builder.getJitInfo()->numFlagSpillStore > 0))
14075+
{
14076+
kernel.clearNoMaskInfo();
14077+
return;
14078+
}
14079+
1407414080
// Utility class to get flag def/use info for a BB
1407514081
// Each of 16-bit flag has one bit to track whether it is used or defined.
1407614082
// We have 4 flags, thus 4 bits for use and 4 bits for def.
@@ -14815,6 +14821,13 @@ void Optimizer::newDoNoMaskWA_postRA()
1481514821

1481614822
void Optimizer::doNoMaskWA_postRA()
1481714823
{
14824+
// If no spill, clear noMaskInfo and return.
14825+
if (!(builder.getJitInfo()->spillMemUsed > 0 || builder.getJitInfo()->numFlagSpillStore > 0))
14826+
{
14827+
kernel.clearNoMaskInfo();
14828+
return;
14829+
}
14830+
1481814831
std::vector<INST_LIST_ITER> NoMaskCandidates;
1481914832
G4_ExecSize simdsize = fg.getKernel()->getSimdSize();
1482014833

0 commit comments

Comments
 (0)