Skip to content

Commit 694fe9c

Browse files
weiyu-chensys_zuul
authored andcommitted
Refactor the message access type (read/write/both) in SendMsgDescriptor
Change-Id: I17167a75eb4d2c5623f4aff73aeabc18147b0983
1 parent 5e87fde commit 694fe9c

10 files changed

+152
-168
lines changed

visa/BuildIR.h

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,8 +1257,7 @@ class IR_Builder {
12571257
// so we can avoid having to explicitly create extDesc bits
12581258
G4_SendMsgDescriptor* createGeneralMsgDesc(uint32_t desc,
12591259
uint32_t extDesc,
1260-
bool isRead,
1261-
bool isWrite,
1260+
SendAccess access,
12621261
G4_Operand* bti = nullptr,
12631262
G4_Operand* sti = nullptr,
12641263
bool isValidFuncCtrl = true);
@@ -1290,8 +1289,7 @@ class IR_Builder {
12901289
uint32_t desc,
12911290
uint32_t extDesc,
12921291
int src1Len,
1293-
bool isRead,
1294-
bool isWrite,
1292+
SendAccess access,
12951293
G4_Operand *bti,
12961294
bool isValidFuncCtrl = true);
12971295

@@ -1303,8 +1301,7 @@ class IR_Builder {
13031301
bool eot,
13041302
unsigned extMsgLength,
13051303
uint16_t extFuncCtrl,
1306-
bool isRead,
1307-
bool isWrite,
1304+
SendAccess access,
13081305
G4_Operand *bti = nullptr,
13091306
G4_Operand *sti = nullptr);
13101307

@@ -1784,8 +1781,7 @@ class IR_Builder {
17841781
SFID tf_id,
17851782
bool eot,
17861783
bool head_present,
1787-
bool isRead,
1788-
bool isWrite,
1784+
SendAccess access,
17891785
G4_Operand *bti,
17901786
G4_Operand *sti,
17911787
unsigned int option,
@@ -1799,8 +1795,7 @@ class IR_Builder {
17991795
unsigned fc, unsigned exFuncCtrl,
18001796
SFID tf_id, bool eot,
18011797
bool head_present,
1802-
bool isRead,
1803-
bool isWrite,
1798+
SendAccess access,
18041799
G4_Operand *bti, G4_Operand *sti,
18051800
unsigned option,
18061801
bool is_sendc);

visa/BuildIRImpl.cpp

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -120,26 +120,24 @@ RegionDesc* RegionPool::createRegion(uint16_t vstride, uint16_t width, uint16_t
120120
G4_SendMsgDescriptor* IR_Builder::createGeneralMsgDesc(
121121
uint32_t desc,
122122
uint32_t extDesc,
123-
bool isRead,
124-
bool isWrite,
123+
SendAccess access,
125124
G4_Operand* bti,
126125
G4_Operand* sti,
127126
bool isValidFuncCtrl)
128127
{
129-
return new (mem) G4_SendMsgDescriptor(desc, extDesc, isRead, isWrite, bti, sti, isValidFuncCtrl);
128+
return new (mem) G4_SendMsgDescriptor(desc, extDesc, access, bti, sti, isValidFuncCtrl);
130129
}
131130

132131
G4_SendMsgDescriptor* IR_Builder::createSendMsgDesc(
133132
SFID sfid,
134133
uint32_t desc,
135134
uint32_t extDesc,
136135
int src1Len,
137-
bool isRead,
138-
bool isWrite,
136+
SendAccess access,
139137
G4_Operand *bti,
140138
bool isValidFuncCtrl)
141139
{
142-
return new (mem) G4_SendMsgDescriptor(sfid, desc, extDesc, src1Len, isRead, isWrite, bti, isValidFuncCtrl);
140+
return new (mem) G4_SendMsgDescriptor(sfid, desc, extDesc, src1Len, access, bti, isValidFuncCtrl);
143141
}
144142

145143
G4_SendMsgDescriptor* IR_Builder::createSendMsgDesc(
@@ -150,14 +148,13 @@ G4_SendMsgDescriptor* IR_Builder::createSendMsgDesc(
150148
bool eot,
151149
unsigned extMsgLength,
152150
uint16_t extFuncCtrl,
153-
bool isRead,
154-
bool isWrite,
151+
SendAccess access,
155152
G4_Operand *bti,
156153
G4_Operand *sti)
157154
{
158155
G4_SendMsgDescriptor* msgDesc = new (mem) G4_SendMsgDescriptor(
159156
funcCtrl, regs2rcv, regs2snd, SFIDtoInt(funcID), eot, (uint16_t) extMsgLength,
160-
extFuncCtrl, isRead, isWrite, bti, sti, *this);
157+
extFuncCtrl, access, bti, sti, *this);
161158
return msgDesc;
162159
}
163160

@@ -169,7 +166,7 @@ G4_SendMsgDescriptor* IR_Builder::createReadMsgDesc(SFID sfid,
169166
{
170167
//ToDo: move extDesc into SendMsgDesc ctor
171168
uint32_t extDesc = G4_SendMsgDescriptor::createExtDesc(sfid);
172-
return new (mem) G4_SendMsgDescriptor(sfid, desc, extDesc, 0, true, false, bti, true);
169+
return new (mem) G4_SendMsgDescriptor(sfid, desc, extDesc, 0, SendAccess::READ_ONLY, bti, true);
173170
}
174171

175172
G4_SendMsgDescriptor* IR_Builder::createWriteMsgDesc(SFID sfid,
@@ -179,14 +176,14 @@ G4_SendMsgDescriptor* IR_Builder::createWriteMsgDesc(SFID sfid,
179176
{
180177
//ToDo: move extDesc into SendMsgDesc ctor
181178
uint32_t extDesc = G4_SendMsgDescriptor::createExtDesc(sfid, false, src1Len);
182-
return new (mem) G4_SendMsgDescriptor(sfid, desc, extDesc, src1Len, false, true, bti, true);
179+
return new (mem) G4_SendMsgDescriptor(sfid, desc, extDesc, src1Len, SendAccess::WRITE_ONLY, bti, true);
183180
}
184181

185182
G4_SendMsgDescriptor* IR_Builder::createSyncMsgDesc(SFID sfid, uint32_t desc)
186183
{
187184
//ToDo: move extDesc into SendMsgDesc ctor
188185
uint32_t extDesc = G4_SendMsgDescriptor::createExtDesc(sfid);
189-
return new (mem) G4_SendMsgDescriptor(sfid, desc, extDesc, 0, true, true, nullptr, true);
186+
return new (mem) G4_SendMsgDescriptor(sfid, desc, extDesc, 0, SendAccess::READ_WRITE, nullptr, true);
190187
}
191188

192189
G4_SendMsgDescriptor* IR_Builder::createSampleMsgDesc(
@@ -203,7 +200,7 @@ G4_SendMsgDescriptor* IR_Builder::createSampleMsgDesc(
203200
{
204201
extDesc |= 1 << CPS_LOD_COMPENSATION_ENABLE;
205202
}
206-
return new (mem) G4_SendMsgDescriptor(desc, extDesc, true, false, bti, sti, true);
203+
return new (mem) G4_SendMsgDescriptor(desc, extDesc, SendAccess::READ_ONLY, bti, sti, true);
207204
}
208205

209206
G4_Operand* IR_Builder::emitSampleIndexGE16(
@@ -820,16 +817,15 @@ G4_InstSend* IR_Builder::Create_Send_Inst_For_CISA(
820817
SFID tf_id,
821818
bool eot,
822819
bool header_present,
823-
bool isRead,
824-
bool isWrite,
820+
SendAccess access,
825821
G4_Operand* bti,
826822
G4_Operand* sti,
827823
unsigned int option,
828824
bool is_sendc)
829825
{
830826
G4_SendMsgDescriptor* msgDesc =
831827
createSendMsgDesc(fc, regs2rcv, regs2snd, tf_id,
832-
eot, 0, 0, isRead, isWrite, bti, sti);
828+
eot, 0, 0, access, bti, sti);
833829

834830
msgDesc->setHeaderPresent(header_present);
835831

@@ -990,16 +986,15 @@ G4_InstSend* IR_Builder::Create_SplitSend_Inst_For_CISA(
990986
SFID tf_id,
991987
bool eot,
992988
bool header_present,
993-
bool isRead,
994-
bool isWrite,
989+
SendAccess access,
995990
G4_Operand* bti,
996991
G4_Operand* sti,
997992
unsigned int option,
998993
bool is_sendc)
999994
{
1000995
G4_SendMsgDescriptor *msgDesc =
1001996
createSendMsgDesc(fc, regs2rcv, regs2snd1, tf_id, eot, regs2snd2,
1002-
(uint16_t)exFuncCtrl, isRead, isWrite, bti, sti);
997+
(uint16_t)exFuncCtrl, access, bti, sti);
1003998

1004999
msgDesc->setHeaderPresent(header_present);
10051000

visa/FlowGraph.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3851,7 +3851,7 @@ void G4_BB::addEOTSend(G4_INST* lastInst)
38513851

38523852
G4_DstRegRegion *sendDst = builder->createNullDst(Type_UD);
38533853

3854-
auto msgDesc = builder->createGeneralMsgDesc(desc, exdesc, false, true);
3854+
auto msgDesc = builder->createGeneralMsgDesc(desc, exdesc, SendAccess::WRITE_ONLY);
38553855
G4_INST* sendInst = builder->createSendInst(
38563856
NULL,
38573857
G4_send,

visa/Gen4_IR.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ short Operand_Type_Rank( G4_Type type )
236236
G4_SendMsgDescriptor::G4_SendMsgDescriptor(
237237
uint32_t fCtrl, uint32_t regs2rcv,
238238
uint32_t regs2snd, uint32_t fID, bool isEot, uint16_t extMsgLen,
239-
uint32_t extFCtrl, bool isRead, bool isWrite,
239+
uint32_t extFCtrl, SendAccess access,
240240
G4_Operand *bti, G4_Operand *sti,
241241
IR_Builder& builder)
242242
{
@@ -258,8 +258,7 @@ G4_SendMsgDescriptor::G4_SendMsgDescriptor(
258258
eotAfterMessage = isEot; // [5]
259259
sfid = intToSFID(fID);
260260

261-
readMsg = isRead;
262-
writeMsg = isWrite;
261+
accessType = access;
263262
funcCtrlValid = true;
264263

265264

@@ -287,12 +286,11 @@ G4_SendMsgDescriptor::G4_SendMsgDescriptor(
287286

288287
G4_SendMsgDescriptor::G4_SendMsgDescriptor(
289288
uint32_t descBits, uint32_t extDescBits,
290-
bool isRead,
291-
bool isWrite,
289+
SendAccess access,
292290
G4_Operand *bti,
293291
G4_Operand *sti,
294292
bool isValidFuncCtrl)
295-
: readMsg(isRead), writeMsg(isWrite), m_sti(sti), m_bti(bti), funcCtrlValid(isValidFuncCtrl)
293+
: accessType(access), m_sti(sti), m_bti(bti), funcCtrlValid(isValidFuncCtrl)
296294
{
297295
desc.value = descBits;
298296
extDesc.value = extDescBits;
@@ -316,11 +314,10 @@ G4_SendMsgDescriptor::G4_SendMsgDescriptor(
316314
uint32_t _desc,
317315
uint32_t _extDesc,
318316
int _src1Len,
319-
bool isRead,
320-
bool isWrite,
317+
SendAccess access,
321318
G4_Operand *bti,
322319
bool isValidFuncCtrl)
323-
: readMsg(isRead), writeMsg(isWrite), m_sti(nullptr), m_bti(bti), sfid(_sfid), funcCtrlValid(isValidFuncCtrl)
320+
: accessType(access), m_sti(nullptr), m_bti(bti), sfid(_sfid), funcCtrlValid(isValidFuncCtrl)
324321
{
325322
desc.value = _desc;
326323
extDesc.value = _extDesc;

visa/Gen4_IR.hpp

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,13 @@ typedef std::list<USE_DEF_NODE, USE_DEF_ALLOCATOR >::iterator DEF_EDGE_LIST_ITER
229229

230230
namespace vISA
231231
{
232+
233+
enum class SendAccess
234+
{
235+
READ_ONLY,
236+
WRITE_ONLY,
237+
READ_WRITE
238+
};
232239
class G4_SendMsgDescriptor
233240
{
234241
private:
@@ -275,11 +282,7 @@ class G4_SendMsgDescriptor
275282
ExtendedMsgDescLayout layout;
276283
} extDesc;
277284

278-
/// Whether is a dataport read message.
279-
bool readMsg;
280-
281-
/// Whether is a dataport write message.
282-
bool writeMsg;
285+
SendAccess accessType;
283286

284287
/// Whether funcCtrl is valid
285288
bool funcCtrlValid;
@@ -296,25 +299,22 @@ class G4_SendMsgDescriptor
296299

297300
G4_SendMsgDescriptor(uint32_t fCtrl, uint32_t regs2rcv, uint32_t regs2snd,
298301
uint32_t fID, bool isEot, uint16_t extMsgLength, uint32_t extFCtrl,
299-
bool isRead, bool isWrite, G4_Operand *bti, G4_Operand *sti, IR_Builder& builder);
302+
SendAccess access, G4_Operand *bti, G4_Operand *sti, IR_Builder& builder);
300303

301304
/// Construct a object with descriptor and extended descriptor values.
302-
/// used in IR_Builder::createSendMsgDesc(uint32_t desc, uint32_t extDesc, bool isRead, bool isWrite)
303-
G4_SendMsgDescriptor(uint32_t desc, uint32_t extDesc,
304-
bool isRead,
305-
bool isWrite,
306-
G4_Operand *bti,
307-
G4_Operand *sti,
308-
bool isValidFuncCtrl);
305+
/// used in IR_Builder::createSendMsgDesc(uint32_t desc, uint32_t extDesc, SendAccess access)
306+
G4_SendMsgDescriptor(uint32_t desc, uint32_t extDesc, SendAccess access,
307+
G4_Operand* bti,
308+
G4_Operand* sti,
309+
bool isValidFuncCtrl);
309310

310311
/// Preferred constructor takes an explicit SFID and src1 length
311312
G4_SendMsgDescriptor(
312313
SFID sfid,
313314
uint32_t desc,
314315
uint32_t extDesc,
315316
int src1Len,
316-
bool isRead,
317-
bool isWrite,
317+
SendAccess access,
318318
G4_Operand *bti,
319319
bool isValidFuncCtrl);
320320

@@ -383,8 +383,9 @@ class G4_SendMsgDescriptor
383383
uint16_t extMessageLength() const { return (uint16_t)src1Len; }
384384

385385
bool isCPSEnabled() const {return extDesc.layout.cps != 0;}
386-
bool isDataPortRead() const { return readMsg; }
387-
bool isDataPortWrite() const { return writeMsg; }
386+
bool isDataPortRead() const { return accessType != SendAccess::WRITE_ONLY; }
387+
bool isDataPortWrite() const { return accessType != SendAccess::READ_ONLY; }
388+
SendAccess getAccess() const { return accessType; }
388389
bool isValidFuncCtrl() const { return funcCtrlValid; }
389390
bool isSampler() const {return getFuncId() == SFID::SAMPLER;}
390391
bool isHDC() const

visa/Optimizer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7744,7 +7744,7 @@ void genBucket(G4_INST *send, Bucket *bucket, RW rwType) {
77447744
msgDescImm |= i;
77457745

77467746
G4_SendMsgDescriptor* desc = kernel.fg.builder->createSendMsgDesc(
7747-
msgDescImm, 0, 1, funcID, false, msgSize, extFuncCtrl, false, true);
7747+
msgDescImm, 0, 1, funcID, false, msgSize, extFuncCtrl, SendAccess::WRITE_ONLY);
77487748
RegionDesc* region = kernel.fg.builder->getRegionStride1();
77497749
G4_SrcRegRegion* headerOpnd = kernel.fg.builder->Create_Src_Opnd_From_Dcl(kernel.fg.builder->getBuiltinR0(), region);
77507750
G4_Declare* tempDcl = builder.createHardwiredDeclare(msgSize * 8, Type_UD, i, 0);

visa/Rematerialization.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -933,7 +933,7 @@ namespace vISA
933933

934934
auto dstMsgDesc = dstInst->getMsgDesc();
935935
auto newMsgDesc = kernel.fg.builder->createGeneralMsgDesc(dstMsgDesc->getDesc(),
936-
dstMsgDesc->getExtendedDesc(), dstMsgDesc->isDataPortRead(), dstMsgDesc->isDataPortWrite(),
936+
dstMsgDesc->getExtendedDesc(), dstMsgDesc->getAccess(),
937937
kernel.fg.builder->duplicateOperand(dstMsgDesc->getBti()),
938938
kernel.fg.builder->duplicateOperand(dstMsgDesc->getSti()));
939939

visa/SendFusion.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -574,8 +574,7 @@ void SendFusion::simplifyMsg(INST_LIST_ITER SendIter)
574574
descImm,
575575
desc->getExtendedDesc(),
576576
desc->extMessageLength(),
577-
desc->isDataPortRead(),
578-
desc->isDataPortWrite(),
577+
desc->getAccess(),
579578
desc->getBti());
580579
Send->setMsgDesc(newDesc);
581580

@@ -1475,8 +1474,7 @@ void SendFusion::doFusion(
14751474
false,
14761475
msgLen,
14771476
desc->getExtFuncCtrl(),
1478-
desc->isDataPortRead(),
1479-
desc->isDataPortWrite(),
1477+
desc->getAccess(),
14801478
bti);
14811479

14821480
G4_SrcRegRegion* s0 = I0->getOperand(Opnd_src0)->asSrcRegRegion();
@@ -1526,8 +1524,7 @@ void SendFusion::doFusion(
15261524
false,
15271525
newExtMsgLen,
15281526
desc->getExtFuncCtrl(),
1529-
desc->isDataPortRead(),
1530-
desc->isDataPortWrite(),
1527+
desc->getAccess(),
15311528
bti);
15321529

15331530
// First, create fused send.

0 commit comments

Comments
 (0)