Skip to content

Commit 5a2d94c

Browse files
PawelJurekigcbot
authored andcommitted
Minor refactoring and formatting changes
Minor refactoring and formatting changes in EmitVISAPass
1 parent 8339a7b commit 5a2d94c

File tree

2 files changed

+62
-38
lines changed

2 files changed

+62
-38
lines changed

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 57 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9900,7 +9900,8 @@ void EmitPass::emitLoadRawIndexed(
99009900
immOffset,
99019901
nullptr,
99029902
cacheOpts,
9903-
addrSpace);
9903+
addrSpace
9904+
);
99049905
return;
99059906
}
99069907
IGC_ASSERT(immOffset == nullptr);
@@ -10216,11 +10217,13 @@ void EmitPass::emitLoad(
1021610217
immOffset,
1021710218
immScale,
1021810219
cacheOpts,
10219-
addrSpace);
10220+
addrSpace
10221+
);
1022010222
return;
1022110223
}
1022210224
IGC_ASSERT_MESSAGE(immScale ? immScale->getSExtValue() == 1 : true,
1022310225
"Immediate Scale not supported on non-LSC path!");
10226+
1022410227
emitVectorLoad(inst, offset, immOffset);
1022510228
}
1022610229

@@ -17824,13 +17827,13 @@ CVariable* EmitPass::prepareDataForUniform(
1782417827
return newVar;
1782517828
}
1782617829

