Skip to content

Commit 20de8a1

Browse files
Rishipal Singh Bhatiagfxbot
Rishipal Singh Bhatia
authored andcommitted
Moving WorkGroupWalkOrder metadata variable to new framework. Needed
some changes in the function declarations in the optimizer. Change-Id: Id05582683f123fe655bcd00006a1f5a3656d587d
1 parent cc7a5e4 commit 20de8a1

File tree

9 files changed

+85
-366
lines changed

9 files changed

+85
-366
lines changed

IGC/Compiler/CISACodeGen/OpenCLKernelCodeGen.cpp

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ void COpenCLKernel::CreateKernelArgInfo()
403403
void COpenCLKernel::CreateKernelAttributeInfo()
404404
{
405405
FunctionInfoMetaDataHandle funcInfoMD = m_pMdUtils->getFunctionsInfoItem(entry);
406-
406+
407407
// We need to concatenate 2 things:
408408
// (a) LLVM attributes, except nounwind. Why? Because that's how IGIL does it.
409409
// (b) The attributes that get translated into SPIR metadata:
@@ -439,11 +439,17 @@ void COpenCLKernel::CreateKernelAttributeInfo()
439439
{
440440
m_kernelInfo.m_kernelAttributeInfo += " " + getSubGroupSizeString(subGroupSize);
441441
}
442-
WorkgroupWalkOrderMetaDataHandle workgroupWalkOrder = funcInfoMD->getWorkgroupWalkOrder();
443-
if (workgroupWalkOrder->hasValue())
444-
{
445-
m_kernelInfo.m_kernelAttributeInfo += " " + getWorkgroupWalkOrderString(workgroupWalkOrder);
446-
}
442+
443+
auto it = m_Context->getModuleMetaData()->FuncMD.find(entry);
444+
if (it != m_Context->getModuleMetaData()->FuncMD.end())
445+
{
446+
WorkGroupWalkOrderMD workgroupWalkOrder = it->second.workGroupWalkOrder;
447+
if (workgroupWalkOrder.dim0 || workgroupWalkOrder.dim1 || workgroupWalkOrder.dim2)
448+
{
449+
m_kernelInfo.m_kernelAttributeInfo += " " + getWorkgroupWalkOrderString(workgroupWalkOrder);
450+
}
451+
}
452+
447453
ThreadGroupSizeMetaDataHandle threadGroupSize = funcInfoMD->getThreadGroupSize();
448454
if (threadGroupSize->hasValue())
449455
{
@@ -483,12 +489,12 @@ std::string COpenCLKernel::getSubGroupSizeString(SubGroupSizeMetaDataHandle& sub
483489
subTypeString += ")";
484490
return subTypeString;
485491
}
486-
std::string COpenCLKernel::getWorkgroupWalkOrderString(WorkgroupWalkOrderMetaDataHandle& workgroupWalkOrder)
492+
std::string COpenCLKernel::getWorkgroupWalkOrderString(const IGC::WorkGroupWalkOrderMD& workgroupWalkOrder)
487493
{
488494
std::string subTypeString = "intel_reqd_workgroup_walk_order(";
489-
subTypeString += utostr(workgroupWalkOrder->getDim0()) + ",";
490-
subTypeString += utostr(workgroupWalkOrder->getDim1()) + ",";
491-
subTypeString += utostr(workgroupWalkOrder->getDim2()) + ",";
495+
subTypeString += utostr(workgroupWalkOrder.dim0) + ",";
496+
subTypeString += utostr(workgroupWalkOrder.dim1) + ",";
497+
subTypeString += utostr(workgroupWalkOrder.dim2) + ",";
492498
subTypeString += ")";
493499
return subTypeString;
494500
}
@@ -1601,7 +1607,10 @@ void COpenCLKernel::FillKernel()
16011607
FunctionInfoMetaDataHandle funcInfoMD = m_pMdUtils->getFunctionsInfoItem(entry);
16021608
ThreadGroupSizeMetaDataHandle threadGroupSize = funcInfoMD->getThreadGroupSize();
16031609
SubGroupSizeMetaDataHandle subGroupSize = funcInfoMD->getSubGroupSize();
1604-
WorkgroupWalkOrderMetaDataHandle workgroupWalkOrder = funcInfoMD->getWorkgroupWalkOrder();
1610+
1611+
ModuleMetaData *modMD = m_Context->getModuleMetaData();
1612+
auto funcMD = modMD->FuncMD.find(entry);
1613+
16051614
if(threadGroupSize->hasValue())
16061615
{
16071616
m_kernelInfo.m_executionEnivronment.HasFixedWorkGroupSize = true;
@@ -1614,13 +1623,19 @@ void COpenCLKernel::FillKernel()
16141623
m_kernelInfo.m_executionEnivronment.CompiledSIMDSize = subGroupSize->getSIMD_size();
16151624
}
16161625

1617-
if (workgroupWalkOrder->hasValue())
1618-
{
1619-
m_kernelInfo.m_executionEnivronment.WorkgroupWalkOrder[0] = workgroupWalkOrder->getDim0();
1620-
m_kernelInfo.m_executionEnivronment.WorkgroupWalkOrder[1] = workgroupWalkOrder->getDim1();
1621-
m_kernelInfo.m_executionEnivronment.WorkgroupWalkOrder[2] = workgroupWalkOrder->getDim2();
1622-
}
1623-
1626+
if (funcMD != modMD->FuncMD.end())
1627+
{
1628+
WorkGroupWalkOrderMD workGroupWalkOrder = funcMD->second.workGroupWalkOrder;
1629+
1630+
if (workGroupWalkOrder.dim0 || workGroupWalkOrder.dim1 || workGroupWalkOrder.dim2)
1631+
{
1632+
m_kernelInfo.m_executionEnivronment.WorkgroupWalkOrder[0] = workGroupWalkOrder.dim0;
1633+
m_kernelInfo.m_executionEnivronment.WorkgroupWalkOrder[1] = workGroupWalkOrder.dim1;
1634+
m_kernelInfo.m_executionEnivronment.WorkgroupWalkOrder[2] = workGroupWalkOrder.dim2;
1635+
}
1636+
1637+
}
1638+
16241639
auto &FuncMap = m_Context->getModuleMetaData()->FuncMD;
16251640
auto FuncIter = FuncMap.find(entry);
16261641
if (FuncIter != FuncMap.end())

IGC/Compiler/CISACodeGen/OpenCLKernelCodeGen.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class COpenCLKernel : public CShader
9696
std::string getVecTypeHintString(IGC::IGCMD::VectorTypeHintMetaDataHandle& vecTypeHintInfo);
9797
std::string getThreadGroupSizeString(IGC::IGCMD::ThreadGroupSizeMetaDataHandle& threadGroupSize, bool isHint);
9898
std::string getSubGroupSizeString(IGC::IGCMD::SubGroupSizeMetaDataHandle& subGroupSize);
99-
std::string getWorkgroupWalkOrderString(IGC::IGCMD::WorkgroupWalkOrderMetaDataHandle& workgroupWalkOrder);
99+
std::string getWorkgroupWalkOrderString(const IGC::WorkGroupWalkOrderMD& workgroupWalkOrder);
100100
// Create annotation for printf strings.
101101
void CreatePrintfStringAnnotations();
102102

IGC/Compiler/CISACodeGen/WIAnalysis.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,15 +1364,20 @@ void WIAnalysis::checkLocalIdUniform(
13641364

13651365
MetaDataUtils* pMdUtils = getAnalysis<MetaDataUtilsWrapper>().getMetaDataUtils();
13661366
FunctionInfoMetaDataHandle funcInfoMD = pMdUtils->getFunctionsInfoItem(F);
1367-
1367+
ModuleMetaData *modMD = pCtx->getModuleMetaData();
1368+
auto funcMD = modMD->FuncMD.find(F);
1369+
13681370
int32_t WO_0 = -1, WO_1 = -1, WO_2 = -1;
1369-
WorkgroupWalkOrderMetaDataHandle workgroupWalkOrder = funcInfoMD->getWorkgroupWalkOrder();
1370-
if (workgroupWalkOrder->hasValue())
1371+
if (funcMD != modMD->FuncMD.end())
13711372
{
1372-
WO_0 = workgroupWalkOrder->getDim0();
1373-
WO_1 = workgroupWalkOrder->getDim1();
1374-
WO_2 = workgroupWalkOrder->getDim2();
1375-
}
1373+
WorkGroupWalkOrderMD workGroupWalkOrder = funcMD->second.workGroupWalkOrder;
1374+
if (workGroupWalkOrder.dim0 || workGroupWalkOrder.dim1 || workGroupWalkOrder.dim2)
1375+
{
1376+
WO_0 = workGroupWalkOrder.dim0;
1377+
WO_1 = workGroupWalkOrder.dim1;
1378+
WO_2 = workGroupWalkOrder.dim2;
1379+
}
1380+
}
13761381

13771382
uint32_t simdSize = 0;
13781383
SubGroupSizeMetaDataHandle subGroupSize = funcInfoMD->getSubGroupSize();

IGC/Compiler/MetaDataApi/MetaDataApi.cpp

Lines changed: 2 additions & 196 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,163 +1360,7 @@ llvm::Metadata* SubGroupSizeMetaData::getSIMD_sizeNode( const llvm::MDNode* pPar
13601360

13611361
unsigned int offset = _Mybase::getStartIndex();
13621362
return pParentNode->getOperand(0 + offset).get();
1363-
}
1364-
1365-
1366-
1367-
///
1368-
// Ctor - loads the WorkgroupWalkOrderMetaData from the given metadata node
1369-
//
1370-
WorkgroupWalkOrderMetaData::WorkgroupWalkOrderMetaData(const llvm::MDNode* pNode, bool hasId) :
1371-
_Mybase(pNode, hasId),
1372-
m_Dim0(getDim0Node(pNode)),
1373-
m_Dim1(getDim1Node(pNode)),
1374-
m_Dim2(getDim2Node(pNode)),
1375-
m_pNode(pNode)
1376-
{}
1377-
1378-
///
1379-
// Default Ctor - creates the empty, not named SubGroupSizeMetaData object
1380-
//
1381-
WorkgroupWalkOrderMetaData::WorkgroupWalkOrderMetaData() :
1382-
m_pNode(NULL)
1383-
{}
1384-
1385-
///
1386-
// Ctor - creates the empty, named SubGroupSizeMetaData object
1387-
//
1388-
WorkgroupWalkOrderMetaData::WorkgroupWalkOrderMetaData(const char* name) :
1389-
_Mybase(name),
1390-
m_pNode(NULL)
1391-
{}
1392-
1393-
bool WorkgroupWalkOrderMetaData::hasValue() const
1394-
{
1395-
if (m_Dim0.hasValue())
1396-
{
1397-
return true;
1398-
}
1399-
1400-
if (m_Dim1.hasValue())
1401-
{
1402-
return true;
1403-
}
1404-
1405-
if (m_Dim2.hasValue())
1406-
{
1407-
return true;
1408-
}
1409-
1410-
return NULL != m_pNode || dirty();
1411-
}
1412-
1413-
///
1414-
// Returns true if any of the SubGroupSizeMetaData`s members has changed
1415-
bool WorkgroupWalkOrderMetaData::dirty() const
1416-
{
1417-
if (m_Dim0.dirty())
1418-
{
1419-
return true;
1420-
}
1421-
1422-
if (m_Dim1.dirty())
1423-
{
1424-
return true;
1425-
}
1426-
1427-
if (m_Dim2.dirty())
1428-
{
1429-
return true;
1430-
}
1431-
return false;
1432-
}
1433-
1434-
///
1435-
// Discards the changes done to the SubGroupSizeMetaData instance
1436-
void WorkgroupWalkOrderMetaData::discardChanges()
1437-
{
1438-
m_Dim0.discardChanges();
1439-
m_Dim1.discardChanges();
1440-
m_Dim2.discardChanges();
1441-
}
1442-
1443-
///
1444-
// Generates the new MDNode hierarchy for the given structure
1445-
llvm::Metadata* WorkgroupWalkOrderMetaData::generateNode(llvm::LLVMContext& context) const
1446-
{
1447-
llvm::SmallVector<llvm::Metadata*, 5> args;
1448-
1449-
llvm::Metadata* pIDNode = _Mybase::generateNode(context);
1450-
if (NULL != pIDNode)
1451-
{
1452-
args.push_back(pIDNode);
1453-
}
1454-
1455-
args.push_back(m_Dim0.generateNode(context));
1456-
args.push_back(m_Dim1.generateNode(context));
1457-
args.push_back(m_Dim2.generateNode(context));
1458-
1459-
return llvm::MDNode::get(context, args);
1460-
}
1461-
1462-
///
1463-
// Saves the structure changes to the given MDNode
1464-
void WorkgroupWalkOrderMetaData::save(llvm::LLVMContext& context, llvm::MDNode* pNode) const
1465-
{
1466-
assert(pNode && "The target node should be valid pointer");
1467-
1468-
// we assume that underlying metadata node has not changed under our foot
1469-
if (pNode == m_pNode && !dirty())
1470-
{
1471-
return;
1472-
}
1473-
#if 0
1474-
// check that we could save the new information to the given node without regenerating it
1475-
if (!compatibleWith(pNode))
1476-
{
1477-
pNode->replaceAllUsesWith(generateNode(context));
1478-
return;
1479-
}
1480-
#endif
1481-
1482-
m_Dim0.save(context, llvm::cast<llvm::MDNode>(getDim0Node(pNode)));
1483-
m_Dim1.save(context, llvm::cast<llvm::MDNode>(getDim1Node(pNode)));
1484-
m_Dim2.save(context, llvm::cast<llvm::MDNode>(getDim2Node(pNode)));
1485-
}
1486-
1487-
llvm::Metadata* WorkgroupWalkOrderMetaData::getDim0Node(const llvm::MDNode* pParentNode) const
1488-
{
1489-
if (!pParentNode)
1490-
{
1491-
return NULL;
1492-
}
1493-
1494-
unsigned int offset = _Mybase::getStartIndex();
1495-
return pParentNode->getOperand(0 + offset).get();
1496-
}
1497-
1498-
llvm::Metadata* WorkgroupWalkOrderMetaData::getDim1Node(const llvm::MDNode* pParentNode) const
1499-
{
1500-
if (!pParentNode)
1501-
{
1502-
return NULL;
1503-
}
1504-
1505-
unsigned int offset = _Mybase::getStartIndex();
1506-
return pParentNode->getOperand(1 + offset).get();
1507-
}
1508-
1509-
llvm::Metadata* WorkgroupWalkOrderMetaData::getDim2Node(const llvm::MDNode* pParentNode) const
1510-
{
1511-
if (!pParentNode)
1512-
{
1513-
return NULL;
1514-
}
1515-
1516-
unsigned int offset = _Mybase::getStartIndex();
1517-
return pParentNode->getOperand(2 + offset).get();
1518-
}
1519-
1363+
}
15201364

15211365
///
15221366
// Ctor - loads the VectorTypeHintMetaData from the given metadata node
@@ -2241,7 +2085,6 @@ FunctionInfoMetaData::FunctionInfoMetaData(const llvm::MDNode* pNode, bool hasId
22412085
m_ThreadGroupSize(ThreadGroupSizeMetaData::get(getThreadGroupSizeNode(pNode), true)),
22422086
m_ThreadGroupSizeHint(ThreadGroupSizeMetaData::get(getThreadGroupSizeHintNode(pNode), true)),
22432087
m_SubGroupSize(SubGroupSizeMetaData::get(getSubGroupSizeNode(pNode), true)),
2244-
m_WorkgroupWalkOrder(WorkgroupWalkOrderMetaData::get(getWorkgroupWalkOrderNode(pNode), true)),
22452088
m_LocalOffsets(getLocalOffsetsNode(pNode), true),
22462089
m_ResourceAlloc(ResourceAllocMetaData::get(getResourceAllocNode(pNode), true)),
22472090
m_OpenCLVectorTypeHint(VectorTypeHintMetaData::get(getOpenCLVectorTypeHintNode(pNode), true)),
@@ -2265,7 +2108,6 @@ FunctionInfoMetaData::FunctionInfoMetaData(): m_Type("function_type"),
22652108
m_ThreadGroupSize(ThreadGroupSizeMetaDataHandle::ObjectType::get("thread_group_size")),
22662109
m_ThreadGroupSizeHint(ThreadGroupSizeMetaDataHandle::ObjectType::get("thread_group_size_hint")),
22672110
m_SubGroupSize(SubGroupSizeMetaDataHandle::ObjectType::get("sub_group_size")),
2268-
m_WorkgroupWalkOrder(WorkgroupWalkOrderMetaDataHandle::ObjectType::get("intel_reqd_workgroup_walk_order")),
22692111
m_LocalOffsets("local_offsets"),
22702112
m_ResourceAlloc(ResourceAllocMetaDataHandle::ObjectType::get("resource_alloc")),
22712113
m_OpenCLVectorTypeHint(VectorTypeHintMetaDataHandle::ObjectType::get("opencl_vec_type_hint")),
@@ -2291,7 +2133,6 @@ FunctionInfoMetaData::FunctionInfoMetaData(const char* name):
22912133
m_ThreadGroupSize(ThreadGroupSizeMetaDataHandle::ObjectType::get("thread_group_size")),
22922134
m_ThreadGroupSizeHint(ThreadGroupSizeMetaDataHandle::ObjectType::get("thread_group_size_hint")),
22932135
m_SubGroupSize(SubGroupSizeMetaDataHandle::ObjectType::get("sub_group_size")),
2294-
m_WorkgroupWalkOrder(WorkgroupWalkOrderMetaDataHandle::ObjectType::get("intel_reqd_workgroup_walk_order")),
22952136
m_LocalOffsets("local_offsets"),
22962137
m_ResourceAlloc(ResourceAllocMetaDataHandle::ObjectType::get("resource_alloc")),
22972138
m_OpenCLVectorTypeHint(VectorTypeHintMetaDataHandle::ObjectType::get("opencl_vec_type_hint")),
@@ -2344,12 +2185,6 @@ bool FunctionInfoMetaData::hasValue() const
23442185
return true;
23452186
}
23462187

2347-
2348-
if (m_WorkgroupWalkOrder->hasValue())
2349-
{
2350-
return true;
2351-
}
2352-
23532188
if (m_LocalOffsets.hasValue())
23542189
{
23552190
return true;
@@ -2443,11 +2278,7 @@ bool FunctionInfoMetaData::dirty() const
24432278
if( m_SubGroupSize.dirty() )
24442279
{
24452280
return true;
2446-
}
2447-
if (m_WorkgroupWalkOrder.dirty())
2448-
{
2449-
return true;
2450-
}
2281+
}
24512282
if( m_LocalOffsets.dirty() )
24522283
{
24532284
return true;
@@ -2505,7 +2336,6 @@ void FunctionInfoMetaData::discardChanges()
25052336
m_ThreadGroupSize.discardChanges();
25062337
m_ThreadGroupSizeHint.discardChanges();
25072338
m_SubGroupSize.discardChanges();
2508-
m_WorkgroupWalkOrder.discardChanges();
25092339
m_LocalOffsets.discardChanges();
25102340
m_ResourceAlloc.discardChanges();
25112341
m_OpenCLVectorTypeHint.discardChanges();
@@ -2558,11 +2388,6 @@ llvm::Metadata* FunctionInfoMetaData::generateNode(llvm::LLVMContext& context) c
25582388
args.push_back(m_SubGroupSize.generateNode(context));
25592389
}
25602390

2561-
if (m_WorkgroupWalkOrder->hasValue())
2562-
{
2563-
args.push_back(m_WorkgroupWalkOrder.generateNode(context));
2564-
}
2565-
25662391
if (isLocalOffsetsHasValue())
25672392
{
25682393
args.push_back(m_LocalOffsets.generateNode(context));
@@ -2652,7 +2477,6 @@ void FunctionInfoMetaData::save(llvm::LLVMContext& context, llvm::MDNode* pNode)
26522477
m_ThreadGroupSize.save(context, llvm::cast<llvm::MDNode>(getThreadGroupSizeNode(pNode)));
26532478
m_ThreadGroupSizeHint.save(context, llvm::cast<llvm::MDNode>(getThreadGroupSizeHintNode(pNode)));
26542479
m_SubGroupSize.save(context, llvm::cast<llvm::MDNode>(getSubGroupSizeNode(pNode)));
2655-
m_WorkgroupWalkOrder.save(context, llvm::cast<llvm::MDNode>(getSubGroupSizeNode(pNode)));
26562480
m_LocalOffsets.save(context, llvm::cast<llvm::MDNode>(getLocalOffsetsNode(pNode)));
26572481
m_ResourceAlloc.save(context, llvm::cast<llvm::MDNode>(getResourceAllocNode(pNode)));
26582482
m_OpenCLVectorTypeHint.save(context, llvm::cast<llvm::MDNode>(getOpenCLVectorTypeHintNode(pNode)));
@@ -2775,24 +2599,6 @@ llvm::MDNode* FunctionInfoMetaData::getSubGroupSizeNode( const llvm::MDNode* pPa
27752599
return NULL;
27762600
}
27772601

2778-
llvm::MDNode* FunctionInfoMetaData::getWorkgroupWalkOrderNode(const llvm::MDNode* pParentNode) const
2779-
{
2780-
if (!pParentNode)
2781-
{
2782-
return NULL;
2783-
}
2784-
2785-
unsigned int offset = _Mybase::getStartIndex();
2786-
for (NodeIterator i = NodeIterator(pParentNode, 0 + offset), e = NodeIterator(pParentNode); i != e; ++i)
2787-
{
2788-
if (isNamedNode(i.get(), "sub_group_size"))
2789-
{
2790-
return llvm::dyn_cast<llvm::MDNode>(i.get());
2791-
}
2792-
}
2793-
return NULL;
2794-
}
2795-
27962602
llvm::Metadata* FunctionInfoMetaData::getLocalSizeNode( const llvm::MDNode* pParentNode) const
27972603
{
27982604
if( !pParentNode )

0 commit comments

Comments
 (0)