Skip to content

Commit d10c8b5

Browse files
Jay-Jiewu-Lusys_zuul
authored andcommitted
Changes in code.
Change-Id: Ic47189303ad0567ead4f74884960009734e73d02
1 parent 9ae6663 commit d10c8b5

File tree

8 files changed

+36
-52
lines changed

8 files changed

+36
-52
lines changed

IGC/Compiler/CISACodeGen/CShader.cpp

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,7 @@ void CShader::CreateImplicitArgs()
308308
// Push Args are only for entry function
309309
unsigned numPushArgsEntry = m_ModuleMetadata->pushInfo.pushAnalysisWIInfos.size();
310310
unsigned numPushArgs = (isEntryFunc(m_pMdUtils, entry) && !isNonEntryMultirateShader(entry) ? numPushArgsEntry : 0);
311-
int numFuncArgs = IGCLLVM::GetFuncArgSize(entry) - numImplicitArgs - numPushArgs;
312-
IGC_ASSERT(numFuncArgs >= 0 && "Function arg size does not match meta data and push args.");
311+
unsigned numFuncArgs = IGCLLVM::GetFuncArgSize(entry) - numImplicitArgs - numPushArgs;
313312

314313
// Create symbol for every arguments [5/2019]
315314
// (Previously, symbols are created only for implicit args.)
@@ -345,7 +344,7 @@ void CShader::CreateImplicitArgs()
345344
};
346345

347346
llvm::Function::arg_iterator arg = entry->arg_begin();
348-
for (int i = 0; i < numFuncArgs; ++i, ++arg)
347+
for (unsigned i = 0; i < numFuncArgs; ++i, ++arg)
349348
{
350349
Value* ArgVal = arg;
351350
if (ArgVal->use_empty())
@@ -399,25 +398,6 @@ void CShader::CreateImplicitArgs()
399398
CreateAliasVars();
400399
}
401400

402-
void CShader::GetPrintfStrings(std::vector<std::pair<unsigned int, std::string>>& printfStrings)
403-
{
404-
std::string MDNodeName = "printf.strings";
405-
NamedMDNode* printfMDNode = entry->getParent()->getOrInsertNamedMetadata(MDNodeName);
406-
407-
for (uint i = 0, NumStrings = printfMDNode->getNumOperands();
408-
i < NumStrings;
409-
i++)
410-
{
411-
llvm::MDNode* argMDNode = printfMDNode->getOperand(i);
412-
llvm::ConstantInt* indexOpndVal =
413-
mdconst::dyn_extract<llvm::ConstantInt>(argMDNode->getOperand(0));
414-
llvm::MDString* stringOpndVal =
415-
dyn_cast<llvm::MDString>(argMDNode->getOperand(1));
416-
417-
printfStrings.push_back(
418-
std::pair<unsigned int, std::string>(int_cast<unsigned int>(indexOpndVal->getZExtValue()), stringOpndVal->getString().data()));
419-
}
420-
}
421401
// For sub-vector aliasing, pre-allocating cvariables for those
422402
// valeus that have sub-vector aliasing before emit instructions.
423403
// (The sub-vector aliasing is done in VariableReuseAnalysis.)

IGC/Compiler/CISACodeGen/DriverInfo.hpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -279,12 +279,6 @@ namespace IGC
279279
/// add shader hash code after EOT for debug purposes
280280
virtual bool EnableShaderDebugHashCodeInKernel() const { return false; }
281281

282-
// The size of output printf buffer is 4 MB by default by agreement with Runtime.
283-
virtual uint32_t getPrintfBufferSize() const
284-
{
285-
return 4 * sizeof(MEGABYTE);
286-
}
287-
288282

289283
};
290284

IGC/Compiler/CISACodeGen/OpenCLKernelCodeGen.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -580,18 +580,30 @@ namespace IGC
580580

