Skip to content

Commit 48ee004

Browse files
PiotrFusikigcbot
authored andcommitted
Do not tag NULL when converting to generic address space
so that it compares equal to generic address space NULL.
1 parent 240839f commit 48ee004

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8930,6 +8930,13 @@ void EmitPass::emitPtrToInt(llvm::PtrToIntInst* P2I)
89308930

89318931
void EmitPass::emitAddrSpaceToGenericCast(llvm::AddrSpaceCastInst* addrSpaceCast, CVariable* srcV, unsigned tag)
89328932
{
8933+
CVariable* pFlag = m_currShader->GetNewVariable(
8934+
numLanes(m_currShader->m_SIMDSize),
8935+
ISA_TYPE_BOOL, EALIGN_BYTE,
8936+
CName(srcV->getName(), "NotNull"));
8937+
m_encoder->Cmp(EPREDICATE_NE, pFlag, srcV, m_currShader->ImmToVariable(0, ISA_TYPE_UD));
8938+
m_encoder->Push();
8939+
89338940
if (m_pCtx->m_hasEmu64BitInsts && m_currShader->m_Platform->hasNoFullI64Support())
89348941
{
89358942
if (m_currShader->GetContext()->getRegisterPointerSizeInBits(addrSpaceCast->getSrcAddressSpace()) == 32)
@@ -8943,7 +8950,7 @@ void EmitPass::emitAddrSpaceToGenericCast(llvm::AddrSpaceCastInst* addrSpaceCast
89438950
// High:
89448951
m_encoder->SetDstSubReg(1);
89458952
m_encoder->SetDstRegion(2);
8946-
m_encoder->Copy(dstAlias, m_currShader->ImmToVariable(tag << 29, ISA_TYPE_UD));
8953+
m_encoder->Select(pFlag, dstAlias, m_currShader->ImmToVariable(tag << 29, ISA_TYPE_UD), m_currShader->ImmToVariable(0, ISA_TYPE_UD));
89478954
m_encoder->Push();
89488955
}
89498956
else
@@ -8972,6 +8979,7 @@ void EmitPass::emitAddrSpaceToGenericCast(llvm::AddrSpaceCastInst* addrSpaceCast
89728979
m_encoder->Push();
89738980

89748981
// Add tag to high part
8982+
m_encoder->SetPredicate(pFlag);
89758983
m_encoder->Or(srcHigh, srcHigh, m_currShader->ImmToVariable(tag << 29, ISA_TYPE_UD));
89768984
m_encoder->Push();
89778985

@@ -8990,12 +8998,11 @@ void EmitPass::emitAddrSpaceToGenericCast(llvm::AddrSpaceCastInst* addrSpaceCast
89908998
}
89918999
else
89929000
{
8993-
CVariable* pTempVar = m_currShader->GetNewVariable(
8994-
numLanes(m_currShader->m_SIMDSize),
8995-
ISA_TYPE_UQ, m_currShader->getGRFAlignment(),
8996-
m_destination->IsUniform(), CName::NONE);
8997-
m_encoder->Or(pTempVar, srcV, m_currShader->ImmToVariable(static_cast<uint64_t>(tag) << 61, ISA_TYPE_UQ));
8998-
m_encoder->Cast(m_destination, pTempVar);
9001+
m_encoder->Cast(m_destination, srcV);
9002+
m_encoder->Push();
9003+
9004+
m_encoder->SetPredicate(pFlag);
9005+
m_encoder->Or(m_destination, srcV, m_currShader->ImmToVariable(static_cast<uint64_t>(tag) << 61, ISA_TYPE_UQ));
89999006
m_encoder->Push();
90009007
}
90019008
}

0 commit comments

Comments
 (0)