17827-
void EmitPass::emitLSCVectorLoad_subDW(LSC_CACHE_OPTS cacheOpts, bool UseA32,
17830+
void EmitPass::emitLSCVectorLoad_subDW(LSC_CACHE_OPTS CacheOpts, bool UseA32,
1782817831
ResourceDescriptor &Resource,
1782917832
CVariable *Dest,
1783017833
CVariable *Offset, int ImmOffset,
1783117834
int ImmScale, uint32_t NumElts,
1783217835
uint32_t EltBytes,
17833-
LSC_DOC_ADDR_SPACE addrSpace) {
17836+
LSC_DOC_ADDR_SPACE AddrSpace) {
1783417837
// NumElts must be 1 !
1783517838
IGC_ASSERT(NumElts == 1 && (EltBytes == 1 || EltBytes == 2));
1783617839

@@ -17866,6 +17869,14 @@ void EmitPass::emitLSCVectorLoad_subDW(LSC_CACHE_OPTS cacheOpts, bool UseA32,
1786617869
eOffset = BroadcastIfUniform(eOffset);
1786717870
}
1786817871

17872+
LSC_ADDR_SIZE addressSize = LSC_ADDR_SIZE_INVALID;
17873+
if (UseA32) {
17874+
addressSize = LSC_ADDR_SIZE_32b;
17875+
}
17876+
else {
17877+
addressSize = LSC_ADDR_SIZE_64b;
17878+
}
17879+
1786917880
// Need a temp as Dest is smaller than DW.
1787017881
e_alignment dataAlign = ((4 * alloc_nbelts) <= (uint32_t)getGRFSize()) ? EALIGN_GRF : EALIGN_2GRF;
1787117882
CVariable* gatherDst =
@@ -17882,10 +17893,9 @@ void EmitPass::emitLSCVectorLoad_subDW(LSC_CACHE_OPTS cacheOpts, bool UseA32,
1788217893
else
1788317894
m_encoder->SetPredicate(flag);
1788417895

17885-
emitLSCLoad(cacheOpts, gatherDst,
17886-
eOffset, EltBytes * 8, 1, 0, &Resource,
17887-
UseA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b,
17888-
LSC_DATA_ORDER_NONTRANSPOSE, ImmOffset, ImmScale, addrSpace);
17896+
emitLSCLoad(CacheOpts, gatherDst,
17897+
eOffset, EltBytes * 8, 1, 0, &Resource, addressSize,
17898+
LSC_DATA_ORDER_NONTRANSPOSE, ImmOffset, ImmScale, AddrSpace);
1788917899
m_encoder->Push();
1789017900
});
1789117901

@@ -17905,16 +17915,14 @@ void EmitPass::emitLSCVectorLoad_subDW(LSC_CACHE_OPTS cacheOpts, bool UseA32,
1790517915
// (max size = UQ x 64 = 512 bytes)
1790617916
// 2. sub-DW-aligned load, vectorSize is 1|2|3|4|8
1790717917
// (max size = UQ x 8 = 64 bytes)
17908-
void EmitPass::emitLSCVectorLoad_uniform(LSC_CACHE_OPTS cacheOpts, bool UseA32,
17909-
ResourceDescriptor &Resource,
17910-
CVariable *Dest,
17911-
CVariable *Offset, int ImmOffset,
17912-
int ImmScale, uint32_t NumElts,
17913-
uint32_t EltBytes, uint64_t Align,
17914-
uint32_t Addrspace,
17915-
LSC_DOC_ADDR_SPACE userAddrSpace) {
17918+
void EmitPass::emitLSCVectorLoad_uniform(
17919+
LSC_CACHE_OPTS cacheOpts, bool UseA32, ResourceDescriptor &Resource,
17920+
CVariable *Dest,
17921+
CVariable *Offset, int ImmOffset,
17922+
int ImmScale, uint32_t NumElts, uint32_t EltBytes, uint64_t Align,
17923+
uint32_t Addrspace, LSC_DOC_ADDR_SPACE userAddrSpace) {
1791617924
IGC_ASSERT(Offset->IsUniform() && (EltBytes == 4 || EltBytes == 8));
17917-
CVariable* eOffset = Offset;
17925+
CVariable *eOffset = Offset;
1791817926
CVariable* ldDest = Dest;
1791917927
uint32_t dSize = EltBytes; // lsc's data size
1792017928
uint32_t vSize = NumElts; // lsc's vector size
@@ -17934,6 +17942,16 @@ void EmitPass::emitLSCVectorLoad_uniform(LSC_CACHE_OPTS cacheOpts, bool UseA32,
1793417942
bool destUniform = Dest->IsUniform();
1793517943
IGC_ASSERT((vSize <= 64 && (vSize <= 8 || isPowerOf2_32(vSize))));
1793617944

17945+
LSC_ADDR_SIZE addressSize = LSC_ADDR_SIZE_INVALID;
17946+
if (UseA32)
17947+
{
17948+
addressSize = LSC_ADDR_SIZE_32b;
17949+
}
17950+
else
17951+
{
17952+
addressSize = LSC_ADDR_SIZE_64b;
17953+
}
17954+
1793717955
// 1. Do a SIMT1 transposed load
1793817956
if ((isPowerOf2_32(vSize) || vSize == 3) && vSize <= 64 &&
1793917957
((Align >= 8 && dSize == 8) || (Align >= 4 && dSize == 4)))
@@ -17952,7 +17970,7 @@ void EmitPass::emitLSCVectorLoad_uniform(LSC_CACHE_OPTS cacheOpts, bool UseA32,
1795217970
m_encoder->SetNoMask();
1795317971
emitLSCLoad(cacheOpts, tDest,
1795417972
eOffset, dSize * 8, vSize, 0, &Resource,
17955-
UseA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b,
17973+
addressSize,
1795617974
LSC_DATA_ORDER_TRANSPOSE, ImmOffset, ImmScale,
1795717975
userAddrSpace);
1795817976
m_encoder->Push();
@@ -17993,7 +18011,7 @@ void EmitPass::emitLSCVectorLoad_uniform(LSC_CACHE_OPTS cacheOpts, bool UseA32,
1799318011
m_encoder->SetNoMask();
1799418012
emitLSCLoad(cacheOpts, tDest,
1799518013
nEOff, dSize * 8, 1, 0, &Resource,
17996-
UseA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b,
18014+
addressSize,
1799718015
LSC_DATA_ORDER_NONTRANSPOSE, ImmOffset, ImmScale,
1799818016
userAddrSpace);
1799918017
m_encoder->Push();
@@ -18007,10 +18025,12 @@ void EmitPass::emitLSCVectorLoad_uniform(LSC_CACHE_OPTS cacheOpts, bool UseA32,
1800718025

1800818026
void EmitPass::emitLSCVectorLoad(Instruction* inst,
1800918027
Value *Ptr,
18010-
Value *varOffset, ConstantInt *immOffset,
18028+
Value *varOffset,
18029+
ConstantInt *immOffset,
1801118030
ConstantInt *immScale,
1801218031
LSC_CACHE_OPTS cacheOpts,
18013-
LSC_DOC_ADDR_SPACE addrSpace) {
18032+
LSC_DOC_ADDR_SPACE addrSpace
18033+
) {
1801418034
Type *Ty = inst->getType();
1801518035
uint64_t align = 0;
1801618036
if (auto LI = dyn_cast<LoadInst>(inst))
@@ -18050,18 +18070,17 @@ void EmitPass::emitLSCVectorLoad(Instruction* inst,
1805018070
if (eltBytes < 4)
1805118071
{
1805218072
IGC_ASSERT(elts == 1);
18053-
// todo handle pjurek scale
1805418073
emitLSCVectorLoad_subDW(cacheOpts, useA32, resource, destCVar,
18055-
eOffset, immOffsetInt, immScaleInt, 1, eltBytes, addrSpace);
18074+
eOffset, immOffsetInt,
18075+
immScaleInt, 1, eltBytes, addrSpace);
1805618076
return;
1805718077
}
1805818078

1805918079
// 2. Handle uniform load
18060-
if (srcUniform && resource.m_resource->IsUniform())
18061-
{
18080+
if (srcUniform && resource.m_resource->IsUniform()) {
1806218081
emitLSCVectorLoad_uniform(cacheOpts, useA32, resource, destCVar,
18063-
eOffset, immOffsetInt, immScaleInt, elts,
18064-
eltBytes, align,
18082+
eOffset, immOffsetInt,
18083+
immScaleInt, elts, eltBytes, align,
1806518084
ptrType->getPointerAddressSpace(), addrSpace);
1806618085
return;
1806718086
}
@@ -18121,21 +18140,24 @@ void EmitPass::emitLSCVectorLoad(Instruction* inst,
1812118140
}
1812218141
VectorMessage::MESSAGE_KIND messageType = VecMessInfo.insts[i].kind;
1812318142
m_encoder->SetPredicate(flag);
18143+
LSC_ADDR_SIZE addressSize = LSC_ADDR_SIZE_INVALID;
18144+
1812418145
switch (messageType) {
1812518146
case VectorMessage::MESSAGE_A32_LSC_RW:
18126-
emitLSCLoad(
18127-
cacheOpts, gatherDst, rawAddrVar, blkBits, numBlks, 0, &resource,
18128-
LSC_ADDR_SIZE_32b, LSC_DATA_ORDER_NONTRANSPOSE, immOffsetInt, immScaleInt, addrSpace);
18147+
addressSize = LSC_ADDR_SIZE_32b;
1812918148
break;
1813018149
case VectorMessage::MESSAGE_A64_LSC_RW:
18131-
emitLSCLoad(cacheOpts, gatherDst,
18132-
rawAddrVar, blkBits, numBlks, 0, &resource,
18133-
LSC_ADDR_SIZE_64b, LSC_DATA_ORDER_NONTRANSPOSE,
18134-
immOffsetInt, immScaleInt, addrSpace);
18150+
addressSize = LSC_ADDR_SIZE_64b;
1813518151
break;
1813618152
default:
18137-
IGC_ASSERT_MESSAGE(0, "Internal Error: unexpected message kind for load!");
18153+
IGC_ASSERT_MESSAGE(
18154+
0, "Internal Error: unexpected message kind for load!");
1813818155
}
18156+
18157+
emitLSCLoad(cacheOpts, gatherDst,
18158+
rawAddrVar, blkBits, numBlks, 0, &resource,
18159+
addressSize, LSC_DATA_ORDER_NONTRANSPOSE,
18160+
immOffsetInt, immScaleInt, addrSpace);
1813918161
m_encoder->Push();
1814018162

1814118163
if (needTemp)

IGC/Compiler/CISACodeGen/EmitVISAPass.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,8 @@ class EmitPass : public llvm::FunctionPass
429429
llvm::Value *offset, llvm::ConstantInt *immOffset,
430430
ConstantInt *immScale,
431431
LSC_CACHE_OPTS cacheOpts,
432-
LSC_DOC_ADDR_SPACE addrSpace);
432+
LSC_DOC_ADDR_SPACE addrSpace
433+
);
433434
void emitLSCVectorStore(llvm::Value *Ptr,
434435
llvm::Value *offset, llvm::ConstantInt *immOffset,
435436
llvm::ConstantInt *immScale, llvm::Value *storedVal,
@@ -950,8 +951,9 @@ class EmitPass : public llvm::FunctionPass
950951
// sub-function of vector load/store
951952
void emitLSCVectorLoad_subDW(LSC_CACHE_OPTS cacheOpts, bool UseA32,
952953
ResourceDescriptor &Resource, CVariable *Dest,
953-
CVariable *Offset, int ImmOffset, int ImmScale,
954-
uint32_t NumElts, uint32_t EltBytes,
954+
CVariable *Offset, int ImmOffset,
955+
int ImmScale, uint32_t NumElts,
956+
uint32_t EltBytes,
955957
LSC_DOC_ADDR_SPACE addrSpace);
956958
void emitLSCVectorLoad_uniform(LSC_CACHE_OPTS cacheOpts, bool UseA32,
957959
ResourceDescriptor &Resource,

0 commit comments

Comments
 (0)