581581
void COpenCLKernel::CreatePrintfStringAnnotations()
582582
{
583-
std::vector<std::pair<unsigned int, std::string>> printfStrings;
584-
GetPrintfStrings(printfStrings);
583+
std::string MDNodeName = "printf.strings";
584+
NamedMDNode* printfMDNode = entry->getParent()->getOrInsertNamedMetadata(MDNodeName);
585585

586-
for (auto printfString : printfStrings)
586+
for (uint i = 0, NumStrings = printfMDNode->getNumOperands();
587+
i < NumStrings;
588+
i++)
587589
{
588590
iOpenCL::PrintfStringAnnotation* printfAnnotation = new iOpenCL::PrintfStringAnnotation();
591+
592+
llvm::MDNode* argMDNode = printfMDNode->getOperand(i);
593+
594+
llvm::ConstantInt* indexOpndVal =
595+
mdconst::dyn_extract<llvm::ConstantInt>(argMDNode->getOperand(0));
596+
llvm::Metadata* stringOpnd = argMDNode->getOperand(1);
597+
llvm::MDString* stringOpndVal = dyn_cast<llvm::MDString>(stringOpnd);
598+
599+
llvm::StringRef stringData(stringOpndVal->getString());
600+
589601
printfAnnotation->AnnotationSize = sizeof(printfAnnotation);
590-
printfAnnotation->Index = printfString.first;
591-
printfAnnotation->StringSize = printfString.second.size() + 1;
602+
printfAnnotation->Index = int_cast<unsigned int>(indexOpndVal->getZExtValue());
603+
printfAnnotation->StringSize = stringData.size() + 1;
592604
printfAnnotation->StringData = new char[printfAnnotation->StringSize + 1];
593605

594-
memcpy_s(printfAnnotation->StringData, printfAnnotation->StringSize, printfString.second.c_str(), printfAnnotation->StringSize);
606+
memcpy_s(printfAnnotation->StringData, printfAnnotation->StringSize, stringData.data(), printfAnnotation->StringSize);
595607
printfAnnotation->StringData[printfAnnotation->StringSize - 1] = '\0';
596608

597609
m_kernelInfo.m_printfStringAnnotations.push_back(printfAnnotation);

IGC/Compiler/CISACodeGen/ShaderCodeGen.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,6 @@ class CShader
467467

468468
e_alignment getGRFAlignment() const { return CVariable::getAlignment(getGRFSize()); }
469469

470-
protected:
471-
void GetPrintfStrings(std::vector<std::pair<unsigned int, std::string>>& printfStrings);
472470
private:
473471
// Return DefInst's CVariable if it could be reused for UseInst, and return
474472
// nullptr otherwise.

IGC/Compiler/CISACodeGen/WIAnalysis.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,18 +443,17 @@ void WIAnalysisRunner::updateArgsDependency(llvm::Function* pF)
443443
bool IsSubroutine = !isEntryFunc(m_pMdUtils, pF) || isNonEntryMultirateShader(pF);
444444

445445
ImplicitArgs implicitArgs(*pF, m_pMdUtils);
446-
int implicitArgStart = (unsigned)(IGCLLVM::GetFuncArgSize(pF)
446+
unsigned implicitArgStart = (unsigned)(IGCLLVM::GetFuncArgSize(pF)
447447
- implicitArgs.size()
448448
- (IsSubroutine ? 0 : m_ModMD->pushInfo.pushAnalysisWIInfos.size()));
449-
IGC_ASSERT(implicitArgStart >= 0 && "Function arg size does not match meta data and push args.");
450449

451450
llvm::Function::arg_iterator ai, ae;
452451
ai = pF->arg_begin();
453452
ae = pF->arg_end();
454453

455454
// 1. add all kernel function args as uniform, or
456455
// add all subroutine function args as random
457-
for (int i = 0; i < implicitArgStart; ++i, ++ai)
456+
for (unsigned i = 0; i < implicitArgStart; ++i, ++ai)
458457
{
459458
IGC_ASSERT(ai != ae);
460459
incUpdateDepend(&(*ai), IsSubroutine ? WIAnalysis::RANDOM : WIAnalysis::UNIFORM);

IGC/Compiler/Optimizer/OpenCLPasses/OpenCLPrintf/OpenCLPrintfAnalysis.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,37 +58,33 @@ const StringRef OpenCLPrintfAnalysis::OPENCL_PRINTF_FUNCTION_NAME = "printf";
5858

5959
bool OpenCLPrintfAnalysis::runOnModule(Module& M)
6060
{
61+
m_hasPrintf = false;
62+
6163
visit(M);
6264

63-
if (m_hasPrintfs.size())
65+
if (m_hasPrintf)
6466
{
6567
for (Function& func : M.getFunctionList())
6668
{
67-
if (!func.isDeclaration() &&
68-
m_hasPrintfs.find(&func) != m_hasPrintfs.end())
69+
if (!func.isDeclaration())
6970
{
7071
addPrintfBufferArgs(func);
7172
}
7273
}
7374
}
7475

75-
return m_hasPrintfs.size();
76+
return m_hasPrintf;
7677
}
7778

7879
void OpenCLPrintfAnalysis::visitCallInst(llvm::CallInst& callInst)
7980
{
80-
Function* pF = callInst.getParent()->getParent();
81-
if (!callInst.getCalledFunction() || m_hasPrintfs.find(pF)!=m_hasPrintfs.end())
81+
if (!callInst.getCalledFunction())
8282
{
8383
return;
8484
}
8585

8686
StringRef funcName = callInst.getCalledFunction()->getName();
87-
bool hasPrintf = (funcName == OpenCLPrintfAnalysis::OPENCL_PRINTF_FUNCTION_NAME);
88-
if (hasPrintf)
89-
{
90-
m_hasPrintfs.insert(pF);
91-
}
87+
m_hasPrintf |= (funcName == OpenCLPrintfAnalysis::OPENCL_PRINTF_FUNCTION_NAME);
9288
}
9389

9490
void OpenCLPrintfAnalysis::addPrintfBufferArgs(Function& F)

IGC/Compiler/Optimizer/OpenCLPasses/OpenCLPrintf/OpenCLPrintfAnalysis.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ namespace IGC
7575
/// size of the buffer.
7676
void addPrintfBufferArgs(llvm::Function& F);
7777

78-
std::unordered_set < llvm::Function*> m_hasPrintfs;
78+
bool m_hasPrintf;
7979
};
8080

8181
} // namespace IGC

IGC/Compiler/Optimizer/OpenCLPasses/OpenCLPrintf/OpenCLPrintfResolution.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ IGC_INITIALIZE_PASS_END(OpenCLPrintfResolution, PASS_FLAG, PASS_DESCRIPTION, PAS
5555

5656
char OpenCLPrintfResolution::ID = 0;
5757

58+
#define KB ( 1024 )
59+
#define MB ( 1024 * KB )
60+
const unsigned int PrintfBufferSize = 4 * MB;
61+
5862
//
5963
// FORMAT OF PRINTF OUTPUT BUFFER:
6064
// ================================
@@ -516,7 +520,8 @@ void OpenCLPrintfResolution::expandPrintfCall(CallInst& printfCall, Function& F)
516520
Instruction* endOffset = BinaryOperator::CreateAdd(writeOffset, dataSizeVal, "end_offset", &printfCall);
517521
endOffset->setDebugLoc(m_DL);
518522

519-
Value* bufferMaxSize = ConstantInt::get(m_int32Type, m_CGContext->m_DriverInfo.getPrintfBufferSize());
523+
// The size of output printf buffer is 4 MB by agreement with Runtime.
524+
Value* bufferMaxSize = ConstantInt::get(m_int32Type, PrintfBufferSize);
520525

521526
// write_ptr = buffer_ptr + write_offset;
522527
if (m_ptrSizeIntType != writeOffset->getType())

0 commit comments

Comments
 (0)