Skip to content

Commit 0429096

Browse files
trbauersys_zuul
authored andcommitted
Plumbs LLVM names into vISA to improve debugging
and readability of both vISA and GEN assembly Change-Id: I359123471d36e73ec75a1d3ff1e3d092c130b248
1 parent 03b23b4 commit 0429096

16 files changed

+1052
-545
lines changed

IGC/Compiler/CISACodeGen/CISABuilder.cpp

Lines changed: 76 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,9 @@ namespace IGC
275275
else
276276
{
277277
// create a copy to make the CVariable aligned
278-
auto tmpVar = m_program->GetNewVariable(8, var->GetType(), CVariable::getAlignment(getGRFSize()));
278+
auto tmpVar = m_program->GetNewVariable(
279+
8, var->GetType(), CVariable::getAlignment(getGRFSize()),
280+
CName::NONE);
279281
SModifier mod;
280282
mod.init();
281283
auto dstOpnd = GetDestinationOperand(tmpVar, mod);
@@ -1878,7 +1880,8 @@ namespace IGC
18781880

18791881
if (Lo == nullptr) {
18801882
// We cannot reduce the strength if only Lo is ignored.
1881-
Lo = m_program->GetNewVariable(Hi->GetNumberElement(), Hi->GetType(), Hi->GetAlign(), Hi->IsUniform());
1883+
Lo = m_program->GetNewVariable(
1884+
Hi->GetNumberElement(), Hi->GetType(), Hi->GetAlign(), Hi->IsUniform(), Hi->getName());
18821885
}
18831886

18841887
// Use `UD` only.
@@ -1916,7 +1919,9 @@ namespace IGC
19161919
VISA_VectorOpnd* HIn = GetSourceOperand(Hi, NewDstMod);
19171920

19181921
unsigned NumElems = 8;
1919-
CVariable* Carry = m_program->GetNewVariable((uint16_t)NumElems, Lo->GetType(), Lo->GetAlign(), Lo->IsUniform());
1922+
CVariable* Carry = m_program->GetNewVariable(
1923+
(uint16_t)NumElems, Lo->GetType(), Lo->GetAlign(), Lo->IsUniform(),
1924+
CName(Lo->getName(), "Carry"));
19201925
VISA_VectorOpnd* AccOut = GetDestinationOperand(Carry, m_encoderState.m_dstOperand);
19211926
VISA_VectorOpnd* AccIn = GetSourceOperand(Carry, m_encoderState.m_dstOperand);
19221927

@@ -1957,7 +1962,8 @@ namespace IGC
19571962
unsigned short NumElems = (ExecSize == EXEC_SIZE_1) ? 1 :
19581963
(ExecSize == EXEC_SIZE_2) ? 2 :
19591964
(ExecSize == EXEC_SIZE_4) ? 4 : 8;
1960-
CVariable* Carry = m_program->GetNewVariable(NumElems, Lo->GetType(), Lo->GetAlign(), Lo->IsUniform());
1965+
CVariable* Carry = m_program->GetNewVariable(
1966+
NumElems, Lo->GetType(), Lo->GetAlign(), Lo->IsUniform(), CName(Lo->getName(), "Carry"));
19611967
VISA_VectorOpnd* AccOut = GetDestinationOperand(Carry, m_encoderState.m_dstOperand);
19621968

19631969
SModifier MidMod = m_encoderState.m_dstOperand;
@@ -2010,7 +2016,8 @@ namespace IGC
20102016

20112017
if (Lo == nullptr) {
20122018
// We cannot reduce the strength if only Lo is ignored.
2013-
Lo = m_program->GetNewVariable(Hi->GetNumberElement(), Hi->GetType(), Hi->GetAlign(), Hi->IsUniform());
2019+
Lo = m_program->GetNewVariable(
2020+
Hi->GetNumberElement(), Hi->GetType(), Hi->GetAlign(), Hi->IsUniform(), CName(Hi->getName(), "Carry"));
20142021
}
20152022

20162023
// Use `UD` only.
@@ -2050,7 +2057,8 @@ namespace IGC
20502057
VISA_VectorOpnd* HIn = GetSourceOperand(Hi, NewDstMod);
20512058

20522059
unsigned short NumElems = 8;
2053-
CVariable* Carry = m_program->GetNewVariable(NumElems, Lo->GetType(), Lo->GetAlign(), Lo->IsUniform());
2060+
CVariable* Carry =
2061+
m_program->GetNewVariable(NumElems, Lo->GetType(), Lo->GetAlign(), Lo->IsUniform(), CName(Lo->getName(), "Carry"));
20542062
VISA_VectorOpnd* AccOut = GetDestinationOperand(Carry, m_encoderState.m_dstOperand);
20552063
// Negative `Acc0`
20562064
SModifier AccMod = m_encoderState.m_dstOperand;
@@ -2085,7 +2093,8 @@ namespace IGC
20852093
VISA_PredOpnd* Pred = GetFlagOperand(m_encoderState.m_flag);
20862094

20872095
unsigned short NumElems = (ExecSize == 1) ? 1 : 8;
2088-
CVariable* Carry = m_program->GetNewVariable(NumElems, Lo->GetType(), Lo->GetAlign(), Lo->IsUniform());
2096+
CVariable* Carry = m_program->GetNewVariable(
2097+
NumElems, Lo->GetType(), Lo->GetAlign(), Lo->IsUniform(), CName(Lo->getName(), "Carry"));
20892098
VISA_VectorOpnd* AccOut = GetDestinationOperand(Carry, m_encoderState.m_dstOperand);
20902099

20912100
SModifier MidMod = m_encoderState.m_dstOperand;
@@ -2204,7 +2213,7 @@ namespace IGC
22042213
}
22052214
else
22062215
{
2207-
CVariable* tmpDst = m_program->GetNewVariable(8, ISA_TYPE_UD, EALIGN_GRF, true);
2216+
CVariable* tmpDst = m_program->GetNewVariable(8, ISA_TYPE_UD, EALIGN_GRF, true, CName::NONE);
22082217
VISA_VectorOpnd* movDst = nullptr;
22092218
V(vKernel->CreateVISADstOperand(movDst, GetVISAVariable(tmpDst), 1, 0, 0));
22102219

@@ -4628,7 +4637,7 @@ namespace IGC
46284637

46294638
V(vKernel->CreateVISAGenVar(
46304639
var->visaGenVariable[i],
4631-
"",
4640+
var->getVisaCString(),
46324641
nbElement,
46334642
var->GetType(),
46344643
GetVISAAlign(var->GetAlias()), // Use parent's align as we create an alias of the parent.
@@ -4650,7 +4659,7 @@ namespace IGC
46504659
{
46514660
V(vKernel->CreateVISAGenVar(
46524661
var->visaGenVariable[i],
4653-
"",
4662+
var->getVisaCString(),
46544663
num_elts,
46554664
var->GetType(),
46564665
GetVISAAlign(var)));
@@ -5244,10 +5253,12 @@ namespace IGC
52445253
}
52455254
}
52465255

5247-
void CEncoder::GatherA64(CVariable* dst,
5256+
void CEncoder::GatherA64(
5257+
CVariable* dst,
52485258
CVariable* offset,
52495259
unsigned elemSize,
5250-
unsigned numElems) {
5260+
unsigned numElems)
5261+
{
52515262
IGC_ASSERT_MESSAGE((elemSize == 8) || (elemSize == 32) || (elemSize == 64),
52525263
"Only B/DW/QW-sized elements are supported!");
52535264
IGC_ASSERT_MESSAGE((numElems == 1) || (numElems == 2) || (numElems == 4) || ((numElems == 8) && ((elemSize == 32) || m_program->m_Platform->has8ByteA64ByteScatteredMessage())),
@@ -5287,14 +5298,18 @@ namespace IGC
52875298
// to form the single simd16 payload.
52885299
CVariable* V0, * V1;
52895300
uint16_t newNumElems = (uint16_t)8 * numElems;
5290-
V0 = m_program->GetNewVariable(newNumElems,
5301+
V0 = m_program->GetNewVariable(
5302+
newNumElems,
52915303
dst->GetType(),
52925304
dst->GetAlign(),
5293-
dst->IsUniform());
5294-
V1 = m_program->GetNewVariable(newNumElems,
5305+
dst->IsUniform(),
5306+
dst->getName());
5307+
V1 = m_program->GetNewVariable(
5308+
newNumElems,
52955309
dst->GetType(),
52965310
dst->GetAlign(),
5297-
dst->IsUniform());
5311+
dst->IsUniform(),
5312+
dst->getName());
52985313

52995314
for (unsigned p = 0; p < 2; ++p)
53005315
{
@@ -5365,14 +5380,18 @@ namespace IGC
53655380
// data payload by splitting the original simd16 data payload.
53665381
CVariable* V0, * V1;
53675382
uint16_t newNumElems = (uint16_t)8 * numElems;
5368-
V0 = m_program->GetNewVariable(newNumElems,
5383+
V0 = m_program->GetNewVariable(
5384+
newNumElems,
53695385
src->GetType(),
53705386
src->GetAlign(),
5371-
src->IsUniform());
5372-
V1 = m_program->GetNewVariable(newNumElems,
5387+
src->IsUniform(),
5388+
CName::NONE);
5389+
V1 = m_program->GetNewVariable(
5390+
newNumElems,
53735391
src->GetType(),
53745392
src->GetAlign(),
5375-
src->IsUniform());
5393+
src->IsUniform(),
5394+
CName::NONE);
53765395
// Starting offset is calculated from AliasOffset only (subVar not used).
53775396
uint32_t srcOfstBytes = src->GetAliasOffset();
53785397
SplitPayloadToLowerSIMD(src, srcOfstBytes, numElems, V0, V1, 16);
@@ -5401,7 +5420,8 @@ namespace IGC
54015420
addressOpnd, srcOpnd));
54025421
}
54035422

5404-
void CEncoder::ByteGather(CVariable* dst,
5423+
void CEncoder::ByteGather(
5424+
CVariable* dst,
54055425
const ResourceDescriptor& resource,
54065426
CVariable* offset,
54075427
unsigned elemSize,
@@ -5418,11 +5438,13 @@ namespace IGC
54185438
SEncoderState gatherState = CopyEncoderState();
54195439
Push();
54205440

5421-
CVariable* offset64 = m_program->GetNewVariable(offset->GetNumberElement(),
5441+
CVariable* offset64 = m_program->GetNewVariable(
5442+
offset->GetNumberElement(),
54225443
ISA_TYPE_UQ,
54235444
EALIGN_GRF,
54245445
offset->IsUniform(),
5425-
offset->GetNumberInstance());
5446+
offset->GetNumberInstance(),
5447+
CName(offset->getName(), "_64b"));
54265448

54275449
CVariable* offset32UD = m_program->BitCast(offset, ISA_TYPE_UD);
54285450

@@ -5463,11 +5485,13 @@ namespace IGC
54635485
addressOpnd, dstOpnd));
54645486
}
54655487

5466-
void CEncoder::ByteScatter(CVariable* src,
5488+
void CEncoder::ByteScatter(
5489+
CVariable* src,
54675490
const ResourceDescriptor& resource,
54685491
CVariable* offset,
54695492
unsigned elemSize,
5470-
unsigned numElems) {
5493+
unsigned numElems)
5494+
{
54715495
IGC_ASSERT_MESSAGE(elemSize == 8, "Only BYTE element is supported!");
54725496
IGC_ASSERT_MESSAGE((numElems == 1) || (numElems == 2) || (numElems == 4),
54735497
"Only 1/2/4 elements are supported!");
@@ -5480,11 +5504,13 @@ namespace IGC
54805504
SEncoderState gatherState = CopyEncoderState();
54815505
Push();
54825506

5483-
CVariable* offset64 = m_program->GetNewVariable(offset->GetNumberElement(),
5507+
CVariable* offset64 = m_program->GetNewVariable(
5508+
offset->GetNumberElement(),
54845509
ISA_TYPE_UQ,
54855510
EALIGN_GRF,
54865511
offset->IsUniform(),
5487-
offset->GetNumberInstance());
5512+
offset->GetNumberInstance(),
5513+
CName(offset->getName(), "_64b"));
54885514

54895515
CVariable* offset32UD = m_program->BitCast(offset, ISA_TYPE_UD);
54905516

@@ -5673,14 +5699,18 @@ namespace IGC
56735699
// by merging the two simd8 data payload.
56745700
CVariable* V0, * V1;
56755701
uint16_t newNumElems = (uint16_t)8 * nd;
5676-
V0 = m_program->GetNewVariable(newNumElems,
5702+
V0 = m_program->GetNewVariable(
5703+
newNumElems,
56775704
dst->GetType(),
56785705
dst->GetAlign(),
5679-
dst->IsUniform());
5680-
V1 = m_program->GetNewVariable(newNumElems,
5706+
dst->IsUniform(),
5707+
CName(dst->getName(),"_M0"));
5708+
V1 = m_program->GetNewVariable(
5709+
newNumElems,
56815710
dst->GetType(),
56825711
dst->GetAlign(),
5683-
dst->IsUniform());
5712+
dst->IsUniform(),
5713+
CName(dst->getName(),"_M8"));
56845714

56855715
for (unsigned p = 0; p < 2; ++p)
56865716
{
@@ -5769,14 +5799,18 @@ namespace IGC
57695799
// two SIMD8 data payload by spliting the original simd16 data payload.
57705800
CVariable* V0, * V1;
57715801
uint16_t newNumElems = (uint16_t)8 * nd;
5772-
V0 = m_program->GetNewVariable(newNumElems,
5802+
V0 = m_program->GetNewVariable(
5803+
newNumElems,
57735804
src->GetType(),
57745805
src->GetAlign(),
5775-
src->IsUniform());
5776-
V1 = m_program->GetNewVariable(newNumElems,
5806+
src->IsUniform(),
5807+
CName(src->getName(),"_M0"));
5808+
V1 = m_program->GetNewVariable(
5809+
newNumElems,
57775810
src->GetType(),
57785811
src->GetAlign(),
5779-
src->IsUniform());
5812+
src->IsUniform(),
5813+
CName(src->getName(),"_M8"));
57805814

57815815
SplitPayloadToLowerSIMD(src, srcOfstBytes, nd, V0, V1, 16);
57825816

@@ -5806,7 +5840,8 @@ namespace IGC
58065840
addressOpnd, srcOpnd));
58075841
}
58085842

5809-
void CEncoder::AtomicRawA64(AtomicOp atomic_op,
5843+
void CEncoder::AtomicRawA64(
5844+
AtomicOp atomic_op,
58105845
const ResourceDescriptor& resource,
58115846
CVariable* dst,
58125847
CVariable* offset,
@@ -5851,7 +5886,11 @@ namespace IGC
58515886
}
58525887
else
58535888
{
5854-
rawOpndVar = m_program->GetNewVariable(8, dst->GetType(), CVariable::getAlignment(getGRFSize()));
5889+
rawOpndVar = m_program->GetNewVariable(
5890+
8,
5891+
dst->GetType(),
5892+
CVariable::getAlignment(getGRFSize()),
5893+
CName(dst->getName(), "_RET"));
58555894
dstOpnd = GetRawDestination(rawOpndVar, 0);
58565895
}
58575896

0 commit comments

Comments
 (0)